1、国家二级 C语言机试(C 语言基础知识)模拟试卷 11及答案解析(总分:60.00,做题时间:90 分钟)一、选择题(总题数:30,分数:60.00)1.若变量均已正确定义并赋值,以下合法的 C语言赋值语句是(分数:2.00)A.x=n25;B.x+n=i;C.x=5=4+1:D.x=y=5;2.若有定义语句:int a=3,b=2,c=1;以下选项中错误的赋值表达式是(分数:2.00)A.a=b=c+1;B.a=(b=4)=3;C.a=(b=4)+c;D.a=1+(b=c=4);3.表达式 a+=a=a=9的值是(分数:2.00)A.9B.0C.18D.94.若有以下程序#includest
2、dioh main()int a=11,b=10; a=b=4: printf(“ddn“,a,b);则程序的输出结果是(分数:2.00)A.-1-2B.5-2C.4-3D.5-35.以下叙述中正确的是(分数:2.00)A.在赋值表达式中,赋值号的右边可以是变量,也可以是任意表达式B.a是实型变量,a=10 在 C语言中是允许的,因此可以说:实型变量中可以存放整型数C.若有 int a=4,b=9;执行了 a=b后,a 的值已由原值改变为 b的值,b 的值变为 0D.若有 int a=4,b=9;执行了 a=b;b=a;之后,a 的值为 9,b 的值为 46.有以下程序,程序运行后的输出结果是
3、#includestdiohmain()int a=3;printf(“dn“,(a+=a=a*a);(分数:2.00)A.9B.0C.3D.-127.若有定义和语句:(分数:2.00)A.3,5B.3,5,C.3,5D.3,5,48.有以下程序,程序运行后的输出结果是 main() int m=12,n=34; printf(“dd”,m+,+n); printf(“ddn”,n+,+m);)(分数:2.00)A.12353514B.12353513C.12343514D.123435139.在 16位编译系统上,若有定义“int a=10,20,30,*p=a;”,当执行“p+;”后,下列
4、说法错误的是(分数:2.00)A.P向高地址移了一个字节B.P向高地址移了一个存储单元C.P向高地址移了两个字节D.P与 a+1等价10.设有定义: int x=2;以下表达式中,值不为 6的是(分数:2.00)A.2*x,x+=2B.x+,2*xC.x*=(1+x)D.x*=x+111.有以下程序,程序运行后的输出结果是#includemain()int x,y,z;x=y=1; z=x+,y+,+y; printf(“d,d,dn“,x,y,z);(分数:2.00)A.2,3,1B.2,3,2C.2,3,3D.2,2,112.若变量 x、y 已正确定义并赋值,以下符合 C语言语法的表达式是
5、(分数:2.00)A.+x,y=x-B.x+1=yC.x=x+10=x+yD.double(x)1013.设有定义: int k=0;以下选项的四个表达式中与其他三个表达式的值不相同的是(分数:2.00)A.k+B.k+=1C.+kD.k+114.若有以下程序,则程序的输出结果是#includestdiohmain()int a=0,b=0,c=0; c=(a=+a),(a+=b,b+=4); printf(“d,d,dn“,a,b,c);(分数:2.00)A.0,4,4B.1,4,1C.0,4,0D.1,4,415.若有以下程序#includestdioh main()int a=0,b=0
6、,c=0 c=(a+=+b,b+=4); printf(“d,d,dn“,a,b,c);则程序的输出结果是(分数:2.00)A.1,5,1B.1,4,4C.1,5,5D.1,4,116.有以下程序,程序的输出结果是 main()int sum,pad,pAd; sum=pad=5; pAd=+sum,pAd+,+pad; printf(“dn“,pad);(分数:2.00)A.5B.7C.8D.617.若有定义“int x,y;”并已正确给变量赋值,则以下选项中与表达式“(xy)?(x+):(y+)”中的条件表达式(xy)等价的是(分数:2.00)A.(xy0)B.(xy0)C.(xy0xy0
7、)D.(xy=0)18.以下选项中,当 x为大于 1的奇数时,值为 0的表达式是(分数:2.00)A.x2B.x2!=0C.x2=0D.x2=119.以下叙述中正确的是(分数:2.00)A.关系运算符两边的运算对象可以是 C语言中任意合法的表达式B.在 C语言中,逻辑真值和假值分别对应 1和 0C.对于浮点变量 x和 y,表达式:x=y 是非法的,会出编译错误D.分支结构是根据算术表达式的结果来判断流程走向的20.以下叙述中正确的是(分数:2.00)A.a表示一个字符常量B.0表示字符 0C.表达式:ab的结果是“假”D.“是非法的21.以下关于逻辑运算符两侧运算对象的叙述中正确的是(分数:2
8、.00)A.只能是整数 0或非 0整数B.可以是结构体类型的数据C.可以是任意合法的表达式D.只能是整数 0或 122.若 a是数值类型,则逻辑表达式(a=1)(a!=1)的值是(分数:2.00)A.0B.2C.1D.不知道 a的值,不能确定23.当变量 c的值不为 2、4、6 时,值也为“真”的表达式是(分数:2.00)A.(c=2)(c=4)(c=6)B.(c=2&c=6)&!(c2)C.(c=2&c=6)(c2!=1)D.(c=2&c=6)(c!=3)(c!=5)24.表示关系式 xyz 的 C语言表达式的是(分数:2.00)A.(x=y)(y=z)B.(x=y=z)C.(x=y)&(y
9、=z)D.(x=y)!(y=z)25.若变量已正确定义,以下选项中非法的表达式是(分数:2.00)A.a!=4b B.a4C.a=12*(x=y=20,x*3)D.A+3226.有以下程序,程序运行后的输出结果是 main()int x=35,B; char z=B; B=(x)&(zb); printf(“dn“,B);(分数:2.00)A.0B.35C.1D.6627.与数学表达式 xyz 对应的 C语言表达式是(分数:2.00)A.(x=y=z)B.(x=y)&(y=z)C.(x=y)!(y=z)D.(x=y)(y=x)28.以下叙述中正确的是(分数:2.00)A.对于逻辑表达式:a+&
10、b+,设 a的值为 0,则求解表达式的值后,b 的值会发生改变B.对于逻辑表达式:a+b+,设 a的值为 1,则求解表达式的值后,b 的值会发生改变C.关系运算符的结果有三种:0,1,1D.else不是一条独立的语句,它只是 if语句的一部分29.以下叙述中正确的是(分数:2.00)A.由&构成的逻辑表达式与由构成的逻辑表达式都有“短路”现象B.C语言的关系表达式:0xC.逻辑“非”(即运算符!)的运算级别是最低的D.逻辑“或”(即运算符)的运算级别比算术运算要高30.下列关系表达式中,结果为“假”的是(分数:2.00)A.(3B.(3+4)6C.(3!=4)2D.3=4国家二级 C语言机试(
11、C 语言基础知识)模拟试卷 11答案解析(总分:60.00,做题时间:90 分钟)一、选择题(总题数:30,分数:60.00)1.若变量均已正确定义并赋值,以下合法的 C语言赋值语句是(分数:2.00)A.x=n25;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;以下选项中错误的赋值表达式是(分数:2.00)A.a=b=c+1;
12、B.a=(b=4)=3; C.a=(b=4)+c;D.a=1+(b=c=4);解析:解析:本题主要考查赋值表达式,对于赋值表达式来说,赋值号“=”的左边一定为变量名,右边为一个 C语言合法的表达式。3.表达式 a+=a=a=9的值是(分数:2.00)A.9B.0 C.18D.9解析:解析:第一步 a=9,然后计算 a-a的值,并将此值赋给 a,因此此时 a=0,最后计算 a+a,并将此值赋给 a,因此最终结果为 0。4.若有以下程序#includestdioh main()int a=11,b=10; a=b=4: printf(“ddn“,a,b);则程序的输出结果是(分数:2.00)A.-
13、1-2B.5-2 C.4-3D.5-3解析:解析:对于语句“a=b,=4;”相当于“a=a(b=b4);”a 初值为11,b 的初值为 10,则运算以后 104 值为2,112 值为 5。5.以下叙述中正确的是(分数:2.00)A.在赋值表达式中,赋值号的右边可以是变量,也可以是任意表达式 B.a是实型变量,a=10 在 C语言中是允许的,因此可以说:实型变量中可以存放整型数C.若有 int a=4,b=9;执行了 a=b后,a 的值已由原值改变为 b的值,b 的值变为 0D.若有 int a=4,b=9;执行了 a=b;b=a;之后,a 的值为 9,b 的值为 4解析:解析:选项 B)中 a
14、=10,在赋值时会把 10自动转换为 double类型然后赋值,实型变量中不可能存放整型。而选项 C)中执行 a=b后,b 的值不变还是 9,选项 D)中执行“a=b;b=a;”后,a 的值为 9,b的值也为 9。6.有以下程序,程序运行后的输出结果是#includestdiohmain()int a=3;printf(“dn“,(a+=a=a*a);(分数:2.00)A.9B.0C.3D.-12 解析:解析:对于表达式“a+=a=a*a”相当于“a=a(a*a)”,然后汁算“a=a+a”,a 的初值为 3,则表达式的值为12。7.若有定义和语句:(分数:2.00)A.3,5B.3,5,C.3
15、,5 D.3,5,4解析:解析:在格式控制字符串中插入其他字符,则在输入的时候应该据实加入到输入流中,不能随意加入空格等,否则无法得到正确的输入结果。8.有以下程序,程序运行后的输出结果是 main() int m=12,n=34; printf(“dd”,m+,+n); printf(“ddn”,n+,+m);)(分数:2.00)A.12353514 B.12353513C.12343514D.12343513解析:解析:本题主要考查自加运算符,自加运算符+在变量前表示先增加然后再使用,+在变量后表示先使用然再增加。本题中,第一个 printf语句 m+表示先输出 m的值,然后 m增加 1,
16、因此首先输出的是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+;”后,下列说法错误的是(分数:2.00)A.P向高地址移了一个字节B.P向高地址移了一个存储单元 C.P向高地址移了两个字节D.P与 a+1等价解析:解析:本题考查数组和数组指针。a 是一个整型数组,p 指针指向 a数
17、组,即 p指向 a数组的首元素的地址,因此 p+之后,p 往高地址移动,指向首元素后面一个元素的地址。10.设有定义: int x=2;以下表达式中,值不为 6的是(分数:2.00)A.2*x,x+=2 B.x+,2*xC.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
18、main()int x,y,z;x=y=1; z=x+,y+,+y; printf(“d,d,dn“,x,y,z);(分数:2.00)A.2,3,1 B.2,3,2C.2,3,3D.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语言语法的表达式是(分数:2.00)A.+x,y=x- B.x+1=yC.x=x+10=x+
19、yD.double(x)10解析:解析:用逗号将表达式连接起来的式子称为逗号表达式。其表达式的一般形式为:表达式 1,表达式 2,表达式 n。最后一个表达式的值就是此逗号表达式的值。所以选项 A)为 C语言中的逗号表达式。赋值表达式的左侧只能是变量,不能是常量或表达式。强制类型转换表达式的形式为:(类型名)(表达式),其中(类型名)称为强制类型转换运算符,数据类型两边的圆括号不能省略。13.设有定义: int k=0;以下选项的四个表达式中与其他三个表达式的值不相同的是(分数:2.00)A.k+ B.k+=1C.+kD.k+1解析:解析:因为题中有语句“int k=0;”,所以选项 B)、C)
20、、D)都是对 k的值加 1,选项 A)的语句k+表示先利用 k的值进行运算,然后 k值才加 1。14.若有以下程序,则程序的输出结果是#includestdiohmain()int a=0,b=0,c=0; c=(a=+a),(a+=b,b+=4); printf(“d,d,dn“,a,b,c);(分数:2.00)A.0,4,4B.1,4,1C.0,4,0 D.1,4,4解析:解析:表达式 c=(a=+a),(a+=b,b+=4)相当于逗号表达式,首先计算 c=(a=+a),其中(a=+a)等价 a=a(+a),得到 a的值 0,c 的值为 0,在计算(a+=b,b+=4)时,a 和 b的初值
21、为 0,计算以后,a 为 0,b 为 4。15.若有以下程序#includestdioh main()int a=0,b=0,c=0 c=(a+=+b,b+=4); printf(“d,d,dn“,a,b,c);则程序的输出结果是(分数:2.00)A.1,5,1B.1,4,4C.1,5,5 D.1,4,1解析:解析:对于语句“c=(a+=+b,b+=4);”首先计算“a=a+(+b)”,a,b 初值为 0,则计算以后 a为 1,b 为 1,然后计算 b+=4,得到 b的值为 5,此时表达式 b+=4的值为整个逗号表达式的值,因此 c的值为 5。16.有以下程序,程序的输出结果是 main()i
22、nt sum,pad,pAd; sum=pad=5; pAd=+sum,pAd+,+pad; printf(“dn“,pad);(分数:2.00)A.5B.7C.8D.6 解析:解析:有逗号表达式构成的语句“pAd=+sum,pAd+,+pad;”主要从左到由连续运算,因此pad的值为 6。注意 Dad和 pAd的是不同的变量。17.若有定义“int x,y;”并已正确给变量赋值,则以下选项中与表达式“(xy)?(x+):(y+)”中的条件表达式(xy)等价的是(分数:2.00)A.(xy0)B.(xy0)C.(xy0xy0)D.(xy=0) 解析:解析:条件表达式的形式如下:表达式 1?表达
23、式 2:表达式 3。其含义为当“表达式 1”的值为非零时,求出“表达式 2”的值,此时“表达式 2”的值就是整个条件表达式的值:当“表达式 1”的值为零时,则求“表达式 3”的值,这时“表达式 3”的值就是整个表达式的值。本题条件表达式的执行顺序是先求解表达式“x-y”的值,若其值为非 0(可以是证数,也可以是负数),则再求表达式“x+”的值,其值就是条什表达式的值:若表达式“x-y”的值为 0,则再求表达式“y+”的值,其值就是条什表达式的值。18.以下选项中,当 x为大于 1的奇数时,值为 0的表达式是(分数:2.00)A.x2B.x2!=0C.x2=0 D.x2=1解析:解析:由于 x为
24、大于 1的奇数,因此 x2 取余的值为 1,和 0不相等。19.以下叙述中正确的是(分数:2.00)A.关系运算符两边的运算对象可以是 C语言中任意合法的表达式 B.在 C语言中,逻辑真值和假值分别对应 1和 0C.对于浮点变量 x和 y,表达式:x=y 是非法的,会出编译错误D.分支结构是根据算术表达式的结果来判断流程走向的解析:解析:C 语言中没有逻辑类型,用作零表永逻辑真。0 表示逻辑假,选项 B)错误,无法判断两个浮点变量是否相等,但是 x=y不会出现编译错误,选项 C)错误,分支结构根据表达式的值,不一定为算术表达式,选项 D)错误。20.以下叙述中正确的是(分数:2.00)A.a表
25、示一个字符常量B.0表示字符 0C.表达式:ab的结果是“假” D.“是非法的解析:解析:字符常量可以参加关系运算,按照其存储的 ASCII码值进行比较,ab不成立,值为假。而0表示 NULL,ASCII 码值为 0。21.以下关于逻辑运算符两侧运算对象的叙述中正确的是(分数:2.00)A.只能是整数 0或非 0整数B.可以是结构体类型的数据C.可以是任意合法的表达式 D.只能是整数 0或 1解析:解析:逻辑运算符两侧的运算对象可以是任意合法的表达式。逻辑表达式的运算结果或者为1(“真”),或者为 0(“假”)。22.若 a是数值类型,则逻辑表达式(a=1)(a!=1)的值是(分数:2.00)
26、A.0B.2C.1 D.不知道 a的值,不能确定解析:解析:在逻辑表达式中,ab,只有在 a跟 b都为 0时,表达式的结果才为 0。在题中所给的表达式中 a要么等于 1,要么不等于 1,肯定会有一方的值不为真,表达式值为 1。23.当变量 c的值不为 2、4、6 时,值也为“真”的表达式是(分数:2.00)A.(c=2)(c=4)(c=6)B.(c=2&c=6)&!(c2)C.(c=2&c=6)(c2!=1)D.(c=2&c=6)(c!=3)(c!=5) 解析:解析:逻辑或运算中,只要有一项为真,表达式的值就为真,故选项 D)中 c的值不为 2、4、6 时,那么表达式(c=2&c=6)以及(c
27、!=3)、(c!=5)必有一个成立,表达式的值也为真。24.表示关系式 xyz 的 C语言表达式的是(分数:2.00)A.(x=y)(y=z)B.(x=y=z)C.(x=y)&(y=z) D.(x=y)!(y=z)解析:解析:表示三个变量的关系,要利用逻辑表达式,用逻辑与连接。25.若变量已正确定义,以下选项中非法的表达式是(分数:2.00)A.a!=4b B.a4C.a=12*(x=y=20,x*3) D.A+32解析:解析:赋值表达式左边应为变量,选项 C)中左边为字符常量,因此非法,其余表达式均为合法的表达式。26.有以下程序,程序运行后的输出结果是 main()int x=35,B;
28、char z=B; B=(x)&(zb); printf(“dn“,B);(分数:2.00)A.0B.35C.1 D.66解析:解析:表达式(x)&(zb),x 为 35非零,考虑表达式 zb,成立,则 B的值为 1。27.与数学表达式 xyz 对应的 C语言表达式是(分数:2.00)A.(x=y=z)B.(x=y)&(y=z) C.(x=y)!(y=z)D.(x=y)(y=x)解析:解析:若要表示 x大于等于 y,同时 y大于等于 z,需要用逻辑与表达式连接。28.以下叙述中正确的是(分数:2.00)A.对于逻辑表达式:a+&b+,设 a的值为 0,则求解表达式的值后,b 的值会发生改变B.
29、对于逻辑表达式:a+b+,设 a的值为 1,则求解表达式的值后,b 的值会发生改变C.关系运算符的结果有三种:0,1,1D.else不是一条独立的语句,它只是 if语句的一部分 解析:解析:else 不能单独使用,和 if匹配使用,要注意逻辑与运算和逻辑或运算出现的短路现象,关系运算结果仅有 0和 1。29.以下叙述中正确的是(分数:2.00)A.由&构成的逻辑表达式与由构成的逻辑表达式都有“短路”现象 B.C语言的关系表达式:0xC.逻辑“非”(即运算符!)的运算级别是最低的D.逻辑“或”(即运算符)的运算级别比算术运算要高解析:解析:逻辑表达式的运算比较复杂,有短路现象,也就是首先计算“逻辑与”或者“逻辑或”运算的第一个运算量的值,根据表达式的值决定是否进行第二个量的值的计算。“逻辑与”和“逻辑或”运算低于关系运算和算术运算。但是“逻辑非”运算却高于算术运算。30.下列关系表达式中,结果为“假”的是(分数:2.00)A.(3B.(3+4)6C.(3!=4)2 D.3=4解析:解析:关系表达式和逻辑表达式的结果为非零或者 0,其中 0表示假,而非零表示真,由于 3!=4的结果为 1,而 12 的结果为假。
copyright@ 2008-2019 麦多课文库(www.mydoc123.com)网站版权所有
备案/许可证编号:苏ICP备17064731号-1