国家二级(C语言)机试模拟试卷129
选择题
1.以下关于C语言数值常量的选项中,合法的是( )。(A)
A. 12.0Xa23 4.5e0
B. 028.5e一3一0xf
C. .177 4e1.5 0abc
D. 0x8A 10,000 3.e5
解析:C语言中八进制整型常量的开头是数字0,十六进制整型常量的数字开头是0x;但八进制不能有8或9,所以选项B错,C选项中2e1.2中e后面的指数不是整数,D选项中3.e5小数点后面缺少数字,另外。也不用用逗号作为千分位分隔符。
2.若有定义:double d=68;int i=0,k=21;,则以下选项中不符合C语言规定的赋值语句是( )。(B)
A. i一(d+k)<=(i+k);
B. i=d%3;
C. d=(d++,i++);
D. i=(int)!d;
解析:只有整数才能求余,d是双精度型,所以不能求余,选项B不符合C语言赋值规定。选项A和D将进行强制数据转换,选项C为变量自加,逗号运算符和赋值运算符连用,都符合C语言规范。
3.若有代数式(A)
A. sqrt(fabs(pow(n,x)+exp(x)))
B. sqrt(fabs(pow(n,x)+pow(x,e)))
C. sqrt(abs(n∧x+e∧x))
D. sqrt(fabs(pow(x,n)+exp(x)))
解析:B选项中函数pow(x,e)错误应该直接使用exp(x)函数。C选项中函数abs(n∧x+e∧x)错误,应该使用fabs()返回浮点数的绝对值。D选项中pow(x,n)参数顺序错误。
4.有关C语言标识符,以下选项中不合法的是( )。(A)
A. &a
B. FOR
C. print
D. _00
解析:C语言中标识符由字母、下划线、数字组成,且开头必须是字母或下划线。另外,关键字不能作为标识符。因为C语言中区分大小写,所以B选项中的“FOR”可以作为标识符来用。A)选项中含有非法字符&,所以选择A。
5.有以下序:
#include
void main()
{int num1,num2;
int i=10;
double d=12.34:
nunl=sizeof(i);num2=sizeof(d);
pfintf(’’%d,%d\n’’,s1,s2);
}
在VC 6.0平台上编译运行,程序运行后的输出结果是( )。(C)
A. 16,4
B. 2,8
C. 4,8
D. 1,4
解析:sizeof()函数用来获取数据类型的存储空间大小(字节数),整型和双精度型在C语言中分别占用4个字节和8个字节,所以选项C正确。
6.有以下程序:
#nclude
void main()
{char a,b,c,d;
scanf(’’%c%c’’,&a,&b);
c=getchar();d=getchar();
pfintf(’’%c%c%c%c\n’’,a,b,c,d);
}
运行程序后输入数据(代表回车符)
34
56
则输出结果是( )。(D)
A. 34
B. 3456
C. 34
D. 34
解析:用格式符%c输入字符时,回车符是分隔符,不能被输入,但getchar()可以接收包括回车符在内的字符,所以程序运行时输入的第一个回车符将被字符变量c接收,字符变量d接收输入的字符’5’,所以输出的结果是3,4,回车,5,选项D正确。
7.有以下程序:
#nelude
main()
{int a=0,b=0,C=0,d=0;
if(a=1)b=1;c=2;
else d=3;
pfintf(’’%d,%d,%d,%d\n’’,a,b,c,d);
}
程序运行后的输出结果是( )。(C)
A. 1,1,2,0
B. 0,0,0,3
C. 编译有错
D. 0,1,2,0
解析:if语句只执行后面的一个语句或一个用大括号包括的程序段。本题中if语句中的条件若为真,则只执行b=1;这一条语句,后面的c=2是一个和if分支结构无关的语句,因此,再后面的else语句便成为一个独立的语句,因为前面没有if分支与其对应,因此会在编译过程中出错。如果改成if(a=1){b=1;c=2}elsed=3:则编译正确。
8.有以下程序:
#include
main()
{int x=1,y=0,a=0,b=0;
switch(x)
{ case 1:
switch(y)
{ case 0:a++;break;
case 1:b++;break;
}
case 2:a++;b++;break;
case 3:a++;b++;
}
printf(’’a=%d,b=%d\n’’,a,b);
}
程序运行后的输出结果是( )。(B)
A. a=2,b=2
B. a=2,b=1
C. a=1,b=1
D. a=1,b=0
解析:case常量表达式只是起语句标号作用,并不是该处进行条件判断。在执行switch语句时,根据switch的表达式,找到与之匹配的case语句,就从此case子句执行下去,不再进行判断,直到碰到break或函数结束为止。所以执行内层switch(y)时只执行了a++,此时a的值为1。然后执行外层case 2语句的a++;b++;a为2,b为1。所以结果为B。
9.以下程序段中的变量已正确定义:
for(i=0;i<4;i++,i++)
for(k=l;k<3;k++);printf(’’*’’);
程序段的输出结果是( )。(C)
A. **
B. ****
C. *
D. ********
解析:由于内层循环for(k=1;k<3;k++)后面直接跟了空语句“;”所以在循环内部什么操作也不做,跳出外层循环后执行打印语句,所以打印了一个“*’,选择C。
10.有以下程序段:
#nclude
int i,n;
for(i=0;i<8;i++)
{n=rand()%5;
switch(n)
{case 1:
case 3:printf(’’%d\n’’,n);break;
case 2:
case 4:printf(’’%d\n’’,n);continue;
case 0:exit(0);
}
pfintf(’’%d\n’’,n);
}
以下关于程序段执行情况的叙述,正确
本文档预览:3600字符,共16543字符,源文件无水印,下载后包含无答案版和有答案版,查看完整word版点下载