A) 第4行 B) 第5行 C) 第6行 D) 第7行 参考答案:A
【解析】第4行逗号表达式中间的第二个表达式为空,是不合法的,可以去掉写成a+=b,b+=a,也可以在里面补一个表达式,如a+=b,a,b+=a?所以选择A选项?
28、若有以下程序
#include
{ int a=0,b=0,c=0 c= (a+=++b, b+=4);
printf(\}
则程序的输出结果是 A) 1,5,1 B) 1,5,5 C) -1,4,4 D) -1,4,-1 参考答案:B
【解析】逗号运算符的结合性从左到右,因此逗号表达式将从左到右进行计算?且逗号运算符的优先级最低?先计算a+=++b,结果a为1,b为1,然后计算b+=4,b的值为5?逗号表达式的值为其中最后一个表达式的值,所以将5赋给变量c,即a为1,b为5,c为5?所以选择B?
29、有以下程序
#include
int b=0;
static int c=3; a =( c++,b++); return ( a ); }
main() {
int a = 2, i, k;
for( i=0; i<2; i++ ) k = fun(a++); printf( \}
程序的输出结果是 A) 4 B) 0 C) 1 D) 2
参考答案:B
【解析】题目中fun函数被执行了两次,两次执行后,都是返回了函数内部的b值,所以答案为0,即B选项正确。
30、设有定义:int x=11,y=12,z=0;,以下表达式值不等于12的是 A) (z,x,y) B) (z=x,y) C) z=(x,y) D) z=(x==y) 参考答案:D
【解析】逗号表达式的计算过程是从左到右逐个求每个表达式的值,取最右边一个表达式的值作为该逗号表达式的值。赋值运算结合性为由右向左结合,赋值运算符左值为变量,右值为变量或常量,且左右两边数据类型相同才能实现赋值。成功实现赋值后以左值为返回值。逻辑表达式成立则返回1,不成立返回0。A选项逻辑表达式x==y不成立,则z=0,表达式值为0。B选项中逗号表达式x,y取y值为表达式值,然后赋值给z=12,表达式值为12。C选项逗号表达式(x,y)取y值为表达式值,然后赋值给z=12,表达式值为12。D选项逗号表达式(z,x,y)取y值为表达式值12。选择D选项。
31、有以下程序:
#include
{ int x, y, z; x=y=1;
z=x++,y++,++y;
printf(\,%d,%d\\n\,x,y,z); }
程序运行后的输出结果是( )。 A) 2,3,3 B) 2,3,2 C) 2,3,1 D) 2,2,1 参考答案:C
【解析】z=x++,y++,++y;因为赋值运算符的优先级高于逗号运算符的优先级,所以可以将上式表示成(z=x++),(y++),(++y)。然后从左向右先计算表达式z=x++,因为x++先使用后自增,所以z的值为1,x的值为2。再计算逗号表达式第二个表达式y++,此时y的值为2,最后计算第三个表达式++y,y的值为3。
32、设有定义:
int a=1,b=2,c=3;
以下语句中执行效果与其它三个不同的是 A) if(a>b) c=a,a=b,b=c; B) if(a>b) {c=a,a=b,b=c;} C) if(a>b) c=a;a=b;b=c; D) if(a>b) {c=a;a=b;b=c;} 参考答案:C
【解析】由于a不小于b ,所以所有选项中的条件都为假,A选项中实际执行了a=b;b=c;两个操作?而B,C,D选项由于条件不成立,所以什么也没有做,所以选择C选项?
33、以下程序段中的变量已定义为int类型
sum = pad = 5; pAd = sum++, pAd++, ++pAd; printf( \程序段的输出结果是 A) 6 B) 4 C) 5 D) 7
参考答案:C
【解析】自增和自减运算符的两种用法:前置运算,运算符放在变量之前,规则是先使变量的值增(或减)1,然后以变化后表达式的值参与其他运算:后置运算,运算符放在变量之后,规则是变量先参与其他运算,然后再使变量的值增(或减)1。逗号表达式的计算过程是从左到右逐个求每个表达式的值,取最右边一个表达式的值作为该逗号表达式的值。逗号运算符的优先级低于赋值运算符。程序执行过程为:sum=5,pad=5;pAd=5,sum=6,pAd=6, pAd=7。输出pad=5,C选项正确。
34、若有定义语句:
int x=12, y=8, z; 在其后执行语句 z= 0.9+x/y; 则z的值为 A) 1 B) 1.9 C) 2 D) 2.4
参考答案:A
【解析】先计算x/y,结果为1,然后计算0.9+1,结果为1.9,但由于变量z为整型,所以取值1,所以z的值为1?
35、表达式3.6-5/2+1.2+5%2的值是 A) 4.3 B) 4.8 C) 3.3 D) 3.8
参考答案:D
【解析】计算5/2,结果取整数值2。计算3.6-2,结果与高精度数据保持一致,即为1.6。计算1.6+1.2,结果为2.8。计算5%2,结果为1。计算2.8+1结果为3.8。所以选择D选项?
36、有以下定义: 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 参考答案:B
【解析】C语言中没有\运算符,所以A选项错误?\运算符的两个操作值必须为整型数据,所以B选项正确?a*y的结果为double型,所以C选项错误?不能将值赋给像x+y这样的表达式,所以D选项错误?
37、若有定义:int a=0,b=0,c=0,d=0;,以下关于C语言表达式:(++a || ++b) ? ++c : ++d 执行顺序的叙述正确的是 A) 先执行++a,表达式++a的值为1;再执行++b,表达式++b的值为1,由此可确定(++a || ++b)值为1,因此执行++c B) 先执行++a,表达式++a的值为1,由此可确定(++a || ++b)值为1,因此执行++c
C) 先执行++b,表达式++b的值为1;再执行++a,表达式++a的值为1,由此可确定(++a || ++b)值为1,因此执行++c D) 先执行++b,表达式++b的值为1,由此可确定(++a || ++b)值为1,因此执行++c 参考答案:B
【解析】表达式1?表达式2:表达式3,若表达式1为真,则执行表达式2,否则执行表达式3,++a表示先将变量a+1,再执行其他操作,逻辑或运算符遵循\短路求值\策略,即只有在仅靠左操作数的值无法确定该逻辑表达式的结果时,才会求解右操作数,表达式(++a || ++b)中,左操作数++a的值为1,已经可以确定整个逻辑表达式的结果为1,因此右操作数++b不再求解,直接执行表达式2,即++c,答案为B选项。
38、有如下程序
#include
int a = 9, b;
b = (a >> 3) % 4;
printf(\}
程序运行后的输出结果是 A) 9,1 B) 4,0 C) 4,3 D) 9,3
参考答案:A
【解析】首先,程序执行完成后,a值不变始终为9, a转化成2进制数后逻辑即1001>>3=>0001右移三位得到值为1, 1再对4求余得到余数1赋给b值,答案为A选项。
39、若有定义:int a=0,b=0,c=0,d=0; ,有C语言表达式 (a++ && b++) ? c++ : d++,以下关于其执行顺序的叙述正确是 A) 先执行a++,表达式a++的值为0,由此即可确定(a++&&b++)的值为0,因此执行d++
B) 先执行a++,表达式a++的值为0;再执行b++,表达式b++的值为0,由此可确定(a++ && b++)值为0,因此执行d++ C) 先执行a++,表确定(a++ && b++)值为1,因此执行c++达式a++的值为1;再执行b++,表达式b++的值为1,由此可 D) 先执行b++,表达式b++的值为1;再执行a++,表达式a++的值为1,由此可确定(a++ && b++)值为1,因此执行c++ 参考答案:A
【解析】表达式1?表达式2:表达式3,若表达式1为真,则执行表达式2,否则执行表达式3。逻辑与运算符遵循\短路求值\策略,即只有在仅靠左操作数的值无法确定该逻辑表达式的结果时,才会求解右操作数,表达式(a++&&b++)中,左操作数a++的值为0,已经可以确定整个逻辑表达式的结果为0,因此右操作数b++不再求解,直接执行表达式3,即d++,答案为A选项
40、有以下程序
#include
{ int c,d;
c = (13>>1)|1; d = (13>1)||1;
printf(\}
程序运行后的输出结果是 A) 6,1 B) 1,1 C) 7,1 D) 7,2
参考答案:C
【解析】表达式c = (13>>1)|1中,>>是右移符号,13换算成二进制后右移1位,再和1进行按位或运算,结果为7;表达式d = (13>1)||1中,首先判断13是否大于1,此时条件成立返回1后,再和1进行或运算,结果为1,因此答案为C选项。
41、以下选项中,当x为大于1的奇数时,值为0的表达式是 A) x%2==0 B) x/2 C) x%2!=0
D) x%2==1 参考答案:A
【解析】算术运算符的优先级高于关系运算符的优先级,所以当x为大于1的奇数时,A选项的值为假,即0?B选项的值为不定值,但绝对不是0?C选项的值为真,即1?D选项的值为真,即1?
42、以下叙述中正确的是
A) 在C语言中,逻辑真值和假值分别对应1和0
B) 关系运算符两边的运算对象可以是C语言中任意合法的表达式 C) 对于浮点变量x和y,表达式:x==y 是非法的,会出编译错误 D) 分支结构是根据算术表达式的结果来判断流程走向的 参考答案:B
【解析】A选项中,在C语言中,逻辑真值对应非0; C选项中,表达式:x==y 是合法的;D选项中,分支结构的流程走向是根据表达式的值,并不仅仅是算数表达式的值。因此B选项正确。
43、设变量已正确定义并赋值,以下正确的表达式是( )。 A) x=y+z+5,++y B) int(15.8%5) C) x=y*5=x+z D) x=25%5.0 参考答案:A
【解析】B)与D)选项中取模运算符%的左右两个操作数均应为整数,所以B)、D)错误。C)选项中不能将x+y的值赋给表达式y*5,所以C)错误。
44、C语言程序中,运算对象必须是整型数的运算符是 A) && B) / C) % D) *
参考答案:C
【解析】%取余运算是二目运算符,且要求运算对象必须为整数,所以选C?
45、设有以下程序段 int y;
y=rand() % 30+1; 则变量y的取值范围是 A) 0≤y≤30 B) 0<y≤30 C) 1<y<30 D) 1<y≤30 参考答案:B
【解析】本题考点为\求余符号。rand()产生随机整数,任何整数对30求余得到的整数范围为0~29,则y的取值范围为1≤y≤30或者说0<y≤30,B选项正确。
46、设变量m为float类型,变量n为int类型,则以下能实现将m中的数值保留小数点后两位,第三位进行四舍五入运算的表达式是 A) m=(m*100+0.5)/100.0 B) n=m*100+0.5, m=n/100.0 C) n=m/100+0.5, m=n*100.0 D) m=m*100+0.5/100.0 参考答案:B
【解析】n是整型数,将浮点数赋值给整型变量需要丢弃小数位,所以若要保留m的小数点后两位,需要将m乘以100,若要将m小数点后第三位四舍五入,再需要加上0.5,然后赋给整型变量,所以n=m*100+0.5,接下来需要将m还原成有两位小数的浮点数,除号两边操作数有一个是浮点数时,结果为浮点数,将n/100.0赋值给m,得到m的值含两位小数,故答案为B选项。
47、以下不能用于实型数据的运算符是 A) % B) / C) * D) +
参考答案:A
【解析】\符号两边必须是整数,因此答案选A。
48、若有定义:double a=22;int i=0,k=18;,则不符合C语言规定的赋值语句是( ) A) i=(a+k)<=(i+k); B) i=a;
C) a=a++,i++ D) i=!a; 参考答案:B
【解析】取模运算符\,二元运算符,具有左结合性,参与运算的量均为整型。选项 B中的a变量是double实型,所以B)不符合规定。
49、以下函数实现按每行8个输出w所指数组中的数据 #include
void fun( int *w, int n) { int i;
for(i=0;i printf(\ } printf(\ } 在横线处应填入的语句是 A) if( i/8==0 ) printf(\B) if( i/8==0 ) continue; C) if( i%8==0 ) printf(\D) if( i%8==0 ) continue; 参考答案:C 【解析】要按照每行8个输出数据的话,横线处语句的功能应该为:当i是8的倍数时( i%8==0 ),输出一个换行符。因此C选项正确。 50、若有以下程序 #include { printf(\ else printf(\ } main() { int z = 123456; f(z); } 则程序的输出结果是 A) 6-5-4-3-2-1- B) 6-5-4-3-2-1 C) 1-2-3-4-5-6 D) 1-2-3-4-5-6- 参考答案:B 【解析】本题重点考察函数的递归调用,程序首先初始化整型变量z为123456,调用函数f。f函数中首先通过if条件语句判断x是否大于等于10,如果条件成立,求x除以10的余数并输出,同时将变量x进行x/10运算,同时调用函数f。如果条件不成立,直接输出变量x。因此第1次调用函数,变量x为123456,条件成立,输出余数6;第2次调用函数,变量x为12345,条件成立,输出余数5;第3次调用函数,变量x为1234,条件成立,输出余数4;第4次调用函数,变量x为123,条件成立,输出余数3;第5次调用函数,变量x为12,条件成立,输出余数2;第6次调用函数,变量x为12345,条件不成立,输出1。因此B选项正确。 百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说教育文库第2章 运算符与表达式(2)在线全文阅读。
相关推荐: