全国计算机二级C语言 # 选择题:数据类型、运算符与表达式(1-88)
1. 以下选项中可用作C语言合法用户标识符的是答案:C
A)-abc
B)void
C)_123
D)2a
题目解析:用户标识符不能与关键字相同,尽量避免和预定义标识符相同,并且用户标识符的命名规则需符合标识符的命名规则:由字母、数字、下划线组成并且第一个字符不能为数字。void为C语言关键字所以不能作为用户标识符,所以答案选C)
2. 以下选项中合法的C语言赋值语句是答案:D
A)k=int( a+b );
B)a=b=34
C)a=3,b=9
D)++i;
题目解析:C语言语句在结尾必须有分号,没有分号则不合法,选项B)、C)错;C语言中强制转换类型需要将类型说明符给括起来,应该为k=(int)(a+b),选项A)错;所以答案选D)。
3. 有以下程序段,其中的变量已定义为int类型
sum = pad = 5; pAd = sum++, pAd++, ++pAd;
printf( “%d “, pad );null
程序段的输出结果是答案:D
A)4
B)7
C)6
D)5
题目解析:C语言对大小写敏感,所以pad和pAd是两个不同的变量。所以答案选D。
4. sizeof( double ) 是答案:B
A)一个双精度表达式
B)一个整型表达式
C)不合法的表达形式
D)一个函数调用
题目解析:sizeof为求字节数的运算符,操作的对象可以是类型说明符、数组名或者表达式,求得的结果为一个整数。所以答案选B。
5. 有以下程序(字母A的ASCII代码为65)
#include <stdio.h>
main()
{
char c1 = ‘A’, c2 = ‘Y’;
printf(“%d, %d “, c1, c2 );
}
程序运行后的输出结果是答案:C
A)输出格式不合法,输出出错信息
B)A, Y
C)65, 89
D)65, 90
题目解析:考查字符型数据。字符常量与其ASCII码值一一对应,在计算的时候,一般是字符数据对应的ASCII码参与运算,输出时会根据格式控制符输出对应的字符或者ASCII码。
6. 若有说明语句:char c = ‘:’ ; 则变量c中存放的是答案:D
A)2个字符
B)3个字符
C)说明语句不合法
D)1个字符
题目解析:以反斜杠开始的为转义字符,C语言中可以用1~3位八进制数代表一个转义字符(形式为′ddd′),所以′ :′为一个用2位八进制表示的转义字符。
7. 有以下程序
#include <stdio.h>
main()
{
int a, b, c=241;
a = c/100 % 9;
b = ( -1 )&&( -1 );
printf(“%d, %d “, a, b );
}
程序运行后的输出结果是答案:B
A)2,0
B)2,1
C)6,0
D)6,1
题目解析:考查运算符与表达式。若除法运算符”/”的参与量均为整型,则结果也为整型,所以a=2。在C语言中,用非0表示真,用0表示假,所以逻辑表达式”( -1 )&&( -1 )”的结果为真,b=1。
8. 有以下程序
#include <stdio.h>
main()
{
printf(“%d “, NULL );
}
程序运行后的输出结果是答案:A
A)0
B)-1
C)1
D)变量无定义,输出不确定
题目解析:NULL为一个符号常量,对应的ASCII码值为0。
9. 若有定义语句:int a=12;,则执行语句:a+= a-= a*a;后,a的值是答案:D
A)552
B)144
C)264
D)-264
题目解析:考查复合赋值运算符。表达式a+= a-= a*a中先计算a-= a*a,相当于a=a-a*a,结果a为-132,然后计算a+=a,相当于a=a+a,计算结果为-264。
10.
答案:C
A)1/(a*b*c)
B)1.0/a*b*c
C)1.0/a/b/c
D)1/a/b/(double)c
题目解析:考查运算符与表达式。代数式的意思是计算1除以abc乘积的值,代数式计算的结果应该是一个小数。C语言中,”/”运算符的两侧若为整数,则计算的结果也为整数。根据运算符的优先级和结合性,”/”和”*”运算符的优先级相同,结合性为自左向右,选项B中计算的是1除以a,然后再与b、c求乘积。
11. 已知a=5,b=6,c=7,d=8,m=2,n=2,执行(m=a>b)&&(n=c<d)后n的值为答案:C
A)1
B)-1
C)2
D)0
题目解析:表达式”(m=a>b)&&(n=c<d)”中先判定圆括号内的表达式的值,”m=a>b”为把关系表达式”a>b”的值赋值给m,m=0,根据逻辑与表达式的”短路”现象,第二个圆括号内的表达式不再计算,所以n值没有变化。</d)”中先判定圆括号内的表达式的值,”m=a>
12. 以下选项中,合法的C语言常量是答案:A
A)1.234
B)2Kb
C)”.0
D)’C++’
题目解析:字符常量只包含一个字符;C语言中有”””表示双引号符,但是没有”””的形式;2Kb只是表示字节数,并不是C语言常量。
13. 以下选项中,合法的C语言实数是答案:A
A).2e0
B)E13
C)7.12E
D)3.1e0.4
题目解析:科学计数法中,e/E前后必须有数字并且后面的数字必须为整数。
14. 设a,b,c是整型变量且均已赋值,则以下选项中错误的是答案:B
A)a = b = c + 10;
B)a = (b = 3) = 1;
C)a = 1 + (b = c = 2);
D)a = (b = 2) + c;
题目解析:赋值运算符的左侧必须为变量而不能是表达式。
15. 有如下程序
#include <stdio.h>
main()
{
int x = 072;
printf(“%d “, x+1);
}
程序运行后的输出结果是答案:D
A)72
B)73
C)115
D)59
题目解析:八进制整常数以数字”0″作为前缀,printf中的格式控制符为”%d”表示按照十进制输出,所以输出的是x加1之后的十进制数字,即59。
16. 以下选项中,合法的数值型常量是答案:C
A)092
B)”A”
C)3.1415
D)0xDH
题目解析:数值型常量包含整型常量、实型常量和字符常量,字符常量用的是单引号而不是双引号;以数字”0″作为前缀的是八进制整常数,不能包含数字9;以”0x”作为前缀的是十六进制整常数,不能包含”H”。
17. 以下选项中,合法的实数是答案:A
A)4.5E2
B)E1.3
C)1.2E1.2
D)7.11E
题目解析:科学计数法中,e/E前后必须有数字并且后面的数字必须为整数。
18. 若有定义 int a, b, c; 以下选项中的赋值语句正确的是答案:D
A)a = (b == c) = 1;
B)(a = b) = c = 1;
C)a + b = c;
D)a = (b = c) + 1;
题目解析:赋值运算符的左侧必须为变量而不能是表达式。
19. 有如下程序
#include <stdio.h>
main()
{
int x = 0x13;
printf(“%d “, x+1);
}
程序运行后的输出结果是答案:B
A)12
B)20
C)14
题目解析:十六进制整常数以数字”0x”作为前缀,printf中的格式控制符为”%d”表示按照十进制输出,x对应的十进制数值为19,x加1之后的十进制数字为20。
20. 设有定义:int a=0,b=1,c=1;以下选项中,表达式值与其它三个不同的是答案:B
A)a=c==b
B)b=a==c
C)c=a!=c
D)a=b=c
题目解析:关系运算符的优先级要高于赋值运算符。所有的表达式均是先计算关系表达式然后再计算赋值运算,除了选项B)的表达式的值为0之外,其余的所有选项的表达式的值均为1。
21. 设有两行定义语句:
int scanf;
float case;
则以下叙述正确的是答案:C
A)两行定义语句都合法
B)第1行语句不合法
C)第2行语句不合法
D)两行定义语句都不合法
题目解析:新增试题,scanf为库函数名,属于预定义标识符,可以被用户重定义,所以第一行语句合法。case为关键字,是选择结构switch语句中的关键字,不可被用户重定义,所以第二行语句不合法。
22. 设有定义:double x=2.12;,以下不能完整输出变量x值的语句是答案:A
A | printf(“x=%5.0f\n”,x); |
---|---|
B | printf(“x=%f\n”,x); |
C | printf(“x=%lf\n”,x); |
D | printf(“x=%0.5f\n”,x); |
本题考查printf函数的格式输出,”格式控制字符串”部分为”%f”表示按照浮点型输出,选项B正确;加入长度格式符l即”%l”表示按照双精度浮点型输出,选项C正确;若要控制输出精度,则需以”. “开头,后跟十进制整数,如”%.2f”或”%0.2f”,选项D正确; 控制输出宽度则是用整数表示,如”%5f”。选项A中”%5.0f”表示输出宽度为5,右对齐,小数点后保留位数为0,所以结果输出为 2,不能完整输出x,答案选A。
23. 设有定义:int a,b; float x; ,则以下选项中对语句所作的注释叙述错误的是答案:A
A)scanf(“%d%d%f”,&a,&b); /* 多余的格式符%f完全不起作用 */
B)scanf(“%d%d”,&a,&b,&x); /* 多余的输入项不能获得输入数据 */
C)scanf(“%d%f%d”,&a,&b,&x); /* 输入项与格式符类型不匹配,变量b和x得不到正确的输入数据 */
D)scanf(“Input:%d%d”,&a,&b); /* 格式串中允许加入格式符以外的字符串 */
题目解析:新增试题,A选项中%f是起作用的,程序从键盘正确的读入前两个数据并且保存在指定的地址,读入第三个数据后,将其放入缓冲区,然后寻找应该存放的地址,因为没有找到,程序会发生错误而中断,A选项注释错误,所以选择A选项。B选项由于scanf接收数据只有两个,所以变量x得不到赋值,注释正确。C选项scanf会按照float类型读取输入的第二个数据并且保存为int类型,由于两种类型的存储形式与所占内存单元均不同,所以b得不到正确的赋值,注释正确。在使用scanf函数时,如果除了格式说明字符和附加格式字符外,还有其他字符,则在输入数据时要求按一一对应的位置原样输入这些字符,故D选项注释正确。
24. 以下不能输出小写字母a的选项是答案:A
A)printf(“%c “,”a”);
B)putchar(97);
C)putchar(‘a’);
D)printf(“%c “,’A’+32);
题目解析:选项A)中输出语句的输出项和格式控制符不相符,应写作”printf(“%c”,′a′);”
25. 有以下程序段
char c1,c2,c3;
scanf(“%c%c%c”,&c1,&c2,&c3);
若要给c1、c2、c3分别输入字母A、B、C,则以下对输入形式的描述正确的是答案:C
A)字母A、B、C之间可以用空格分隔
B)字母A、B、C之间可以用Tab键分隔
C)字母A、B、C之间不能有分隔符
D)字母A、B、C之间可以用回车符分隔
题目解析:考查scanf函数的格式输入,输入的格式要严格遵循”格式控制串”中的格式,如果”格式控制串”中没有非格式字符,则输入时也不能输入非格式字符。
26. 以下不属于C语言位运算符的是答案:B
A)~
B)!
C)^
D)|
题目解析:”!”为逻辑非运算符,不是位运算符。故本题答案选B)
27. 以下能正确表述算式 sin(2πr+30°)的C语言表达式是答案:D
A)sin(2*3.14*r+ 30 )
B)sin(2*3.14*r+30*3.14/360.0)
C)sin(2*π*r+ 30 )
D)sin(2*3.14*r+3.14*30/180.0)
题目解析:本题考查算术表达式的写法,C中没有π,需要用数值3.14代替,C中sin函数的参数为弧度,角度30转成弧度应为3.14*30/180。故本题答案选D)。
28. 设有定义:int x=11,y=12,z=0;,以下表达式值不等于12的是答案:D
A)(z,x,y)
B)(z=x,y)
C)z=(x,y)
D)z=(x==y)
题目解析: 考查运算符与表达式,D)中先计算(x==y),为0,将0赋值给z,表达式值为0,D)错;选项B)、C)、A)均涉及到逗号表达式,整个逗号表达式的值为最后一个表达式的值,所以均为12。
29. 以下可以将任意一个两位整数n的个位数与十位数对换的表达式为答案:D
A)(n-n/10)*10+(n/10)
B)n-n/10*10+n/10
C)n/10+(n-n/10)
D)(n-n/10*10)*10+n/10
题目解析:考查运算符与表达式,方法是想办法得到个位数字和十位数字,然后个位数字*10+十位数字即可将个位数和十位数对换。D)中,n/10*10将整数中的十位部分提取出来,然后用n-n/10*10即得该整数的个位数字,n/10得到十位数字,(n-n/10*10)*10+n/10即完成对换。
30. 设有以下程序段
int y;
y=rand() % 30+1;
则变量y的取值范围是答案:C
A)0≤y≤30
B)1<y≤30
C)0<y≤30
D)1<y<30
题目解析:考查运算符与表达式,rand()%30求得范围在0-29之间的数据,+1后的取值范围为1-30(1、30也包括在内)
31. 设有定义:int a=64,b=8;,则表达式(a&b)||(a&&b)和(a|b)&&(a||b)的值分别为答案:C
A)0和0
B)0和1
C)1和1
D)1和0
题目解析:变量a对应的二进制数值为01000000,变量b对应的二进制数值为00001000,01000000&00001000的结果为0,0100000|00001000的结果为非0,而a&&b的值1,a||b的值为1,所以表达式”(a&b)||(a&&b)”的值为1,表达式”(a|b)&&(a||b)”的值也为1
32. 关于C语言标识符,以下叙述错误的是答案:A
A)标识符可全部由数字组成
B)标识符可全部由下划线组成
C)标识符可全部由小写字母组成
D)标识符可全部由大写字母组成
题目解析:标识符由字母(A-Z,a-z)、数字(0-9)、下划线“_”组成,并且首字符不能是数字,但可以是字母或者下划线。
33. 若有C语言表达式 2+3*4+7/3,则以下选项中关于执行顺序的叙述,正确的是答案:D
A)先执行2+3得5,再执行5*4得20,再执行20+7得27,最后执行27/3得9
B)先执行7/3得2,再执行3*4得12,再执行12+2得14,最后执行2+14得16
C)先执行3*4得12,再执行7/3得2.5,最后执行2+12+2.5得16.5
D)先执行3*4得12,再执行2+12得14,再执行7/3得2,最后执行14+2得16
题目解析:首先,在C语言中,乘除法优先级要高于加减法,其次,除法运算符“/”两边参加运算的对象都是整数,运算结果要取整;C语言中,因为运算符“*”和“/”都满足从左到右的运算规则,故应先计算3*4=12。
34. 若想给已定义为int型的变量a,b,c,d赋值为1,以下选项中错误的语句是答案:D
A)a=1, b=a, c=b, d=c;
B)d=1, c=d, b=c, a=b;
C)a=b=c=d=1;
D)a=b, b=c, c=d, d=1;
题目解析:赋值是将一个常量的值赋给一个变量,在D选项中,变量b的值相当于一个未知的数,用变量b对变量a赋值,不满足题干要求的变量a、b、c、d赋值为1的条件,因此答案选D选项。
35. 若有定义:char c; int d; 程序运行时输入:c=1,d=2<回车>,能把字符1输入给变量c、整数2输入给变量d的输入语句是答案:C
A)scanf(“c=%c d=%d”, &c,&d);
B)scanf(“c=%d d=%d”, &c,&d);
C)scanf(“c=%c,d=%d”, &c,&d);
D)scanf(“c=%d,d=%d”, &c,&d);
题目解析: scanf()函数中,%d对应的参数是整数型地址,%c对应参数为char型地址;如果输入地址有多个,应该用逗号隔开。
36. 若有定义:int a=0,b=0,c=0,d=0; ,对于表达式 (a++ && b++) ? c++ : d++,以下关于其执行顺序的叙述正确是答案:C
A)先计算表达式a++,其值为0;再计算表达式b++,其值为0,由此可确定(a++ && b++)值为0,因此计算d++
B)先计算表达式a++,其值为1;再计算表达式b++,其值为1,由此可确定(a++ && b++)值为1,因此计算c++
C)先计算表达式a++,其值为0,由此即可确定(a++ && b++)值为0,因此计算d++
D)先计算表达式b++,其值为1;再计算表达式a++,其值为1,由此可确定(a++ && b++)值为1,因此计算c++
题目解析:为了方便解释,把整体表达式概括为:表达式1?表达式2:表达式3,若表达式1为真,则执行表达式2,否则执行表达式3。逻辑与运算符遵循“短路求值”策略,即只有在仅靠左操作数的值无法确定该逻辑表达式的结果时,才会求解右操作数,表达式(a++&&b++)中,左操作数a++的值为0,已经可以确定整个逻辑表达式的结果为0,因此右操作数b++不再求解,直接执行表达式3,即d++
37. 以下不属于合法C语言转义字符的是答案:C
A)’a’
B)’’
C)’c’
D)’ ‘
题目解析:a响铃(BEL);退格(BS) ,将当前位置移到前一列;回车(CR) ,将当前位置移到本行开头;
38. 有以下程序
#include <stdio.h>
main( )
{ char c;
for(; (c=getchar()) != ‘#’; ) putchar(++c);
}
执行时如输入为:abcdefg##<回车> , 则输出结果是答案:C
A)bcdefgh$
B)abcdefg
C)bcdefgh
D)bcdefgh$$
题目解析:运算符“++”放在变量后面时,先参与其他操作,再对变量+1。putchar(c++)表示先输出当前c值,再对c值+1,当输入abcdef##时,在while语句中,当程序输入“#”时,循环退出。因此输出为abcdefg。
39. 有以下程序
#include <stdio.h>
main( )
{ int c, d;
c = 10^3;
d = 10+3;
printf(“%d,%d “, c, d);
}
程序运行后的输出结果是答案:C
A)13,13
B)103,13
C)9,13
D)10,13
题目解析:在C语言中,^是位异或运算符,是二目运算符,要两个操作数参与,c=10^3;是把10与3进行位异或操作后的结果赋值给变量c。把参与运算的操作数转化为二进制数,10的二进制为1010,3的二进制为0011。位异或操作,当对应的二进制位的值相同时,结果为0,不同时为1,所以10^3=1001,转化为十进制为9。+号运算即相加。输出结果为9,13。
40. 以下不属于C语言整数的是答案:C
A)+20L
B)25u
C)12f
D)-32
题目解析:在C语言中,整型常量可以用十进制、八进制和十六进制形式来表示。十进制用一串连续的数字来表示;十六进制用数字0和字母x或X开头,由0-9十个数字和字母a-e组成;八进制数用数字0开头,其间的数字为0至7八个数字;
41. 有C语言表达式 2*3+4+15%3 ,关于其执行顺序,以下叙述正确的是答案:A
A)先执行2*3得6,再执行6+4得10,再执行15%3得0,最后执行10+0得10
B)先执行15%3得3,再执行4+3得7,再执行2*3得6,最后执行6+7得13
C)先执行2*3得6,再执行15%3得5,最后执行6+4+5得15
D)先执行15%3得0,再执行2*3得6,最后执行6+4+0得10
题目解析:先执行乘法即2*3得6,再执行6+4得10,再执行15%3得0(求余运算,不是除运算),最后执行10+0得10。
42. 若想给已定义为int型的变量a、b、c、d赋整数1,以下选项中错误的语句是答案:D
A)d=(b=c=(a=1));
B)d=c=b=a=1;
C)d=1, c=d, b=c, a=b;
D)d=c, c=b, b=a, a=1;
题目解析:赋值是将一个常量的值赋给一个变量,D项中,变量c初始值未定义,相当于一个未知数给变量d赋值,不满足赋值为1的条件。
43. 若有定义:int a; float b; double c; ,程序运行时输入:1,2,3<回车>,能把1输入给变量a、2输入给变量b、3输入给变量c的输入语句是答案:A
A)scanf(“%d,%f,%lf”, &a,&b,&c);
B)scanf(“%d,%lf,%lf”, &a,&b,&c);
C)scanf(“%d%f%lf”, &a,&b,&c);
D)scanf(“%d,%f,%f”, &a,&b,&c);
题目解析:格式字符d输入十进制整数;格式字符f输入浮点数;格式字符if输入双精度浮点数。分别与int,float,double的含义一一对应。
44. 有以下程序
#include <stdio.h>
void fun(int a[ ], int n)
{
int i;
for (i=0; i<n; i++)
{
if (i % 3 == 0)
a[i] -= n;
else
a[i] += n;
}
}
main( )
{ int c[5] = {6,7,8,9,10},i;
fun(c, 5);
for (i=0;i<5; i++) printf(“%d,”, c[i]);
printf(” “);
}
程序运行后的输出结果是答案:A
A)1,12,13,4,15,
B)10,9,8,7,6,
C)10,12,8,4,6,
D)1,7,13,9,15,
题目解析:-=:减法赋值运算符,将运算符前面的变量减去后面的值再赋值给前面的变量。a[i] -= n和a[i]=a[i]-n相同。+=:加法赋值运算符,将运算符前面的变量加上后面的值再赋值给前面的变量。a[i] += n和a[i]=a[i]+n相同。n=5,i=0,c[0]=6-1,i=1,c[1]=6+6=12,依次类推,得出结果。
45. 有以下程序
#include <stdio.h>
main( )
{ int c,d;
c = (13>>1)|1;
d = (13>1)||1;
printf(“%d,%d “, c, d);
}
程序运行后的输出结果是答案:C
A)7,2
B)6,1
C)7,1
D)1,1
题目解析:右移运算符”>>”的运算规则是把左边运算数的各二进制位全部右移n位,n取决于”>>”右边的数值。13>>1=6,13>1=1,| 按位OR(相当于数学中的“并”),6转化为二进制数为110,110|1=111,转化为十进制数为7。||表示逻辑或运算,1||1=1,输出为7,1。
46. 以下选项中,合法的C语言常量是答案:C
A)”.0
B)2MB
C)21.84
D)’CPP’
题目解析:C语言常量包括以下五类:1.整型常量;2.实型常量;3.字符型常量(其中又包括普通字符和转义字符);4.字符串常量;5.符号常量。”.0应改为”.0″;MB是标识符不是常量;’CPP’单引号中只能有一个字符。
47. 以下选项中,合法的C语言实数是答案:B
A)2.1e0.2
B).1e0
C)E1
D)0.10E
题目解析:科学计数法e右端应该为整数,e左右两端都应该有数据,左端可以不是整数。
48. 设a,b,c是整型变量,且已正确赋初值,以下选项中错误的赋值语句是答案:C
A)a = b = c / 10;
B)a = 1 % (b = c = 2);
C)a = 2 = (b = 9) = 1;
D)a = (b = 3) * c;
题目解析:赋值语句中在没有运算符的情况下,不能用括号。
49. 有如下程序
#include <stdio.h>
main( )
{
int x = 072;
printf(“X=%d “, x+1);
}
程序运行后的输出结果是答案:A
A)X=59
B)X=115
C)X=72
D)X=73
题目解析:072代表的是八进制数,转化为十进制数为58,输出为58+1=59。
50. 对于 if(表达式) 语句,以下叙述正确的是答案:B
A)常量不能出现在“表达式”中
B)“表达式”的值可以是任意合法的数值
C)变量不能出现在“表达式”中
D)如果“表达式”的值不是逻辑值,程序会出编译错误
题目解析:表达式的值需要进行判断,并不是所有合法数值都能进行判断的。
51. 有如下程序
#include <stdio.h>
main( )
{
int a = 0, b = 1;
if (a++ && b++)
printf(“TRUE”);
else
printf(“FALSE”);
printf(“_OUT:a=%d,b=%d “, a, b);
}
程序运行后的输出结果是答案:A
A)FALSE_OUT:a=1,b=1
B)FALSE_OUT:a=0,b=2
C)TRUE_OUT:a=0,b=1
D)TRUE_OUT:a=1,b=2
题目解析:&&是逻辑与运算符,a++ && b++,一假必假,结合性从左至右。结果为假,所以输出为FALSE,由于判断了a++为假,那么b++就不运行,所以输出为a=1,b=1。
52. 以下叙述正确的是答案:D
A)不能在数组说明符的一对方括号中使用常量表达式
B)若有数组定义 int array[5]; 则语句 printf(“%d”, array[1.23]);是合法的
C)数组下标的最小值可以是负值
D)char c1, *c2, **c3, c4[2]; 是C语言的合法语句
题目解析:方括号中可以为整型变量或者常量表达式;引用数组元素的时候只能用整型数据而不能用浮点数据;数组的下限只能为0,不能为负值。
53. 设有如下程序段
int a[1] = {0};
int b[] = {9};
char c[3] = {“A”, “B”};
char d = “12”;
以下叙述正确的是答案:A
A)a, b的定义合法,c, d的定义不合法
B)只有a的定义是合法的
C)a,b,c的定义是合法的,d的定义不合法
D)a,b,c,d的定义都是合法的
题目解析:字符变量和字符数组中只能存放字符常量,不能存放字符串常量,所以变量c、d的定义不合法。
54. 以下选项中,合法的数值型常量是答案:B
A)’X’
B)3.2
C)0xEH
D)099
题目解析:数值型常量包含整型常量、实型常量和字符常量,字符常量用的是单引号;以”0x”作为前缀的是十六进制整常数,不能包含”H”;以数字”0″作为前缀的是八进制整常数,不能包含数字9。
55. 以下选项中,合法的实数是答案:D
A)2.10E
B)1.9E1.4
C)E1.1
D)1.5E2
题目解析:科学计数法中,e/E前后必须有数字并且后面的数字必须为整数
56. 若已有定义语句:int a, b, c;,且变量已正确赋初值,则以下选项中正确的赋值语句是答案:B
A)a = (b == c) = ‘A’;
B)a = (b = c) + 8;
C)(a = b) = c = 9;
D)a + b = c + 1;
题目解析:赋值运算符的左侧必须为变量而不能是表达式。
57. 有以下程序
#include <stdio.h>
main( )
{
int x = 0x13;
printf(“INT:%d “, x+1);
}
程序运行后的输出结果是答案:C
A)INT:14
B)INT:12
C)INT:20
D)INT:13
题目解析:以”0x”作为前缀的是十六进制整常数,转化为十进制常数为19,加一等于20,即输出INT:20。
58. 有以下程序
#include <stdio.h>
main( )
{
int i, array[6] = {1, 5, 0, 4};
for (i=0; i<5; i++)
printf(“%d,”, array[i] & 4);
printf(” “);
}
程序运行后的输出结果是答案:B
A)1,2,1,2,0
B)0,4,0,4,0,
C)1,5,5,4,0,
D)1,5,0,4,0,
题目解析:按位与”&”运算符的运算规则是:只要对应的二进制位有一个为0时,结果就为0。array[0]&4=0000&0100,十进制数为0,array[1]&4=0101&0100=0100,十进制数为4,依次类推得出结果。
59. 设变量a,b和ch已正确定义并赋初值,则以下叙述中错误的是答案:C
A)运算符%的运算对象只能是整数类型
B)复合运算:a*=b+ch是将变量b、ch之和与a相乘,结果再给a赋值
C)语句ch=(unsigned int) a+b;是对a与b之和进行强制类型转换,结果赋值给变量ch
D)逗号表达式的值是最后一个表达式的运算结果
题目解析:语句表达的运算顺序是先将a和b强制转化为int型,再进行求和运算,最终结果仍为int型
60. 以下可以正确且安全的用作用户标识符的一组选项是答案:D
A)Abc, getch
B)Switch, unsigned
C)3break, enter
D)_32int, long64
题目解析:标识符由数字,字幕和下划线组成,第一个字符必须是字母或者下划线。而用户标识符不能与关键字和预定义标识符相同
61. 以下关于运算符”/”的叙述正确的是答案:B
A)总是进行单精度除法运算
B)只有其两边运算对象的类型都是整型时,所做运算为整数整除运算
C)不允许char型对象参与运算
D)总是进行双精度除法运算
题目解析:除法运算符“/”。二元运算符,具有左结合性。参与运算的量均为整型时,结果为整型,舍去小数。如果运算量中有一个为实型,结果为双精度实型。
62. 若有定义:char ch; int a; double d;, 当输入为12345 678910.36时,以下选项中能给各个变量正确输入数据的是答案:D
A)scanf(“%d%c%lf”,a,ch,d);
B)scanf(“%5d%2c%7.2lf”,&a,&ch,&d);
C)scanf(“5d%2c%7.2lf%”,&a,&ch,&d);
D)scanf(“%d%c%lf”,&a,&ch,&d);
题目解析:%d:十进制整数输出;%c:单个字符的输出;%1f代表单精度浮点数
63. 如图所示一平面圆,圆心是(2,1),半径为1:
以下选项中,判断平面点(x,y)位于圆内时为真的表达式是答案:A
A)(x-2)*(x-2)+(y-1)*(y-1)<1
B)(x-2)^2+(y-1)^2<1
C)x>1&&x<3&&y>0&&y<2
D)abs(x-2)<1&&abs(y-1)<1
题目解析:判定点是否在圆内,即判断坐标与圆心坐标差的平方值与半径的平方值做大小比较;C语言中没有^这个运算符号。
64. 以下叙述中正确的是答案:C
A)””是空的字符串,”是空字符NULL
B)”\”与’\’ 都是字符串常量
C)”A”和’A’都是转义字符常量
D)” “和’ ‘都是回车字符
题目解析:双引号里面的是字符串,而单引号里面的代表字符;空字符串等价于””是占用内存,占用一个字节。但两者并不完全相同。
65. C语言常量的类型从字面形式上可区分,以下判断中正确的是答案:D
A)2E3 — 整型
B)”a” — 字符型
C)’’— 字符串
D)2.0E3 — 实型
题目解析:2E3是实型常量,用双引号引起的字符串,代表的却是一个指向无名数组起始字符的指针,该数组被双引号之间的字符以及一个额外的二进制值为零的字符”初始化。’’表示的是一个25的八进制数。
66. 以下选项中,算术表达式的值与其他三个不同的是答案:C
A)3./5
B)3.0/5.0
C)3/5
D)3/5.
题目解析:3/5代表整数相除,结果也为整数,其余三个结果均是小数。
67. 设有定义:int k=3,i=2; 以下选项中,变量k的值与其他三个不同的是答案:C
A)k=i-1;
B)k-=i;
C)k=i–;
D)k=–i;
题目解析:k=i-1=1;k-=i和k=k-i的表达式含义一样,代入数据的出k=1;i–表示先赋值再减一,即k=i–=2;–i表示先减一再赋值,即k=–i=1。
68. 设有如下语句:
int k=0;
k=printf(“OK “);
则以下叙述中正确的是答案:A
A)变量k得到的是输出字符的总个数3
B)变量k得到的是输出的可见字符个数2
C)变量k仍保持初值0
D)printf必须作为独立语句出现
题目解析: 变量k的值被赋予的是OK和换行符,输出为总个数和可见字符个数均是3,该语句中printf就没有作为独立语句出现。
69. 以下叙述中错误的是答案:A
A)C语言逻辑运算的结果是0和任意非0值
B)C语言中任意合法的表达式都可以作为逻辑运算的对象
C)C语言关系运算的值只有0和1两种可能
D)C语言中用0表示逻辑“假”,非零表示逻辑“真”
题目解析: 逻辑运算值只有真和假,没有其它
70. C语言的逻辑表达式在特定情况下会产生“短路”现象。若有如下逻辑表达式:
x++ && y++
则以下叙述中正确的是答案:A
A)若x的值为0,则y++操作被“短路”,y值不变
B)若y的值为0,则&&运算被“短路”,y值不变
C)若y或x的值为0,则表达式值为0,x++和y++均不执行
D)若x的值为1,则y++操作被“短路”,y值不变
题目解析:&&是逻辑与运算符,条件1 && 条件2,一假必假,结合性从左至右。条件1为假的时候即x=0时,条件2的语句不执行,该逻辑为假
71. 以下表达式中,其值不等于数值3的是答案:D
A)’d’- ‘a’
B)’3′-‘0’
C)’D’-‘A’
D)0 +’3′
题目解析: 单引号的内容是字符,参与其运算的是其ASCII码的值,0 +’3’,一个是数字,一个是字符,不能相加,只有两个都是字符的情况下,其ASCII码值会相加。
72. 有如下程序
#include <stdio.h>
void fun(int *a,int *b)
{ for( ; (*a<*b) || (getchar()!=’@’) ; )
{ (*a)++; (*b)–; }
}
main()
{ int i=0,j=5;
fun(&i,&j);
printf(“%d,%d “,i,j);
}
程序运行时在第一列开始输入:
ab@<回车>
则运行结果是答案:B
A)0,5
B)5,0
C)3,2
D)4,1
题目解析: || 表示或运算,满足其中一个条件,该表达式的值就为真;getchar()一次只读取一个输入,其它的输入会保存下来,之后执行的过程中会继续执行保存下来的字符。指针a指向0,指针b指向5,满足*a<*b,即运行(*a)++和 (*b)–;直至指针a指向3,指针b指向2时,判断下一条件是否满足即getchar()!=’@’,读取到@符号时该条件才不满足,需要读取2次,也即运行2次(*a)++和 (*b)–,即i=5,j=0
73. 以下是正确C语言实型常量的是答案:D
A)+8e.8
B).8e+8.
C)e+8
D)+8.8e+8
题目解析: 实型常量,在本题中指的是实数,+8.8e+8,表示的是正的8.8*10的正8次方,为实数。
74. 算术运算符和圆括号有不同的运算优先级,对于表达式:a+b+c*(d+e),关于执行顺序,以下说法正确的是答案:D
A)先执行a+b得r1,再执行r1+c得r5,再执行(d+e)得r2,最后执行r5*r2得表达式最后结果
B)先执行(d+e)得r2,再执行c*r2得r3,再执行a+b得r1,最后执行r1+r3得表达式最后结果
C)先执行(d+e)得r2,再执行c*r2得r3,再执行b+r3得r4,最后执行a+r4得表达式最后结果
D)先执行a+b得r1,再执行(d+e)得r2,再执行c*r2得r3,最后执行r1+r3得表达式最后结果
题目解析: 先执行的是a+b,再执行d+e,再执行c*(d+e),最后将结果相加。
75. 若有程序段:
int a,b; char d;
scanf(“%d%c%d”, &a, &d, &b);
若想把12输入给变量a,字符’k’输入给变量d,34输入给变量b,程序运行时正确的输入是答案:C
A)12 k 34
B)12’k’34
C)12k34
D)12 ‘k’ 34
题目解析: scanf输入语句中顺序为adb,即12k34。
76. 有下列程序
#include <stdio.h>
main()
{
int a=0,b=0,c=0;
if (++a || ++b && ++c)
printf(“%d,%d,%d “, a, b, c);
}
程序执行后的输出结果是答案:D
A)1,1,1
B)1,1,0
C)0,1,1
D)1,0,0
题目解析:&&表示逻辑与运算;||表示逻辑或运算;&&运算优先级高于||运算;即if判断条件为++a不等于为真或++b不等于0且++c不等于0为真,表达式的值才为真。满足条件的情况之一就是a=1,b=0,c=0,。
77. 关于字符常量’a’,以下说法正确的是答案:A
A)字符后的数141是八进制 —–a141
B)字符后的数141前因为没有写0或0x,因此无法断定是什么进制—默认十进制
C)字符后的数141是十六进制
D)字符后的数141是十进制
题目解析:”是转义字符,如果后面是数字,就表示ASCII数值对应的字符,这里的数字通常是1-3位八进制数,也有用’ª’形式的十六进制表示的。
78. 设a,b,c是整型变量且已正确赋有初值,以下选项中的赋值表达式错误的是答案:D
A)a = (b = 1) + c + 1
B)a = b = c + 1
C)a = 8 + (b = c = 1)
D)a = (b = 0) = 8
题目解析:赋值时,所要赋予的值必须是明确的,赋值时不能连续赋值。
79. 有如下程序
#include <stdio.h>
main()
{
int x = 032;
printf(“%d “, x);
}
程序运行后的输出结果是答案:D
A)32
B)50
C)032
D)26
题目解析:032八进制数,转化为十进制数为26。
80. 对于 if(表达式) ,以下说法正确的是答案:A
A)“表达式”的值可以是1
B)在“表达式”中不能出现非逻辑值
C)在“表达式”中必须出现变量
D)“表达式”的值必须是逻辑值
题目解析:表达式的值不一定是逻辑值,存在非逻辑值,表达式可以是确定的值,即变量为非必需。
81. 有如下程序
#include <stdio.h>
main()
{
int a = 0, b = 1;
if (a++ && b++)
printf(“T”);
else
printf(“F”);
a = b++;
printf(“a=%d,b=%d “, a, b);
}
程序运行后的输出结果是答案:C
A)Ta=0,b=1
B)Ta=0,b=2
C)Fa=1,b=2
D)Fa=1,b=1
题目解析: 由于a=0,b=1,a++&&b++表达式为假。即输出的是F,将b++的值赋值给a,即输出时a=1,b=2。
82. 有如下程序
#include <stdio.h>
main()
{
int i, data;
scanf(“%d”, &data);
for (i=0; i<5; i++)
{
if ((i < data && i % 2) || (i > data && i % 3 == 0)) continue;
printf(“%d,”, i);
}
}
程序运行时,从键盘输入:13<回车>后,程序输出结果为答案:B
A)1,3,5,
B)0,2,4,
C)0,1,2,3,
D)0,1,2,3,4,5,
题目解析:&&表示逻辑与运算,%表示求余运算,||表示逻辑或运算。if判断条件为(i小于data且i对2取余数为0)或(i大于data且i除以3余数为0)满足条件的i的值可以为0,2,4。
83. 以下选项中,合法的C语言标识符是答案:B
A)_test!
B)_123
C)%X
D)a-b
题目解析:标识符由字母、下划线、数字这三个方面组成,但开头必须是字母或下划线。
84. 下面不合法的常量数据是答案:D
A)0x3f7b8a90
B)’
C)
D)
题目解析:标识字符串的结束。
85. 以下说法正确的是答案:B
A)复合语句中不能有分支语句
B)复合语句中包含的语句种类没有限制
C)复合语句中不能有循环语句
D)一条复合语句不能超过50行
题目解析:复合语句中可以有多种语句,没有语句类型的限制,也没有长度的限制,包括分支语句、循环语句等
86. 若有定义:int a,b,c;,想通过语句:scanf(“%d,%d%d”,&a,&b,&c);把1、2、3分别输入给变量a、b、c,则正确的键盘输入是答案:A
A)1,2<tab>3<回车>
B)1<回车>2<回车>3
C)1<回车><tab>2<tab>3
D)1,2,3<回车>
题目解析:scanf语句输入的时候要对应双引号里面的内容;”%d,%d%d”对应的就是1,23<回车>
87. 以下各选项中的代码段执行后,变量y的值不为1的是答案:C
A)int x=5,y=0; if(x) y=1;
B)int x=5,y=0; if(5) y=1;
C)int x=10,y=0; if(x=y) y=1;
D)int x=5,y=10; if(x=y) y=1;
题目解析:if(x=y)标识把y的值赋值给x,并判断是否为0,如果为0跳出if,如果非0,将1赋值给y。
88. 以下选项中,与表达式flag ? a*=2 : a/=3等价的是答案:C
A)flag==0 ? a*=2 : a/=3
B)flag!=1 ? a*=2 : a/=3
C)flag!=0 ? a+=a : a/=3
D)flag==1 ? a*=2 : a/=3
题目解析:a*=2等价于a=a*2等价于a+=a,flag?等价于flag!=0?
本章结束…