《笔试(02)表达式与运算符》由会员分享,可在线阅读,更多相关《笔试(02)表达式与运算符(14页珍藏版)》请在金锄头文库上搜索。
1、一. 表达式与运算符 3题号题目 答案 解析1 若x是int型变量,且有下面的程序片段for(x=3;xfunc(int a, int b)int c;c=a+b;return c;main( ) int x=6,y=7,z=8,r;r=func(x-,y+,x+y),z-);printf(%dn, r);上面程序的输出结果是_。A、11B、20C、21D、31本题的考查点是自增、自减运算。函数func()的作用是返回两个形参的和,第一个形参是x、y分别自减和自增后的和,为13,而第二个形参的值为8(根据语法规则,应当先使用,后自增),所以func()的返回值为13+8=21。故本题答案为C。
2、3 以下程序段中与语句k=ab?(bc?1:0):0;功能等价的是_。A、if(ab)&(bc)k=1;else k=0;B、if(ab)|(bc)k=1;else k=0;C、if(ab成 else if(bb) k=1;else if(bc) k=1;else k=0;立则执行(bc?1:0),如果bc成立则结果为1,其它情况则为0。也就是说只有ab与bc同时成立时k值才能为1。故本题答案为A。3 若以下选项中的变量已正确定义,则正确的赋值语句是_。A、x1=26.8%3;B、1+2=x2;C、x3=0x12;D、x4=1+2=3;正确的赋值语句中的左值不能为常量或表达式,右值不能为变量或
3、表达式。选项A中右值为表达式,明显是错误的;选项B中,左值为表达式,明显是不对的。选项D中,表达式x4=1+2=3,是先执行赋值表达式1+2=3,这本身就是错误的,1+2不是变量,不能赋值。故本题答案为C。3 设有定义:float a=2,b=4,h=3;,以下C语言表达式中与代数式1/2(a+b)h计算结果不相符的是_。A、(a+b)*h/2B、(1/2)*(a+b)*hC、(a+b)*h*1/2D、h/2*(a+b)两个整数相除结果为整数,如5/3的结果为1,舍去小数部分。如果参加运算的两个数中有一个数为实数,则结果是double型,因为所有实数都按double型进行运算。根据运算符优先级
4、,先计算括号内的,故选项B中(1/2)=0,整个表达式的值为0。故本题答案为B。3 有以下程序:main() int x=0,y=5,z=3;while(z0printf(%d,%d,%dn,x,y,z);程序执行后的输出结果是_。A、3,2,0B、3,2,-1C、4,3,-1D、5,-2,-5当x=0,y=5,z=3时,z0&+x1);printf(%d %d %dn,a,b,c);10 20 022 下列关于单目运算符+、-的叙述中正确的是_。A、它们的运算对象可以是任何变量和常量B、它们的运算对象可以是char型变量和int型变量,但不能是float型变量C、它们的运算对象可以是int型
5、变量,但不能是double型变量和float型变量D、它们的运算对象可以是char型变量、int型变量和float型变量本题的考查点是自增、自减运算符。自增、自减运算符的作用是使变量的值增1或减1,只能用于变量,包括char型变量、int型变量和float型变量,而不能用于常量或表达式。故本题答案为D。22 有以下程序main() int a=5,b=4,c=3,d=2;if(abc)printf(%dn,d);else if(c-1=d)=1)printf(%dn,d+1);else printf(%dn,d+2);执行后输出的结果是_。A、2B、3C、4D、编译时有错,无结果本题的考查点是
6、关系表达式和逻辑表达式。关系表达式用来进行两个数据的比较,比较的结果为逻辑真或逻辑假。C语言不提供逻辑型数据,而是用整数0表示逻辑假,即比较不成立;用整数1表示逻辑真,即比较成立。和关系表达式一样,逻辑表达式的值也是用整数1表示逻辑真,用整数0表示逻辑假。本题中abc即相当于(ab)c,因为ab成立,所以其值为1,然后比较1与c的大小,1c不成立,所以不执行printf语句,然后判断(c-1=d)=1成立,此时执行printf语句,打印d+1=3。故本题答案为B。22 有以下程序 A、9,2 本题的考查点是自增、自减运算。main() int i=10,j=1;printf(%d,%dn,i-
7、,+j);执行后输出的结果是_。B、10,2C、9,1D、10,1作用是使变量的值增1或减1,如:+i,-i (在使用i之前,先使i的值加(减)1)i+,i- (在使用i之后,使i的值加(减)1)故本题答案为B。22 若有语句int i=-19,j=i%4;printf(%dn,j);则输出的结果是_。-3 本题的考查点是求模运算。算术运算符中,%只能对整型运算量施加运算。在计算两个整数的余数时,余数的符号与被除数相同。例如,3%(-2)=1,-3%2=-1,3%2=1,-3%(-2)=-1。故本题答案为:-3。4 有以下程序main() char a=a,b;printf(%c,+a);pr
8、intf(%cn,b=a+);程序运行后的输出结果是_。A、b,bB、b,cC、a,bD、a,c本题考查的是+运算符。+在变量前和变量后的唯一区别就在于在执行“ +变量 ”所在的语句时,是先将变量加了再执行它所在语句还是先执行它所在的语句再使变量加1,当+在变量后时,也就是“变量+” ,那就是先将变量值代入表达式运算后再使变量加1;而“+变量”是先使变量加1,再把加 1后的结果放入表达式进行运算。这两种情况,在执行完变量所在的语句后,它们在内存中的值都是加过1之后的值了。所以本题中printf(%c,+a)先将a加,再执行此条语句,输出b,而printf(%cn,b=a+)是先输出刚才a的值(
9、刚才的a+表示a=a+1,所以是b),然后再加。所以答案为A。4 27. 有以下程序main() unsigned int a;int b=-1;a=b;printf(%u,a);程序运行后的输出结果是_。A、-1B、65535C、32767D、-32768本题考的是不同类型数据间的混合运算。当运算对象为不同类型时,数据的转换方向为intunsignedlongdouble,本题程序中的变量b为int型,先要转换为unsigned型,int型变量的数值范围为-3276832767,最高位为符号位,而unsigned所表示的数的范围为0-65535,它的最高位为数值位。由于内存中是以补码形式存储
10、数据的,所以整型的“-1” 在内存中的表示为 16个1,最高位的“1”表示符号负,将它转换为unsigned类型,即将原符号位表示符号的“ 1”看成数值,所以就得到16个数值位1,即65535。故本题答案为B。4 若x和y代表整型数,以下表达式中不能正确表示数学关系|x-y|-10&x-y10D、(x-y)*(x-y)=-10,!(y-x)10相当于(x-y)=-10。故选项C相当于(x-y)=-10,所以错误。故本题答案为C。7 以下叙述中错误的是_。 C 程序中的#include 和#define 行均不是 C 语句本题考查的是C语言运算符。%是求余运算符,其两侧的数值只能为整除逗号运算符
11、外,赋值运算符的优先级最低C 程序中,j+;是赋值语句C 程序中,+、-、*、%号是算术运算符,可用于整形和实型的运算型,所以它不能用于实型的运算。故本题答案为D。10 若变量均已正确定义并赋值,以下合法的C语言赋值语句是_。A、x=y=5;B、x=n%2.5;C、x+n=i;D、x=5=4+1;本题的考查点是C语言赋值语句。赋值语句是由赋值表达式再加上分号构成的表达式语句。其一般形式为:变量=表达式;由于在赋值符=右边的表达式也可以又是一个赋值表达式,因此,形式变量=(变量=表达式);是成立的,从而形成嵌套的情形,故选项A是正确的;选项D看上去是嵌套形式,而实际上,并非是一个正确的赋值表达式
12、,因为赋值表达式=的左边只能是变量,不能为常量或表达式,所以4+1的值不能赋值给常量5,所以选项D错误,选项C也是错误的;由于求余运算符%的两侧必须为整型数据,所以选项B错误。故本题答案为A。10 设有条件表达式:(EXP)?i+:j-,则以下表达式中与(EXP)完全等价的是_。A、(EXP=0)B、(EXP!=0)C、(EXP=1)D、(EXP!=1)本题的考查点是C语言条件运算。条件运算符有三个操作数。它的形式是:(EXP)?exp1:exp2。如果EXP的值为非零,那么整个表达式的值就是表达式exp1的值,如果EXP的值为零,那么整个表达式的值就是exp2的值。选项B的功能是判断EXP的
13、值的是否不为0,如果不为0,则(EXP!=0)的值为真;否则,(EXP!=0)的值为假,与题面的条件表达式意思一致。故本题答案为B。10 以下程序的功能是:输出a、b、c三个变量中的最小值,请填空。#include main() int a,b,c,t1,t2;scanf(%d%d%d,t1=a=2c=2&c=2&c=2&c=A&chb) a=b, b=c; c=a;printf (a=%d b=%d c=%dn,a,b,c);程序的输出结果是_。A:a=10 b=50 c=10B:a=10 b=50 c=30C:a=10 b=30 c=10D:a=50 b=30 c=50本题的考查点是条件语
14、句。本题if条件表达式ab的值为0,所以不执行其后的if语句a=b, b=c;,直接执行下一条语句c=a;,故c变量的值为10,所以输出结果为a=10 b=50 c=10。故本题答案为A。13 以下不能正确表示代数式 的C语言表达式是_。A:2*a*b/c/dB:a*b/c/d*2C:a/c/d*b*2D:2*a*b/c*d本题考查的是算术运算符的优先级。算术运算符包括:+(加法运算符,或正值运算符)、-(减法运算符,或负值运算符)、*(乘法运算符)、/(除法运算符)、%(模运算符,或称求余运算符),其中*、/两运算符的优先级相同,所以选项D错误,它表示的是2abd/c,而不是2ab/(cd)
15、。故本题答案为D。13 执行以下程序段后,w的值为_。int w=A,x=14,y=15;w=(x|y)A:-1B:NULLC:1D:0本题的考查点是括号与逻辑运算符的混合运算。当括号与逻辑运算符混合运算时,其运算优先级为先括号,后逻辑运算符。另外注意&和|的短路运算。当运算符&左边表达式的值为0时,则右边表达式就不再进行运算,整个表达式的值即为0;当运算符|左边表达式的值为非零时,则右边表达式就不再进行运算,整个表达式的值为1。本题先运算表达式x|y,由于x=14、y=15均为非零,所以x|y=1。则对于与运算符&,还必须运算其右边的表达式wmain() int a=5,b=1,t;t=(amain() int a=1,b=2,c=3,d=0;if (a=1 & b+=2)if(b!=2|c-!=3)printf(%d,%d,%dn,a,b,c);else A、1,2,3B、1,3,2C、1,3,3 D、3,2,1本题主要考查的是自加、自减运算符以及逻辑运算符的应用。需要注意&和|的短路