所以解答是①。
22.下列表达式中,正确的C赋值表达式是
①a=7+b+c=a+7 ②a=7+b++=a+7 ③a=(7+b,b++,a+7) ④a=7+b,c=a+7
【解】赋值运算符是运算符之一,赋值运算也可以出现在表达式中。
赋值运算时,出现在赋值运算符左边的表达式应该是引用一个存储对象,例如变量。
不可以是一个数值计算表达式。
如表达式a=7+b+c=a+7因算术运算符比赋值运算符的优先级高,要把a+7的结果赋给7+b+c,这是错误的。
同样理由,表达式a=7+b++=a+7也是错误的。
而表达式a=(7+b,b++,a+7)就是正确的赋值表达式,它是先计算赋值号左边的括号表达式,括号表达式内是一个逗号表达式,逗号表达式要求顺序逐一计算各子表达式,并以最后一个子表达式的值作为逗号表达式的结果,最后将该结果赋给变量a。
而表达式a=7+b,c=a+7则不是一个赋值表达式,而是一个逗号表达式,它由两个赋值子表达式组成。
所以解答是③。
23.若有以下定义:
chara;intb;floatc;doubled;则表达式a*b+d-c值的类型为
①float ②int ③char ④double
【解】基本类型的数据可以混合运算,但运算时,对要求运算分量类型相同的运算来说,如运算分量的类型不是全相同,则会有自动类型转换发生。
类型自动转换规则规定类型低(简单)的向类型高(复杂)的转换。
各类型由高到低的排列顺序是:
longdouble、double、float、unsignedlong、long、unsignedint、int。
这样,若有定义:
chara;intb;floatc;doubled;则表达式a*b+d-c的值的类型是double的。
首先计算a*b,得到int类型的值,接着计算a*b+d,得到double类型的值,最后计算a*b+d-c,得到double类型的值。
所以解答是④。
24.表达式“9!
=7”的值是
① true ②非0值③0 ④1
【解】关系运算的结果只有0和1,若关系成立,则结果为1;若关系不成立,则结果为0。
因关系式9!
=7成立,所以表达式的结果为1。
虽然1也是非0值,在供选择的答案中有1,所以最确切的解答是④。
25.用十进制数表示表达式“12|012”的运算结果是
①1 ②0 ③14 ④16
【解】按位运算将运算分量视作二进位的位串信息,对两运算分量的对应位进行运算,产生二进位的位串信息结果。
整数12最低8位二进位是00001100,整数012是八进制数,它的最低8位二进位是00001010。
这两个二进位位串信息按位或运算,得到结果是00001110,对应十进制数14,八进制数是016。
所以解答是③。
26.设字符型变量a=3,b=6,计算表达式c=(a^b)<<2后c的二进制值是
①00011100 ②00000111 ③00000001 ④00010100
【解】a的值为3,写成8位二进制数形式是00000011,b的值为6,写成8位二进制数形式是00000110。
表达式c=(a^b)<<2,先计算a与b的按位加,得到结果00000101,将这结果向左移2位,得到二进位的位串信息是00010100。
所以解答是④。
27.设a,b和c都是int型变量,且a=3,b=4,c=5,则下面的表达式中值为0的是
①’a’&&’b’ ②a<=b ③a||b+c&&b-c ④!
((a
c||1)
【解】对于表达式’a’&&’b’,两个非0运算分量的逻辑与结果为1。
对于表达式a<=b,由于关系式成立,结果也为1。
又由于变量a为非0,表达式a||b+c&&b-c的结果也为1。
对于表达式!
((a
c||1),先是计算(a
c得到结果为0;再计算它们的逻辑与,结果为0。
继续与1求逻辑或,得到结果为1。
最后,对1求逻辑非,得到结果为0。
所以解答是④。
28.设ch是char型变量,其值为’A’,则下面表达式的值是
ch=(ch>=’A’&&ch<=’Z’)?
(ch-‘A’+’a’):
ch
①A ②a ③Z ④z
【解】由于字符型变量ch的值为’A’,计算表达式ch=(ch>=’A’&&ch<=’Z’)?
(ch+32):
ch,先计算其中条件表达式,由于条件(ch>=’A’&&ch<=’Z’)成立,该条件表达式以ch+32=97为结果,将该值赋给变量ch,以字符表达这个值为’a’。
所以解答是②。
29.设有无符号整型变量i、j、k,i值为013,j值为0x13。
计算表达式“k=~i|j>>3;”后,k的值是
①06 ②0177776 ③066 ④0177766
【解】将变量i的八进制数值013写成二进制形式为00001011,将变量j的十六进制值0x13写成二进制数形式为00010011。
表达式k=~i|j>>3的计算过程是先求~i,结果用八进制代码表示为0177764;接着计算j>>3,结果为02。
对它们进行按位或运算结果为0177766。
所以解答是④。
30.设a=3,b=4,执行“printf(“%d,%d”,(a,b),(b,a));”的输出是
①3,4 ②4,3 ③3,3 ④4,4
【解】在调用格式输出函数的语句中,其中每个格式符对应一个输出项,格式符d要求输出项内容以十进制整数形式输出。
语句中的第一个格式符对应输出项(a,b)是一个逗号表达式,该表达式的值是b的值,所以先输出4。
接着输出字符逗号。
同样输出项(b,a)的值是a的值,输出3。
所以语句执行将输出4,3。
正解的选择是②。
31.使用“scanf(“x=%f,y=%f”,&x,&y)”,要使x,y均为1.25,正确的输入是
① 1.25,1.25 ②1.25 1.25 ③x=1.25,y=1.25 ④x=1.25 y=1.25
【解】格式输入函数的格式字符串中的字符可以分成三类:
空格类字符、其它普通字符和格式转换说明。
其中空格类字符用来自动跳过空格类字符,直至下一个非空格类字符。
普通字符要求输入字符与其完全相同。
格式转换说明对输入字符列按格式转换说明进行转换,得到内部值存储到对应输入项所指定的存储位置中。
格式输入函数调用scanf(“x=%f,y=%f”,&x,&y)以普通字符x=开头,输入时也要先输入x=。
接着是一个浮点数输入格式,所有能构成一个浮点数1.25的字符序列都能满足要求。
接着是普通字符列“,y=”,在输入的浮点数之后也要有字符列“,y=”。
最后又是浮点数输入格式,同样所有能构成一个浮点数1.25的字符序列都能满足要求。
问题给出的供选择答案中只有x=1.25,y=1.25是正确的输入。
所以选择③。
通常,格式输入函数调用中,不在格式字符串插入普通字符,要求输入与格式中的普通字符匹配的字符,而是简洁地写上输入格式即可。
32.设a,b为字符型变量,执行“scanf(“a=%c,b=%c”,&a,&b)”后使a为’A’,b为’B’,从键盘上的正确输入是
①‘A’’B’ ②‘A’,’B’ ③A=A,B=B ④a=A,b=B
【解】函数调用scanf(“a=%c,b=%c”,&a,&b)中,普通字符必须按格式字符串要求照原样输入,c格式对紧接的任何字符都输入。
所以实现问题的要求,输入字符列应为“a=A,b=B”。
另外要特别指出,在程序中,为表示字符常量,字符前后需加单引号。
但用字符格式输入字符时,在要输入字符前后不必另键入单引号。
若键入单引号,则这个单引号也将作为字符被输入。
正确的解答是④。
33.设有inti=010,j=10;则执行“printf(“%d,%d\n”,++i,j--);”的输出是
①11,10 ②9,10 ③010,9 ④10,9
【解】变量i和j的初值分别为八进制数010和十进制数10,格式输出函数调用printf(“%d,%d\n”,++i,j--)中,++i的值是变量i增1后的值,原来值是八进制数010,等于十进制数8,输出9。
j--的值是变量j减1之前的值,输出10。
格式字符串中的逗号是普通字符照原样输出。
所以问题给出的格式输出函数调用将输出9,10。
正确的解答是②
34.设有inti=010,j=10;则执行“printf(“%d,%d\n”,++i,j--);”的输出是
①11,10 ②9,10 ③010,9 ④10,9
【解】变量i和j的初值分别为八进制数010和十进制数10,格式输出函数调用printf(“%d,%d\n”,++i,j--)中,++i的值是变量i增1后的值,原来值是八进制数010,等于十进制数8,输出9。
j--的值是变量j减1之前的值,输出10。
格式字符串中的逗号是普通字符照原样输出。
所以问题给出的格式输出函数调用将输出9,10。
正确的解答是②。
35.设x、y、z、t均为int型变量,则执行以下语句后,t的值为
x=y=z=1;t=++x||++y&&++z;
①不定值 ②2 ③1 ④0
【解】语句序列“x=y=z=1;t=++x||++y&&++z;”使变量x的值为1,变量t是赋一个逻辑表达式的值。
在C语言中,由逻辑与和逻辑或构成的逻辑表达式有特别的计算规则,顺序计算各逻辑子表达式,并当一旦能得到逻辑表达式的结果时,就立即结束逻辑表达式的计算,不再计算后继逻辑子表达式。
本题的逻辑表达式是两个运算分量的逻辑或,而且左运算分量++x的值为非0,立即得到逻辑或运算的结果为1,并将1赋给变量t,所以变量t的值为1。
正确解答为③。
36.设x、y、z均为int型变量,则执行以下语句后,x、y、z的值为
x=1;y=0;z=2;y++&&++z||++x;
①2、1、3 ②2、0、3 ③2、1、3 ④2、1、2
【解】语句序列“x=1;y=0;z=2;y++&&++z||++x;”先使变量x的值为1,变量y的值为0,变量z的值为2。
由逻辑与和逻辑或构成的逻辑表达式的特别计算规则,顺序计算各逻辑子表达式,并当一旦能得到逻辑子表达式的结果时,就立即结束逻辑子表达式的计算,不再计算该逻辑子表达式。
计算y++因y的值为0,使y++&&++z的结果为0,立即去计算++x,这次计算使变量y的值变成1,而变量z的值未改变。
接着计算++x,使x的值变为2。
所以经上述语句执行后,x、y、z的值依次为2、1、2。
正确解答为④。
37.假定所有变量均已正确定义,下列程序段运行后x的值是
a=b=c=0;x=35;
if(!
a)x--;elseif(b);if(c)x=3;elsex=4;
①34 ②4 ③35 ④3
【解】以变量a,b,c的值均为0,变量x的值为35,语句:
if(!
a)x--;elseif(b);if(c)x=3;elsex=4;
由两个if语句组成。
首先执行前一个if语句“if(!
a)x--;elseif(b);”,因变量a的值为0,条件!
a成立,执行x--使x的值变为34。
接着执行后继的if语句“if(c)x=3;elsex=4;”,因变量c的值为0,条件不成立而执行x=4,最终使变量x的值为4。
正确解答是②。
注意前一个if语句的else部分的成分语句只有“if(b);”,这是一个单分支if语句,且其成分语句为空语句。
38.下面的程序段所表示