1、二、语法基础14. C语言的下列运算符中,优先级最高的运算符是( A )。A. +B. +=C. |D. !=课本P42 优先级别从低到高为: +=、|、!=、+15. ( D )为正确的用户标识符。A. StructB. 5fC. _f0.6D. _for合法用户标识符是有字母、数字、下划线构成,且不能以数字开头。另外C语言关键字(课本P301)不能作为用户标识符。A Struct 为关键字 B 5f 数字开头 C _f0.6含有非法字符. 所以答案选D16. C语言基本数据类型包括( B )。A. 整型、实型、逻辑型B. 整型、实型、字符型C. 整型、字符型、逻辑型D. 整型、实型、字符串
2、型课本P21 实型 即 浮点型17. ( A )为合法的常量。A. 52686LB. E-7C. 1.2E-2.1D. E12课本P22 3.2常量A正确,52686L为长整型常量以指数形式aEn表示实数时,a和n都不能省略,且n必须是整数。所以B和C都错D 一个字符加单引号是字符常量,1个字或多个字符加双引号是字符串常量,所以D错18. ( C )为正确的变量名。A. -k15B. IntC. k_5D. k.jeep见15题解释19. ( D )为正确的字符常量。A. B. 24mC. cD. M见17题解释A,C表示错误,应该加单引号表示字符常量。B是字符串常量。20. ( C )为非法
3、的字符串常量。A. B. sC. efgD. 26621个字或多个字符加双引号是字符串常量,空格字符也是一个字符21. C语言整型数据在内存中的代码是用( C )表示的。A. 原码B. 反码C. 补码D. BCD码22. 以下选项中,合法的实型常数是( B )。A. E-3B. .2E1C. 1E.5D. 1.5E以指数形式aEn表示实数时,a和n都不能省略,且n必须是整数23. 下列C语言合法的数据类型关键字是( B )。A. DoubleB. UnsignedC. IntegerD. Char这题答案错误,C语言大小写是有区别的,A,B,C,D都错,double、unsigned、char
4、 才是合法的数据类型关键字24. Turbo C中,int型数据占用的字节数( B )。A. 由用户自己定义B. 为2个字节C. 是任意的D. 等于所用计算机的字长见课本P28 表3-225. Turbo C中,基本数据类型存储空间长度的排列顺序是( A )。A. charintlong intfloatdoubleB. char=intlong intfloatdoubleC. charintlong int=float=doubleD. char=int=long intfloatdouble见课本P28 表3-2不同的编译系统规定基本数据类型存储空间长度是不同的,Turbo C规定:ch
5、ar=1个字节int=2个字节long=4个字节float=4个字节double=8个字节A. charintlong intfloatdouble 应该改为 charintlong int=float5) printf(%dn,a); else printf(%dn,a-);A. 7B. 4C. 5D. 6a+5 a参与其他运算再自增1,即a先与5比较大小,然后a自增1,变为6所以55 为假,执行else printf(%dn,a-);先输出a,即6,然后a再自减1,a值变为5。54. 若已定义 float x; 要从键盘输入数据36.582给变量x,则应选用( B )语句。A. scanf
6、(%2.3f,&x) ;B. scanf(%6f,&x) ;C. scanf(%6.3f,&x) ;D. scanf(%5.3f,&x) ;scanf函数不能指定输入小数位数见课本P307-308Scanf函数格式字符串的一半形式为: %*输入数据宽度长度类型例如long b;scanf(“%3ld”,&b); /*宽度为3,长度为l ,类型为d*/printf(“%ld”,b);输入:1234567 输出:12355. 若已定义 double y; 拟从键盘输入一个值赋给变量y,则正确的函数调用是( C )。A. scanf(%d,&y) ;B. scanf(%7.2f,&y) ;C. sc
7、anf(%lf,&y) ;D. scanf(%ld,&y) ;scanf函数不能指定输入小数位数double-%lffloat-%dunsigned-%u 无符号十进制整数格式输出long -%ldint-%d八进制-%o十六进制-%xchar(字符变量)-%c字符串-%s56. 已有定义 char s; 使用scanf( )函数输入一个字符给变量s,不正确的函数调用是( D )。A. scanf(%c,&s) ;B. scanf(%d,&s) ;C. scanf(%u,&s) ;D. scanf(%lf,&s) ;字符 在内存中以ascii码的形式存储的,所以字符可以以%d,%u,%c的格式
8、输入输出57. 函数putchar( ) 的功能是向终端输出( A )。A. 一个字符B. 多个字符C. 一个关系表达式D. 一个实型变量值详细见课本P3458. 若已定义 int a=11; 执行以下语句后的输出结果是( B )。 printf(a=%d,a=%o,a=%xn,a,a,a) ;A. a=11, a=11, a=bB. a=11, a=13, a=b C. a=11, a=13, a=cD. a=11, a=12, a=13见55题解释59. 若有定义 int m=4321,n=123,k=21; 语句printf(%4d+%3d+%2d,m,n,k); 执行后的输出结果是(
9、C )。A. 4321432143211231231232121B. 432112321C. 4321+123+21D. 432+123+021Printf中的格式控制字符串中字符分三种:格式字符、转义字符、普通字符其中普通字符+原样输出。60. 已有如下定义和输入语句,char c1,c2;int x; scanf(%c%d%c,&c1,&x,&c2);若要求x、c1、c2的值分别为9、K和H,正确的数据输入是( A )。A. K9HB. K 9 HC. K9 HD. 9KH字符 在内存中以ascii码的形式存储的,所以字符可以以%d,%u,%c的格式输入输出字符ascii码值见课本3006
10、1. 以下程序段的运行结果是( A )。int a=1; printf(%d, %d, %dn, a, +a, a+);A. 3,3,1B. 1, 2, 2C. 1, 2, 3D. 3, 2, 1 Printf函数中变量列表中如果有多个变量,计算顺序是从右到左,输出顺序是从左到右62. 以下程序的运行结果是( D )。void main() int a=65; char c=A; printf(%d+%c=%dn,a,c,a+c);A. A+A=AAB. 65+A=65AC. 65+65=130D. 65+A=130字符以ascii码值参与算术运算。字符ascii码值见课本30063. 若已定
11、义:int x=7;float y=7.0; 以下语句中能输出正确值的是(B )。A. printf(%d %d,x,y);B. printf(%d %.3f,x,y);C. printf(%.3f %.3f,x,y);D. printf(%.3f %d,x,y);见55题解释64. putchar函数可以向终端输出一个( A )。A. 字符或字符型变量值B. 整型变量表达式值C. 实型变量值D. 字符串详细见课本P3465. 若已定义:int a=6;float b=1.5; 要求输出形式为: 6 * 1.50=9.00 ,应选用的正确输出语句是( B )。A. printf(%d * %f
12、=%f,a,b,a*b);B. printf(%d * %.2f=%.2f,a,b,a*b);C. printf(%d * %d=%.2f,a,b,a*b);D. printf(%.2f * %.2f=%.2f,a,b,a*b);int-%dfloat-%f %.02f 以两位小数格式输出float变量值*是普通字符原样输出66. 有以下程序:main() int c; while(c=getchar()!= n) switch(c-2) case 0 : case 1 : putchar(c+4); case 2 : putchar(c+4); break; case 3 : putchar
13、(c+3); default: putchar(c+2); break; printf(n);当输入:247,程序的输出结果是(B )。A. 689B. 6689C. 66778D. 66887c=getchar() 作用是从键盘输入流中获取一个字符,然后赋值给c.switch语句 见课本P76.第一次循环:c=2 c-2=0所以 从case 0:入口开始往下执行,一直语句break;才结束switch语句。即执行以下语句:case 0 : case 1 : putchar(c+4); case 2 : putchar(c+4); break;输出:66第二次循环:c=4 c-2=2所以 从c
14、ase 2:入口开始往下执行,一直语句break;才结束switch语句。即执行以下语句: case 2 : putchar(c+4); break;输出:8第二次循环:c=7 c-2=5因为没有case值与5匹配,所以执行default分支。即执行以下语句: default: putchar(c+2); break;输出:9c=0,结束循环。最后输出结果:668967. 若已定义 int x=5,y=9,z; 语句 z=x=y; 运行后z的值为( C )。A. 1B. .t.C. 0D. .f.见课本P42,关系运算符优先级别高于赋值运算符,所以=优先级别高于=z=x=y;等价于z=(x=y
15、);所以z=(x=y)=(5=9)=068. 判定逻辑值为“真”的最准确叙述是( C )。A. 1B. 大于0的数C. 非0的整数D. 非0的数这个标准答案有错,正确应该选D69. 若已定义 int x=-16,y=-12,z; 语句z=x=y; 运行后z的值为( B )。A. .t.B. 1C. .f.D. 0见67题解释:z=(x=y)=(-16=100) & (s300)B. 100= s=100) & (s=100) and (s=b|b=b|b=b)|(b=-8)|(-8=cC. c-b|a+b&(b*c-a-c)D. (b*c-a-c)&(b*c-a-b)见课本50面75. 若已定
16、义:int x=4,y=2,z=0; 则表达式 (x-y=y)| (y=z)的值是( A )。A. 1B. 0C. 2D. 4(x-y=y)| (y=z)等价于(x-y)=y)| (y=z)即(2bc的值是(A )。A. 0B. 1C. 2D. 3优先级别高于=,所以k=(abc)的结合方向是从左到右,所以k=(ab)c)=(32)1)=(11)=077. 以下运算符中优先级最高的是(D )。A. =B. &C. |D. !优先级从高到低: ! x) | (b=yz);A. 0B. 1C. -1D. 6(这题主要考逻辑运算中的“不完全计算”规则,详细见课本P51.)如果|的左端为假,继续计算|
17、的右端。如果|的左端为真,不计算|的右端。a=cx a=12 a=0 所以a=cx为假b=yz b=34b=0 所以b=yz为假79. 以下程序运行后,a的值是(C )。main() int a,b; for(a=1,b=1;a=20) break; if(b%3=1) b+=3; continue; b-=5; A. 101B. 100C. 8D. 7break语句作用是结束本层循环。continue语句作用是不再执行本次循环中剩下的语句,直接进入下一次循环。详细见课本P103因为b=1 ,无论执行b+=3几次b%3=1恒成立。所以当b=20或a100时才结束for循环。第1次循环:在执行i
18、f(b=20) break;之前a的值为1,b的值为1第2次循环:在执行if(b=20) break;之前a的值为2,b的值为4第3次循环:在执行if(b=20) break;之前a的值为3,b的值为7第4次循环:在执行if(b=20) break;之前a的值为4,b的值为10第5次循环:在执行if(b=20) break;之前a的值为5,b的值为13第6次循环:在执行if(b=20) break;之前a的值为6,b的值为16第7次循环:在执行if(b=20) break;之前a的值为7,b的值为19第8次循环:在执行if(b=20) break;之前a的值为8,b的值为22当b=22执行if
19、(b=20) break;结束for循环,这时候a的值为880. 已定义 double k=3.6; 则正确的赋值表达式是(D )。A. k=double(-3.6)B. k%3C. k=k*(-1.0)=-3.6D. k+=k-=(k=1.2)*(k=3)A 强制类型转换格式写错。应该是k=(double)(-3.6)B不是赋值表达式C 赋值运算符左边不能是表达式,所以C错81. 已定义 char c = A ; 则正确的赋值表达式是( B )。A. c=028B. c=(c+)%4 C. c+1=66D. c+=127A 028不是合法八进制数,八进制的数码只能是:0,1,2,。,6.,7
20、,所以A错C 赋值运算符左边不能是表达式,所以C错D 自减法运算符的操作对象只能是变量,不能是常量和表达式,所以D错82. 已定义 int m =A; 则正确的表达式是( C )。A. 2*m=m+B. m=int(-3.2) C. m%3D. m=m-m=m-5赋值运算符左边不能是表达式,所以A,D错B强制类型转换格式写错。应该是m=(int)(-3.2)83. 设已定义 float a=2.0,b=3.0; 使a值为5.0的表达式是( A )。A. a+= bB. a*=b+2.0 C. a/=b+2.0D. a-=b+2.0A a+=b等价于a=a+b 所以a=a+b=2+3=5因为加法
21、运算符+优先级高于复合赋值运算符*=,/=.-=所以B .a*=b+2.0等价于a*=(b+2.0) 所以a=a*(b+2)=2*(3+2)=10C. a/=b+2.0等价于a/=(b+2.0) 所以a=a/(b+2)=2/(3+2)=0.4D. a-=b+2.0等价于a-=(b+2.0) 所以a=a-(b+2)=2-(3+2)=384. 若已定义 int m=7;float k=5.5; 则表达式 k+ m%2/4 的值为( D )。A. 6.375B. 6.75 C. 5.75D. 5.5/ 和%优先级相同,结合方向从左到右,且高于+,所以k+ m%2/4等价于k+ (m%2)/4)=5.
22、5+(7%2)/4)=5.5+1/4=5.5+0=5.585. 若已定义 int a=3,b=3,x=1,y=2; 表达式 (a=yx)&(x=ba) 的值是( B )。A. 6B. 1 C. 9D. 0优先级高于=,所以(a=yx)&(x=ba)等价于(a=(yx)&(x=(ba)=(a=1)&(x=(31)= (a=1)&(x=1)=186. 若有定义:int a=2,b=3; float x=5; 则表达式x*b/a的值是( B )。A. 7.5B. 7 C. 6D. 5这题标准答案B有错,应该选A*和/优先级相同,结合方向从左到右,所以x*b/a等价于(x*b)/a又根据不同数据类型混
23、合运算中的类型转换规则(课本P44)(x*b)/a的值为7.587. 若有定义:int x=8; float y=130;char z=A; 则表达式x+z%(int)y的值是( C )。已知A的ASCII码的十进制值为65A. 运行时产生错误信息 B. 8 C. 73 D. 8.5x+z%(int)y等价于x+(z%(int)y)=8+65%130=8+65=7388. 若已定义:int m=7,n=4; float x=3.0,y=8.0,k; 则执行语句k=m/2+n*x/y;后,变量k的值是( C )。A. 3B. 4 C. 4.5 D. 5k=m/2+n*x/y=7/2+12.0/8
24、.0=3+1.5=4.5,所以答案选C乘法运算*和除法运算/ 优先级别相同. 左结合性注意 a/b 当a,b都是整型数据时,进行整除运算 例如 1/4=01.0/4=0.25 1/4.0=0.2589. 若有定义:float x=2,y=4,h=3; 下列表达式中与(x+y)*h/2.0计算结果不相符的是( C )。A. (x+y)*h/2B. (x+y)*h*1/2 C. (1/2)*(x+y)*hD. h/2*(x+y) (x+y)*h/2.0 =(2+4)*3/2.0=9A 因为 x,y,h是double 型,所以(x+y)*h也是double型的,所以 (x+y)*h/2 =9C (1
25、/2)*(x+y)*h=0*(x+y)*h=0 ,所以答案选CD 因为h是double 型,所以h/2*(x+y)=1.5*6=990. 表达式2+sqrt(16.0)/4结果的数据类型是( A )。A. DoubleB. int C. charD. Void2+sqrt(16.0)/4doubledoubledoubledouble这题是考不同数据类型数据的混合运算(见课本P44-45,例3.10)91. 若有定义:int a=4,b=5,c=6; 则表达式 (1.0*a+b)/c的值是( A )。A. 1.5B. 1 C. 4D. 4.5这个是考不同数据类型数据的混合运算(见课本P44-45,例3.10)1.0 是double类型的数据 a ,b,c都是int类型数据按照课本P45图3-5的转换规则,系统会自动将a,b,c转换为double类型,然后再参与运算 (注:专业文档是经验性极强的领域,无法思考和涵盖全面,素材和资料部分来自网络,供参考。可复制、编制,期待你的好评与关注)