1、国家二级 C语言机试(选择题)模拟试卷 60及答案与解析 一、选择题 1 表达式: (int)(double)9 2)-9 2的值是 ( )。 ( A) 0 ( B) 3 ( C) 4 ( D) 5 2 若有定义 int x, y;并已正确给变量赋值,则以下选项中与表达式 (x-y)?(x+):(y+)中的条件表达式 (x-y)等价的是 ( )。 ( A) (x-y 0 x-y 0) ( B) (x-y 0) ( C) (x-y 0) ( D) (x-y=0) 3 若变量已正确定义,在 if(W)printf(“ d n“, k);中,以下不可替代 W的是( )。 ( A) a b+c ( B
2、) ch=getchar() ( C) a=b+c ( D) a+ 4 以下选项中不属于 C语言程序运算符的是 ( )。 ( A) sizeof ( B) ( C) ( ) ( D) & 5 若有定义语句: int x=10;,则表达式 x-=x+x的值为 ( )。 ( A) 0 ( B) -20 ( C) -10 ( D) 10 6 不能正确表示数学式 的表达式是 ( )。 ( A) a c*b ( B) a*b c ( C) a b*c ( D) a*(b ( E) C 7 设有定义: int x=2;,以下表达式中,值不为 6的是 ( )。 ( A) 2*x, x+=2 ( B) x+,
3、 2*x ( C) x*=(1+x) ( D) x*=x+1 8 若有以下程序: inelude main() int a=0, b=0, c=0; c=(a-=+a), (a+=b, b+=4); printf(“ d, d, d n“, a, b, c); 则程序的输出结果是 ( )。 ( A) 0, 4, 0 ( B) 0, 4, 4 ( C) 1, 4, l ( D) 1, 4, 4 9 若有以下程序: include main() int a=0, b=0, c=0, d; c=(a+=b, b+=a); *第 4行 * d=c; *第 5行 * ; *第 6行 * ; printf
4、(“ d, d, d n“, a, b, 13); *第 7行 * 编译时出现错误,你认为出错的是 ( )。 ( A)第 4行 ( B)第 5行 ( C)第 6行 ( D)第 7行 10 若有以下程序: include main( ) int a=0, b=0, c=0 c=(a+=+b, b+=4); printf(“ d, d, d n“, a, b, c; 则程序的输出结果是 ( )。 ( A) 1, 5, 1 ( B) 1, 5, 5 ( C) -1, 4, 4 ( D) -1, 4, -1 11 若有定义语句: int x=12, y=8, z; 在其后执行语句 z=0.9+x y
5、则 z的 值为 ( )。 ( A) 1 ( B) 1 9 ( C) 2 ( D) 2 4 12 表达式 3 6-5 2+1 2+5 2的值是 ( )。 ( A) 4 3 ( B) 4 8 ( C) 3 3 ( D) 3 8 13 有以下定义: int a; long b: double x, y; 则以下选项中正确的表达式是 ( )。 ( A) a=x Y ( B) a (int)(x-y) ( C) (a*y) b ( D) Y=x+y=x 14 设变量已正确定义并赋值,以下正确的表达 式是 ( )。 ( A) x=y+Z+5, +y ( B) int(15 8 5) ( C) x=y*5=
6、x+z ( D) z=25 5 0 15 有以下程序: #include main( ) int x, y, z; x=y=1; z=x+, y+, +y; printf(“ d, d, d n“, x, y, z); 程序运行后的输出结果是 ( )。 ( A) 2, 3, 3 ( B) 2, 3, 2 ( C) 2, 3, 1 ( D) 2, 2, 1 16 以下不能将 s所指字符串正确复制到 t所指存储空间的是 ( )。 ( A) do*t+=*s+; while(*s); ( B) for(i=0; ti=si; i+); ( C) while(*t=*s)t+; s+ ( D) for
7、(i=0, j=0; ti+=sj+; ); 17 设有定义: int k=0; 以下选项的 4个表达式中与其他 3个表达式的值不相同的是 ( )。 ( A) +k ( B) k+=1 ( C) k+ ( D) k+1 18 若有定义语句: int year=2009, *p=&year; 以下不能使变量 year中的值增至 2010的语句是 ( )。 ( A) (*P)+; ( B) *P+; ( C) +(*P); ( D) *P+=1; 19 若有以下程序: #include int f(int m) static int n=0; int a=2; n+; a+; return n+m
8、+a; main( ) int k; for(k=0; k 4; k+)printf(“ d, ”, f(k); 则程序的输出结果是 ( )。 ( A) 3, 5, 7, 9, ( B) 4, 7, 10, 13, ( C) 4, 5, 6, 7, ( D) 4, 6, 8, 10, 20 有以下程序: #include int fun(int a, intB return a+b; main( ) int x=6, y=7, z=8, r; r=fun(fun(x, y), z- -); printf(“ d n”, r); 程序运行后的输出结果是 ( )。 ( A) 21 ( B) 15
9、( C) 20 ( D) 31 21 若有定义: double a=22; int i=0, k=18;,则不符合 C语言规定的赋值语句是( )。 ( A) i=(a+k) =(i+k); ( B) i=a 11; ( C) a=a+, i+ ( D) i=!a: 22 若变量 x、 y已正确定义并赋值,以下符合 C语言语法的表达式是 ( )。 ( A) x+1=y ( B) +x, y=x- - ( C) x=x+10=x+y ( D) double(x) 10 23 若变量均已正确定义并赋值,以下合法的 C语言赋值语句是 ( )。 ( A) x=y=5; ( B) x=n 2 5; ( C
10、) x+n=i; ( D) x=5=4+1; 24 以下选项中正确的定义语句是 ( )。 ( A) double, a, b; ( B) double a=b=7; ( C) double a; b; ( D) double a=7, b=7; 25 若有定义语句: int a=3, b=2, c=1; 以下选项中错误的赋值表达式是 ( )。 ( A) a=(b=4)=3; ( B) a: b=e+l; ( C) a=(b=4)+c; ( D) a=l+(b=c=4); 26 表达式 a+=a- =a=9的值是 ( )。 ( A) 18 ( B) -9 ( C) 0 ( D) 9 27 有以下
11、程序: #include main() int a=3; printf(“ d n“, (a+=a-=a*a); 程序运行后的输出结果是 ( )。 ( A) 3 ( B) 9 ( C) 0 ( D) -12 28 有以下程序: #include main() int a=1, b=0; printf(“ d, “, b=a+b); printf(“ d n“, a=2*b; ( A) 1, 2 ( B) 1, 0 ( C) 3, 2 ( D) 0, 0 29 以下叙述中正确的是 ( )。 ( A) a是实型变量, a=10在 C语言中是允许的,因此可以说:实型变量中可以存放整型数 ( B)在赋
12、值表达式中,赋值号的右边可以是变量,也可以是任意表达式 ( 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 30 以下叙述中正确的是 ( )。 ( A)由 printf输出的数据都隐含左对齐 ( B) seanf和 printf是 C语言提供的输人和输出语句 ( C)赋值语句是一种执行语句 ,必须放在函数的可执行部分 ( D)由 printf输出的数据的实际精度是由格式控制中的域宽和小数的域宽来完全决定的 31 若有以下程序: #in
13、clude main( ) int b=10, a=-11; a =b =4: printf(“ d d n“, a, b); 则程序的输出结果是 ( )。 ( A) 1 2 ( B) -12 ( C) -1 -2 ( D) 1 -2 32 若有以下程序: #include main( ) int a=-11, b=10; a =b =-4: printf(“ d d n“, a, b); 则程序的输出结果是 ( )。 ( A) 4 -3 ( B) -1 -2 ( C) 5 -2 ( D) 5 -3 33 有以下程序: #include main( ) unsigned char a=8, c
14、; c=a3: printf(“ d n“, c); 程序运行后的输出结果是 ( )。 ( A) 16 ( B) 1 ( C) 32 ( D) 0 34 有以下程序: #include main( ) unsigned char a=2, b=4, c=5, d; d=a I b; d&=c; printf(“ d n“, d; 程序运行后的输出结果是 ( )。 ( A) 3 ( B) 4 ( C) 5 ( D) 6 35 设有以下语句: int a=1, b=2, c; 13=a(b main ( ) hat a=l, b=2, c=3, x; x=(a b c; printf(“ d n“
15、, x); 程序的运行结果是 ( )。 ( A) 3 ( B) 1 ( C) 2 ( D) 0 38 有以下程序: #include main() int a=2, b; b=a 2; printf(“ d n“, b); 程序运行后的输出结果是 ( )。 ( A) 2 ( B) 4 ( C) 6 ( D) 8 39 有以下程序: #include main( ) char a=4; printf(“ d n“, a=a 1); 程序的运行结果是 ( )。 ( A) 16 ( B) 8 ( C) 40 ( D) 4 40 有以下程序: #include main( ) int a=5, b=1
16、, t; t=(a 2) b; printf(“ d n“, t); 程序运行 后的输出结果是 ( )。 ( A) l ( B) 11 ( C) 6 ( D) 21 41 若变量已正确定义,则以下语句的输出结果是 ( )。 s=32: s =32; printf(“ d“, s); ( A) -1 ( B) 0 ( C) 1 ( D) 32 42 若有以下程序: #include main( ) int c; c=10 5; printf(“ d n“, c); 则程序的输出结果是 ( )。 ( A) 5 ( B) 15 ( C) 10000 ( D) 105 43 若有以下程序: #incl
17、ude main() int c; c=13 5; printf(“ d n“, c); 则程序的输出结果是 ( )。 ( A) 13 ( B) 15 ( C) 18 ( D) 5 44 有以下程序: include main() int i=0; i= i; printf(“ d n“, i); 程序运行后的输出结果是 ( )。 ( A) 8 ( B) 0 ( C) 1 ( D) -1 45 有以下程序: #include main( ) int i=1; i=ii; printf(“ d n”, i); 程序运行后的输出结果是 ( )。 ( A) 1 ( B) -1 ( C) 0 ( D)
18、 7 46 下面选项中关于位运算的叙述正确的是 ( )。 ( A)位运算的对象只能是整型或字符型数据 ( B)位运算符都需要两个操作数 ( C)左移运算的结果总是原操作数的 2倍 ( D)右移运算时,高位总是补 0 国家二级 C语言机试(选择题)模拟试卷 60答案与解析 一、选择题 1 【正确答案】 B 【试题解析】 先将整型数据 9强制转换成 double型,然后除以 2得到的结果与double型保持一致,即为 4 5,再将 4 5强制转换成整型数据 4,然后计算 9 2的值为 1,最后计算 41的值为 3,所以选择 B选项。 2 【正确答案】 A 【试题解析】 条件表达式: x=表达式 1
19、 7表达式 2:表达式 3的含义是:先求解表达式 1,若为非 0(真 ),则求解表达式 2,将表达式 2的值赋给 x。若表达式 1的值为 0(假 ),则求解表达式 3,将表达式 3的值赋给 x。在本题中与表达式 l: (x-y)等价的是 (x-y0)。 3 【正确答案】 A 【试题解析】 选项 A是非法的表达式, C语言中没有 ”。所以选择 B。 5 【正确答案】 C 【试题解析】 算术运算符 +的优先级高于 -=,且 -=的结合方向为自右向左,所以表达式 x一 =x+x可以表示成 x=x-(x+x)=10-(10+10)=-10,选择 C。 6 【正确答案】 C 【试题解析】 号和 *号的优
20、先级处于平级,结合性都是自左至右。所以选择 C,表示 。 7 【正确答案】 A 【试题解析】 A选项中逗号表达式先计算第一表达式 2*x,然后计算表达式 x+=2的值,即 x=x+2,即 4,整个逗号表达式为第二个表达式的值 4,所以选择 A。 B选项中,首先计算逗号表达式中第一表达式 x+,此时 x为 3,再执行第二表达式2*x=2*3=6,所以逗号表达式为第二个表达式的值 6。 C选项的赋值表达式可以表示为 x=x*(1+x)=2*(1+2)=6。 D选项中的表达式可以表示为 x=x*(x+1)=2*3=6。 8 【正确答案】 A 【试题解析】 逗号运算符的结合性从左到右,因此逗号表达式将
21、从左到右进行计算,且逗号运算符的优先级最低,所以先计算 c=(a-=+ )这部分。其中,赋值运算符从右往左计算,先执行 +a, a自增 1后再赋值,所以 a的值为 1,执行 a=a-1,即 a=1-1, a的值为 0,并将。赋给变量 c。第二部分 (a+=b, b+=4),先执行a=a+b, a=0+0,即 a的值为 0,然后执行 b+=4, b=0+4,即 b的值为 4。所以打印结果为 0, 4, 0,选择 A选项。 9 【正确答案】 A 【试题解析】 第 4行逗号表达式中间的第二个表达式为空,是不合法的,可以去掉写成 a+=b, b+=a,也可以在里面补一个表达式,如 a+=b, a, b
22、+=a。所以选择A选项。 10 【正确答案】 B 【试题解析】 逗号运算符的结合性从左到右,因此逗号表达式将从左到右进行计算。且逗号运算符的 优先级最低。先计算 a+=+b,结果 a为 1, b为 1,然后计算b+=4, b的值为 5。逗号表达式的值为其中最后一个表达式的值,所以将 5赋给变量 c,即 a为 1, b为 5, c为 5。所以选择 B。 11 【正确答案】 A 【试题解析】 先计算 x y,结果为 1,然后计算 0 9+1,结果为 1 9,但由于变量 z为整型,所以取值 1,所以 z的值为 l。 12 【正确答案】 D 【试题解析】 计算 5 2,结果取整数值 2。计算 3 6-
23、2,结果与高精度数据保持一致,即为 1 6。计算 1 6+1 2,结果为 2 8。计算 5 2,结果为 1。计算2 8+1结果为 3 8。所以选择 D选项。 13 【正确答案】 B 【试题解析】 c语言中没有 “”运算符,所以 A选项错误。 “ ”运算符的两个操作值必须为整型数据,所以 B选项正确。 a*y的结果为 double型,所以 C选项错误。不能将值赋给像 x+y这样的表达式,所以 D选项错误。 14 【正确答案】 A 【试题解析】 B与 D选项中取模运算符的左右两个操作数均应为整数,所以B、 D错误。 C选项中不能将 x+y的值赋给表达式 y+5,所以 C错误。 15 【正确答案】
24、C 【 试题解析】 z=x+, y+, +y;因为赋值运算符的优先级高于逗号运算符的优先级,所以可以将上式表示成 (z=x+), (y+), (+y),然后从左向右先计算表达式 z=x+,因为 x+先使用后自增 l,所以 z的值为 1, x的值为 2。再计算逗号表达式的第二个表达式 y+,此时 y的值为 2,最后计算第三个表达式 +y, y的值为 3。 16 【正确答案】 A 【试题解析】 do*t+*s+; while(*s);不能因为当 *s= 0时, while(*s)跳出循环,这样字符串结束标志 “ 0”没有 复制给 *t,造成 *t不完整。注意: *t+=*s+是先执行 t=*s,然
25、后才进行 t=t+1, s=s+1。 B、 C和 D都能将 “ 0”复制过去。 17 【正确答案】 C 【试题解析】 +k是先使 k的值自增 1后再使用; k+是先取得 k的值,再将 k的值自增 l,所以 C选项中表达式的值为 0,而其他三个表达式的值均为 1,所以选择 C。 18 【正确答案】 B 【试题解析】 由于自加运算符 +的运算级别高于间接运算 *的运算级别,所以 B选项的表达式 *p+不能使变量 year中的值增至 2010。因此 B选项正确 。 19 【正确答案】 D 【试题解析】 本题考查静态局部变量以及自增运算符,静态局部变量在函数调用结束后,并不释放,仍然保留它的值,本题中
26、, k为 0时, retum n+m+a之前, n为 1, a为局部变量,值为 3, m为 0,所以第一个返回值为 4。 k为 1,在函数返回值之前,静态局部变量为 2,局部变量 a仍然为 3, m为 1,所以结果是 6,依此类推答案为 D。 20 【正确答案】 A 【试题解析】 函数 fun的功能是返回两个形参的和。调用函数 fun(x, y)时,将变量 x=6和 y=7的值分别传送变量 a和 b, 并且通过语句 retum a+b;将 13返回给主函数。继续调用函数 fun(13, z-),这里 z-指将 z的值参与运算后,再将 z的值减 1操作;将 13和 8分别传送变量 a和 b,且通
27、过语句: return a+b;将 2l返回给主函数。因此 A选项正确。 21 【正确答案】 B 【试题解析】 取模运算符 “ ”,是二元运算符,具有左结合性,参与运算的量均为整形。选项 B中的 a变量是 double实型,所以 B不符合规定。 22 【正确答案】 B 【试题解析】 A选项中不能将变量 y赋给表达式, C选项中的错误与 A选项一样, D选项中强制类型转换表达式应写成 (double)x 10。 23 【正确答案】 A 【试题解析】 B选项中运算符 “ ”的前后必须为整数, C选项中不能将变量赋给表达式 x+n, D选项中不能将表达式 4+1赋给常量 5。 24 【正确答案】 D
28、 【试题解析】 A选项中变量类型符 double后面不能有逗号。 B选项中变量 b不能先使用再定义,应该写成选项 D中的格式。 C选项中变量 a后面应该是逗号而不是分号。 25 【正确答案】 A 【试题解析】 不能将变量或常量赋给一个表达式,所以 A选 项中 (b=4)=3是错误的。 26 【正确答案】 C 【试题解析】 首先计算 a=9,然后计算 a-=9,即 a=a-9,结果为 0,然后计算a+=0,即 a=a+0,所以最终结果为 0。 27 【正确答案】 D 【试题解析】 本题考查目的是运算符的结合性和优先级,首先计算 a*a,结果为9,然后执行 a=a-9,即 3-9,结果为 -6,然
29、后执行 a=(-6)+(-6),即 a=的值为 -12。所以选择 D。 28 【正确答案】 A 【试题解析】 首先打印 b=a+b=1+0=1的值 1,此时已给 b赋值为 l。然后打印a=2*b=2*1=2的值 2。所以结果是 1, 2。 29 【正确答案】 B 【试题解析】 A选项中 a是实型变量, a=10在 C语言中是允许的,但是实型变量中不可以存放整型数。 C选项中执行 a=b后, a的值变为 b的值,为 9, b的值不变,仍为 9。 D选项中执行 a=b后, a的值为 9, b的值为 9,执行 b=a后, a的值为 9, b的值也为 9,所以选择 B。 30 【正确答案】 C 【试题
30、解析】 scanf和 printf是 C语言提供的输入输出函数,所以 B错误。由printf输出的数据都隐含右对齐,所以 A错误。 printf输出数据所占的宽度由系统决定,所以 D错误。 31 【正确答案】 B 【试题解析】 先计算 b =4,即 b=b 4,结果为 2,然后计算 a =2,结果为 -1,最后 a的值为 -1, b的值为 2,所以选择 B选项。 32 【正确答案】 C 【试题解析】 先执行 b =-4,即 b=b -4,结果为 -2,然后执行 a =-2,即 a=a -2,结果为 5。所以选择 C。 33 【正确答案】 B 【试题解析】 无符号整型变量 a的值为 8,二进制表
31、示为 00001000,右移 3位后为 00000001,即十进制的 1,所以输出 1。 34 【正确答案】 B 【试题解析】 &代表按位与,如果两个相应的二进制位都为 1,则该位的结果值为 1,否则为 0。 1代表按位或,两个相应的二进制位中只要有一个为 1,该位的结果值为 1。 2的二进制为 00000010, 4的二进制为 00000100,所以做或运算结果为 00000110,该数与 5即 00000101做与操作结果为 00000100,即 4。 35 【正确答案】 B 【试题解析】 b为 2,二进制为 00000010,执行左移两位操作后为 00001000,然后与 a 00000
32、001做异或操作结果为 00001001,即十进制的 9。 36 【正确答案】 C 【试题解析】 本题考查位运算,属于基础知识。题目中将整型变量 8二进制表达为 00001000,右移一位为 00000100,即 4。故选项 C正确。 37 【正确答案】 A 【试题解析】 本题考查位运算符以及相关运算。为按位异或, &为按位与,那么 ab为 3,再与 c按位与仍然为 3,所以答案为 A选项。 38 【正确答案】 D 【试题解析】 本题考查位运算符。题目中将 a向左移两位,左移两位表示乘以4,所以答案为 8,选项 D正确。 39 【正确答案】 B 【试题解析】 本题考查位运算。题目中将 4向左移
33、一位然后重新赋值给 a, 4左移一位为 8,程序运行结果为 8,选项 B正确。 40 【正确答案】 D 【试题解析】 本题考查位运算以及按位或操作。将 a左移二位相当于是将 a乘以了 4,所以 a 2等于 20,二进制表示为 00010100,与 b按位或得到 0001010l。即 21,所以选项正确。 41 【正确答案】 B 【试题解析】 本题考查逻辑异或运算。异或运算只有在两个比较的位不同时其结果是 1,否则结果为 0,题目中两个值相同,所以结果为 0。 42 【正确答案】 B 【试题解析】 本题考查位运算中的按位异或运算符。异或运算只有在两个比较的位不同时其结果是 1,否则结果为 D,
34、10用二进制表示为 00001010, 5用二进制表示为 00000l0l,异或运算后结果为 00001111,即 15,选项 B正确。 43 【正确答案】 A 【试题解析】 本题考查位运算中的按位或运算符。或运算只要两个比较的位中有一个为 1,其结果是 1,否则结果为 D, 13用二进制表示为 00001101, 5用二进制表示为 00000101,或运算后结果为 00001101,即 13,选项 A正确。 44 【正确答案】 D 【试题解析】 本题考查按位取反运算。 0按位取反就是 -1,所以选项 D正确。 45 【正确答案】 C 【试题解析】 本题考查按位异或运算。异或运算只有在两个比较的位不同时其结果是 1,否则结果为 0, i i运算符两边相同,所以结果为 0,选项 C正确。 46 【正确答案】 A 【试题解析】 本题考查位运算。按位取反只需要一个操作数,所以 B选项错误,左移一位是原操作数的 2倍,其他情况不是,比如左移两 位就是原操作数的 4倍,所以 C选项错误,右移运算时,高位在某些情况下不是补 0。