国家二级C语言机试(C语言基础知识)模拟试卷23
选择题
1.若变量均已正确定义并赋值,以下合法的C语言赋值语句是(D)
A. x=n%2.5;
B. x+n-i;
C. x=5=4+1;
D. x=y==5;
解析:选项D的含义是把关系表达式y=5的值赋给变量x。所以这是一条正确的赋值语句。因为赋值运算符左侧的操作数必须是一个变量,而不能是表达式或者常量。因为求余运算符“%”两侧的运算对象都应当是整型数据。
2.若有定义语句:int a=3,b=2,c=1;以下选项中错误的赋值表达式是(B)
A. a=b=c+1;
B. a=(b=4)=3;
C. a=(b=4)+c;
D. a=1+(b=c=4);
解析:本题主要考查赋值表达式,对于赋值表达式来说,赋值号“=”的左边一定为变量名,右边为一个C语言合法的表达式。
3.表达式a+=a-=a=9的值是(B)
A. .9
B. 0
C. 18
D. 9
解析:第一步a=9,然后计算a-a的值,并将此值赋给a,因此此时a=0,最后计算a+a,并将此值赋给a,因此最终结果为0。
4.若有以下程序
#include
main(){int a=一11,b=10;
a/=b/=-4;
printf(\\(B)
A. -1.2
B. 5-2
C. 4-3
D. 5-3
解析:对于语句“a/=b/=4;”相当于“a=a/(b=b/-4);”a初值为-11,b的初值为10,则运算以后10/-4值为-2,-11/-2值为5。
5.以下叙述中正确的是(A)
A. 在赋值表达式中,赋值号的右边可以是变量,也可以是任意表达式
B. a是实型变量,a=10在C语言中是允许的,因此可以说:实型变量中可以存放整型数
C. 若有int a=4,b=9;执行了a=b后,a的值已由原值改变为b的值,b的值变为0
D. 若有int a=4,b=9;执行了a=b;b=a;之后,a的值为9,b的值为4
解析:选项B中a=10,在赋值时会把10自动转换为double类型然后赋值,实型变量中不可能存放整型。而选项C中执行a=b后,b的值不变还是9,选项D中执行“a=b;b=a;”后,a的值为9,b的值也为9。
6.有以下程序,程序运行后的输出结果是
#include
main(){int a=3;printf(\\(D)
A. 9
B. 0
C. 3
D. -12
解析:对于表达式“a+=a-=a*a”相当于“a=a-(a*a)”,然后计算“a=a+a”,a的初值为3,则表达式的值为-12。
7.若有定义和语句:
int a,b;
scanf(\\(C)
A. 3,5
B. 3,5,
C. 3,5
D. 3,5,4
解析:在格式控制字符串中插入其他字符,则在输入的时候应该据实加入到输入流中,不能随意加入空格等,否则无法得到正确的输入结果。
8.有以下程序,程序运行后的输出结果是
main()
{ int m=12,n=34;
printf(“%d%d”,m++,++n);
printf(“%d%d\n”,n++,++m);}(A)
A. 12353514
B. 123535i3
C. 12343514
D. 12343513
解析:本题主要考查自加运算符,自加运算符++在变量前表示先增加然后再使用,++在变量后表示先使用然再增加。本题中,第一个printf语句m++表示先输出m的值,然后m增加1,因此首先输出的是12,然后m的值变成13,++n表示n首先增加1变成35然后输出,因此输出的是35;在第二个printf。语句中,n++是先输出n的值然后增加,即输出35,n的值变为36,++m表示先增加m的值再输出,m的值由13变成14,故最后输出的是14。
9.在16位编译系统上,若有定义“int a[]={10,20,30},*p=a;”,当执行“p++;”后,下列说法错误的是(B)
A. p向高地址移了一个字节
B. p向高地址移了一个存储单元
C. p向高地址移了两个字节
D. p与a+1等价
解析:本题考查数组和数组指针。a是一个整型数组,p指针指向a数组,即p指向a数组的首元素的地址,因此p++之后,p往高地址移动,指向首元素后面一个元素的地址。
10.设有定义: int x=2:以下表达式中,值不为6的是(A)
A. 2*x,x+=2
B. x++,2*x
C. x*=(1+x)
D. x*=x+1
解析:本题考查逗号表达式。逗号表达式的求解过程是:先求解表达式1,再求解表达式2,整个逗号表达式的值是表达式2的值,因此,选项A中值为4;选项B中,值为6。选项C中x*=x+1等价于x=x+(x+1),所以等于6:选项D与选项C等价,结果也为6。
11.有以下程序,程序运行后的输出结果是
#include
main(){int x,y,z;x=y=1;
z=x++,y++,++y;
printf(\\(A)
A. 2,3,1
B. 2,3,2
C. 2,3,3
D. 2,2,1
解析:在程序中,整型变量x、y的初值都为1,赋值语句“z=x++,y++,++y”右边的“x++,y++,++y”是一个逗号表达式,所以逗号表达式的值++y的值。执行逗号表达式“x++,y++,++y”后,x的值为2,y的值为3,z取逗号表达式的值,为1。
12.若变量x、y已正确定义并赋值,以下符合C语言语法的表达式是(A)
A. ++x,y=x–
B. x+1=y
C. x=x+10=x+y
D. double(x)/10
解析:用逗号将表达式连接起来的式子称为逗号表达式。其表达式的一般形式为:表达式1,表达式2,……,表达式n。最后一个表达式的值就是此逗号表达式的值。所以选项A为C语言中的逗号表达式。赋值表达式的左侧只能是变量,不能是常量或表达式。强制类型转换表达式的形式为:(类型名)(表达式),其中(类型名)称为强制类型转换运算符,数据类型两边的圆括号不能省略。
13.设有定义: int k=0;以下选项的四个表达式中与其他三个表达式的值不相同的是(A)
A. k++
B. k+=1
C. ++k
D. k+1
解析:因为题中有语句“int k=0;”,所以选项B、C)、D)都是对k的值加1,选项A的语句k++表示先利用k的值进行运算,然后k值才加1。
14.若有以下程序,则程序的输出结果是
#inelude
main(){int a=0,b=0,c=0;
c=(a-=++a),(a+=b,b+=4);
printf(\\(C)
A. 0,4,4
B. 1,4,1
C. 0,4,0
本文档预览:3600字符,共7652字符,源文件无水印,下载后包含无答案版和有答案版,查看完整word版点下载