国家二级C语言机试(C语言程序设计)模拟试卷31
选择题
1.以下能正确定义且赋初值的语句是(B)
A. int n1=n2=10;
B. char c=32;
C. float f=f+1.1;
D. double x=12.3E2.5;
解析:本题主要考查变量的定义和赋值,C语言中变量的定义形式为:类型说明符变量名=初始值:
选项A中,n1和n2只能单独赋初值;选项B正确,定义了一个字符变量c,初值为32;选项C错误,初值设置自身不能参与运算;选项D中字母E后面的指数必须是整数。
2.设有定义:int n1=0,n2,*p=n2,*q=n1;,以下赋值语句中与n2=n1;语句等价的是(A)
A. *p=*q;
B. p=q;
C. *p=n1;
D. p=*q;
解析:本题考查指针的使用。指针p和q分别指向变量n2和n1,n2=n1可以用指针来代替,即*p代替n2,*q代替n1。
3.以下函数的功能是:通过键盘输入数据,为数组中的所有元素赋值。
#include
#define N 10
void fun(int x[N])
{int i=0;
while(i<N)scanf(“%d”, ):}
在程序中下划线处应填入的是(C)
A. x+i
B. x[i+1]
C. x+(i++)
D. x[++i]
解析:本题考查数组和scanf函数的使用。程序通过、while循环来给数组元素赋值,赋值语句通过调用scanf函数来实现。scanf函数从键盘接收数据,第二个参数是数据保存的地址.因此选项B和选项D不是地址,错误。选项A和选项C是地址,但是选项A的i值不会发生变化,循环体内每次都是给同一个元素赋值,不满足要求,选项C正确。
4.fun函数的功能是:通过键盘输入给x所指的整型数组所有元素赋值。在下划线处应填写的是
#include
#define N 5
Void fun(int x[N])
{ int m;
for(m=N-1;m>=0;m–)scanf(\\(A)
A. x+m
B. x[m+1]
C. x+(m++)
D. x[++m]
解析:本题考查数组和scanf函数的使用。程序通过for循环来给数组元素赋值,赋值语句通过调用scanf函数来实现。scanf函数从键盘接收数据,函数的第二个参数是数据保存的地址,因此选项B和选项D不是地址,错误。选项A和选项C是地址,但是选项C的m值会++自增,然后for循环里面又m一自减,会导致死循环,不满足要求,选项A正确。
5.以下选项中,合法的是(C)
A. char name[10];name=\\
B. char str1[5]=\\
C. char str3[]={’d’,’e’,’b’,’u’,’g’,’\0’};
D. char str4;str4=\\
解析:本题考查字符数组。选项A定义了一个字符数组name,接下来直接给name赋值字符串是错误的;选项B定义了两个字符串数组str1和str2,str1和str2表示两个字符串的首地址,直接把str1赋值给s仃2错误;选项C是正确的;选项D定义了一个字符变量str4,给字符变量赋值字符串是错误的。
6.以下叙述中正确的是(A)
A. 赋值语句是一种执行语句,必须放在函数的可执行部分
B. scanf和printf是C语言提供的输入和输出语句
C. 由printf输出的数据都隐含左对齐
D. 由printf输出的数据的实际精度是由格式控制中的域宽和小数的域宽来完全决定的
解析:C语言本身没有提供输入输出语句,但是可以通过调用标准库函数中提供的输入和输出函数来实现输入和输出,选项B错误:采用printf输出数据,输出数据都默认为右对齐,若要左对齐,可以在格式控制中的“%”和宽度之间加一个“-”,号来实现,选项C错误:printf的输出精度由变量的类型决定,与域宽无关,选项D错误。
7.有以下程序
main(){int a=3;
a+=a-=a*a:
printf(\\(C)
A. 9
B. 3
C. -12
D. 0
解析:对于表达式a+=a=a*a相当于a=a-(a*a),然后计算a=a+a,a的初值为3,则表达式的值为-12。
8.设有定义语句
int x[6]={2,4,6,8,5,7},*p=x,i;
要求依次输出x数组6个元素中的值不能完成此操作的语句是(D)
A. for(i=0;i<6;i++)printf(\\
B. for(i=0;i<6;i++)printf(\\
C. for(i=0;i<6;i++)printf(\\
D. for(i=0;i<6;i++)printf(\\
解析:指针p指向数组x,因此可以使用n来输出数组x的值。选项A中,*(1)++)表示先取出p指向的元素的值,然后pH指向下一个元素,满足要求;选项B中*(p+i)每次i的值发生变化,(p+i)指向x数组的x[i]元素,因此*(p+i)是取出数组x的x[i]元素的值,满足要求;选项C和选项A相比,少了括号,由于’运算符的优先级比++要求,因此,因此*n++表示先取出p指向的元素的值,然后p再++指向下一个元素,满足要求;选项D中(*p)++表示先取出p指向的元素的值,然后该值++,p没有增加,每次循环都*p取出的x[0]的值,不满足要求。
9.有以下程序段
int k=0,a=1,b=2,c=3;k=ac?c:k;
执行程序段后,k的值是(B)
A. 3
B. 2
C. 1
D. 0
解析:本题主要考查条件表达式。k=a<b?b:a中ac?c:k中k>c为假,k的值为2。
10.执行以下程序段后,w的值为
int W=’A’,x=14,y=15;
w=((x‖y)&(w<’a’));(C)
A. -1
B. NULL
C. 1
D. 0
解析:本题考查表达式和逻辑运算。x和y分别为14和15,因此(x‖y)的值是真。w的值为’A’,其ASCII值为65,’a’的ASCIl值为97,因此(w<’a’)的值为真。表达式w=((x‖y)&(w<’a’))的前后两个值均为真,整个表达式的值为真(1)。
11.若有定义语句:char s[10]=\\(A)
A. 7
B. 8
C. 9
D. 10
解析:本题考查字符串数组和字符串函数。数组s有7个数字,然后跟着结束符“\0”,因此数组s的长度为7。
12.程序段:int x=12;double y=3.141593;printf(\\(A)
A. 123.141593
B. 12 3.141593
C. 12, 3.141593
D. 123.1415930
解析
本文档预览:3600字符,共10387字符,源文件无水印,下载后包含无答案版和有答案版,查看完整word版点下载