第二章1.以下合法的实型常量是A5E2.0BE-3C2E0D1.3E答案是C答案A中2.0有问题,不能为小数形式答案B中E前面不能为空答案D中E后面不能为空2.若变量x,y已正确定义并赋值,以下符合C语言语法的表达式是A++x,y=x--Bx+1=yCx=x+10=x+yDint(x)%10答案是AA答案是逗号表达式,B答案中x+1=y是赋值表达式,左边只能是变量,而这里是x=1,同理答案C中x+10也是错误的,在D答案中,考察的是强制类型转换,正确的是(double)x/103.设有定义intk=1,m=2;floatf=7;则以下选项中错误的表达式是Ak=k=kB-k++Ck%int(f)Dk=f=m答案是C考察的是强制类型转换,正确的是k%(int)f4.以下非法的赋值语句是An=(i=2,++i);Bj++;C++(i+1);Dx=j0;答案是C本题目考察的是课本第15页的关于自加与自减运算符的第一点说明,即增量运算符的运算对象只能是变量,而在C答案中++(i+1)中,i+1是表达式5.若有定义:inta=8,b=5,c;执行语句c=a/b+0.4;后,c的值为A1.4B1C2.0D2答案是Bc=a/b+0.4c=8/5+0.4c=1+0.4c=1.4因为c是int型的,所以n的值是1,做此题目需要仔细阅读题目第三章1.以下程序:main(){intm=0256,n=256;printf(%o%o\n,m,n);}运行后输出结果是A02560400B0256256C256400D400400答案是Cm=0256,即m是八进制的数0256,要以八进制无符号的形式输出,即输出256;n=256,即n是十进制的数256,也要以八进制无符号的形式输出,首先要把十进制数转化为八进制数,256转化为八进制为0400,以无符号形式输出,即输出400。2.以下程序:main(){inta;charc=10;floatf=100.0;doublex;a=f/=c*=(x=6.5);printf(%d%d%3.1f%3.1f\n,a,c,f,x);}运行后输出结果是A16516.5B1651.56.5C1651.06.5D2651.56.5答案是B表达式a=f/=c*=(x=6.5),按从右到左结合,先把6.5赋值给x,再执行c=c*6.5,c的值变为65,再执行f=f/65,为浮点数的除法,f的值为1.53……,再把f的值赋给a,a为整型数据,执行强制类型转换,a的值为1。a对应的输出格式为%d,即输出1;c对应的输出格式为%d,输出65,f对应的输出格式%3.1f,即输出控制宽度为3位,保留小数点后一位小数,即输出1.5,x对应的输出格式也为%3.1f,输出6.5。3.以下程序:main(){intk=2,i=2,m;m=(k+=i*=k);printf(%d,%d\n,m,i);}执行后输出结果是A8,6B8,3C6,4D7,4答案是Cm=(k+=i*=k);按从右到左结合,先执行i=i*k;即i被赋值为4,再执行k=k+4;k被赋值为6,最后把6赋给m,输出m和i的值。4.以下程序:main(){intm=3,n=4,x;x=-m++;x=x+8/++n;printf(%d\n,x);}运行结果是A3B5C-1D-2答案是D-m++遵循从右向左结合的原则;m++的值为m自增之前的值,所以执行完x=-m++以后,x被赋值为-3;表达式x=x+8/++n中有加号除号,先算8/++n,++n的值为自增之后的值为5,8/5取整为1,即x=x+8/++n转化为x=x+1,即把x+1的值赋给x,x的值变为-2。5.以下程序:main(){intm,n,p;scanf(m=%dn=%dp=%d,&m,&n,&p);printf(%d%d%d\n,m,n,p);}若想从键盘上输入数据,让变量m中的值为123,n的值为456,p中的值为789,则正确的输入是Am=123n=456p=789Bm=123n=456p=789Cm=123,n=456,p=789D123456789答案是A从键盘输入数据的格式必须与输入控制要求的格式一样B答案三个之间不要有空格;C答案用逗号分开是多余的;D答案格式不匹配。6.以下输出的结果为main(){intm=2,n=3;printf(m=%%d,n=%%d,m,n);}Am=2,n=3Bm=%2,n=%3Cm=%%d,n=%%dDm=%d,n=%d答案是D“%%”会输出一个“%”,“d”会照原样输出,因为没有格式说明,m,n无法输出到屏幕。7.在以下给出的表达式中,与if(E)中的(E)不等价的表达式是A(!E==0)B(E0||E0)C(E==0)D(E!=0)C此题主要是考真假条件的等价。题目中的E为非0时条件为真,为0事为假。那么把非0和0带到选项中可知,C项正好是E为0时表达式为真,非0时为假,所以选C8.已有定义,intx=3,y=4,z=5;,则表达式!(x+y)+z-1&&y+z/2的值是A6B0C2D1D此题主要是考逻辑运算和关系运算的优先级别.只要掌握!、算术运算和&&的优先级别便可选对.9.以下程序的输出结果是main(){inta=4,b=5,c=0,d;d=!a&&!b||!c;printf(%d\n,d);}A1B0C非0的数D-1A此题主要是考逻辑运算符!、&&和||之间的优先级别。!最高,&&次之,||最低。先求得!a为0,所以不必计算!b的值,即!a&&!b的值为0,由c=0,!c=1,而0||1=1,所以选D10.设有定义inta=2,b=3,c=4;则以下选项中值为0的表达式是A(!a==1)&&(!b==0)B(ab)&&!c||1Ca&&bDa||(b+b)&&(c-a)A此题主要是考了逻辑、关系和算术运算,熟练掌握逻辑运算、关系运算和算术运算的优先级别后,就不难了。A选项中!a为0,所以!a==1为假,那么就不用计算&&后面的表达式了,因为0与任何数均为假;B项中先计算出ab为假,则(ab)&&!c也为假,而0||1=1;C项中a和b均为真,所以a&&b的值为1;D项中先计算出(b+b)&&(c-a)=1,又a=2,2||1=1所以选A。11.当把以下四个表达式用作if语句的控制表达式时,有一个选项与其他三个选项含义不同的是Ak%2Bk%2==1C(k%2)!=0D!k%2==1考真假条件的转换,其中D项中只有k为0时,!k%2==1才成立,显然和A、B、C三项不同。12.以下程序main(){inta=0,b=0,c=0,d=0;if(a=1)b=1;c=2;elsed=3;printf(%d,%d,%d,%d\n,a,b,c,d);}程序输出结果为A0,1,2,0B0,0,0,3C1,1,2,0D编译有错D此题主要是考if和else的一般形式。if后面的语句要么是单条语句,要么是由{}扩起来的复合语句,不能是if后有两条语句的,所以本题程序在运行的时候会出错。13.下列条件语句中,功能与其他语句不同的是Aif(a)printf(%d\n,x)elseprintf(%d\n,y);Bif(a==0)printf(%d\n,y)elseprintf(%d\n,x);Cif(a!=0)printf(%d\n,x)elseprintf(%d\n,y);Dif(a==0)printf(%d\n,x)elseprintf(%d\n,y);D此题也是考到了真假条件的变换和if-else语句。A、B、C三项都是表示a为真时输出x,为假时输出y,而D则是a为假时输出x,为真时输出y。14.以下程序:main(){inta=1,b=2,m=0,n=0,k;k=(n=ba)||(m=ab);printf(%d,%d\n,k,m);}程序运行后的输出结果是A0,0B0,1C1,0D1,1C此题主要是考查逻辑运算符||,当计算机碰到a||b,先计算表达式a的值,若为假才会计算表达式b的值,否则将不会去计算b的值,因为一旦a=1,则0||b必为0。题中ba为真,所以(n=ba)为1,那么将不会去计算m=ab的值,k被并赋值1,所以m依然为0