第2章数据类型和运算符习题及解答一.选择题。1.下列是用户自定义标识符的是A)_w1B)3_xyC)intD)LINE-3答案:A解析:C语言规定用户标识符由英文字母、数字和下划线组成,且第一个字符必须是字母或下划线,由此可见选项B),D)是错的;此外,C语言不允许用户将关键字作为标识符,而选项C)选项项中的int是C语言的关键字。2.C语言中最简单的数据类型包括A)整型、实型、逻辑型B)整型、实型、字符型C)整型、字符型、逻辑型D)字符型、实型、逻辑型答案:B解析:本题考查C语言的数据类型。在C语言中,没有专门的逻辑型数据类型,可以用0和1来表示逻辑值。所以,在本题的选择答案中,不应该包括逻辑型。3.下列符号常量定义中正确的是()。A.#definePI3.14B.#definePI3.14;C.definePI3.14D.definePI3.14;答案:A解析:用#define命令行定义PI代表常量,对此程序进行编译时,预处理首先将出现PI的地方用3.14字符串替换。符号常量定义是宏命令,define前必须加#号;如果3.14后加了“;”号,替换时PI会被“3.14;”字符串替换,3.14是常量,但“3.14;”就不是常量了,故只有A正确。4.以下选项中不正确的实型常量是A)1.607E-1B)0.7204eC)-77.77D)234e-2答案:B解析:实型常量表示时字母E或e前必须有数字,其后数字必需为整数,故B错。5.若变量已正确定义并赋值,以下符合C语言语法的表达式是A)a:=b+1B)a=b=c+2C)int18.5%3D)a=a+7=c+b答案:B解析:选项A)中包含一个不合法的运算符“:=”;选项C)应改为(int)18.5%3;选项D)可理解为两个表达式:a+7=c+b和a=a+7,其中第一个是错的,因为C语言规定赋值号的左边只能是单个变量,不能是表达式或常量等。因此,正确答案是选项B),它实际上相当于a=(b=c+2),进而可分解为两个表达式:b=c+2和a=b。6.下列可用于C语言用户标识符的一组是A)void,define,WORDB)a3_b3,_123,CarC)For,-abc,IFCaseD)2a,DO,sizeof答案:B解析:C语言规定标识符只能由字母、数字和下划线三种字符组成,且第一个字符必须为字母或下划线,排除选项C)和D)。C语言中还规定标识符不能为C语言的关键字,而选项A)中void为关键字,故排除选项A)。7.C语言中运算对象必须是整型的运算符是A)%=B)/C)=D)=答案:A解析:C语言规定:取余运算符的运算对象必须是整型,复合运算符“%=”中包含%运算,它的运算对象也必须是整型。8.若变量a,i已正确定义,且i已正确赋值,合法的语句是A)a==1B)++i;C)a=a++=5;D)a=int(i);答案:B解析:选项A是一个表达式,因为缺少分号,所以不是语句;选项C)包含一个不合法的运算符“++=”;选项D)应改为a=(int)i;。9.设x,y和z都是int型变量,且x=3,y=4,z=5,则下面表达式中,值为0的表达式是A)x&&yB)x=yC)x||++y&&y-zD)!(xy&&!z||1)答案:D解析:该题考查逻辑与“&&”和逻辑或“||”以及逻辑非“!”符号的用法。选项A)即3&&4为真,选项B)即3=4为真,选项C)是一个逻辑或与逻辑与的混合运算,只要执行了逻辑或左半部分,程序将直接停止执行逻辑或右半部分程序,因为x的值为真,此时选项C)变为1&&-1为真。选项D)不用计算,括号内逻辑或右边的值为1,因而括号内的值为1,再进行逻辑非运算得0。10.有以下程序main(){inti=1,j=1,k=2;if((j++||k++)&&i++)printf(%d,%d,%d\n,i,j,k);}执行后输出结果是A)1,1,2B)2,2,1C)2,2,2D)2,2,3答案:C解析:该题目的关键是要搞清楚“&&”和“||”两个逻辑运算符的运算功能。运算符“&&”和“||”是双目运算符,要求有两个运算量。且规定逻辑与运算中,只有前面运算量的值为真时,才需要判别后面的值。只要前面为假,就不必判别后面的值。而逻辑或则为只要前为真,就不必判别后面的值;只有前为假,才判别后。本题中j++值为真,不进行k++的运算,所以k的值保持不变。11.设intx=1,y=1;表达式(!x||y--)的值是A)0B)1C)2D)-1答案:B解析:C语言规定的运算优先级由高到低分别是逻辑非、算术运算、逻辑或。所以先计算!x,值是0,然后再计算y--,由于是后缀运算符,所以y在本次运算中的值仍然是1,最后计算0||1,值为1。12.若有说明语句:charc='\72';则变量cA)包含1个字符B)包含2个字符C)包含3个字符D)说明不合法,c的值不确定答案:A解析:C语言的字符型常量中,允许用一种特殊形式的字符常量,就是以一个“\”开头的字符。其中“\ddd”表示用ASCII码(八进制数)表示一个字符,本题中的charc=′\72′即表示占一个字符的变量c的ASCII码值。13.在C语言中,退格符是A)\nB)\tC)\fD)\b答案:D解析:C语言的转义字符见下表所示。转义字符转义字符的意义\n回车换行\t横向跳到下一制表位置\v竖向跳格\b退格\r回车\f换页\\反斜线符“\”\’单引号符14.在C程序中,判逻辑值时,用“非0”表示逻辑值“真”,又用“0”表示逻辑值“假”。在求逻辑值时,用()表示逻辑表达式值为“真”,又用()表示逻辑表达式值为“假”。A)10B)01C)非0非0D)11答案:A解析:在C程序中,判断逻辑值时,用非0表示真,用0表示假。逻辑表达式计算时,逻辑表达式值为真是用1表示的,若逻辑表达式的值为假,则用0表示。15.字符型数据在机器中是用ASCII码表示的,字符“5”和“7”在机器中表示为A)10100011和01110111B)01000101和01100011C)00110101和00110111D)01100101和01100111答案:C解析:为便于表示各种数据类型,机器中采用了BCD码(表示十进制数)、ASCII码(字符型)、汉字机内码等等各种码。数据采用了补码、原码和反码为表示形式。实型数据表示方法有浮点法和定点法等,考生需熟练掌握各种码的含义,并用之来计算、比较。需要提出的是,在机器内部,所有码都是由二进制编码而成的,它都是以二进制存储在机器之中的。字符“5”和“7”的ASCII的值分别为53和55,其二进制形式分别为00110101和00110111。16.若已定义:inta=25,b=14,c=19;以下三目运算符(?:)所构成语句的执行后a=25&&b--=2&&c?printf(***a=%d,b=%d,c=%d\n,a,b,c):printf(###a=%d,b=%d,c=%d\n,a,b,c);程序输出的结果是A)***a=25,b=13,c=19B)***a=26,b=14,c=19C)###a=25,b=13,c=19D)###a=26,b=14,c=19答案:C解析:此题综合考查多种运算符的使用;首先计算表达式a=25&&b--=2&&c的值,很容易看出b--=2的值为假,因此表达式为假;根据三目运算的特点,由于前面的表达式为假,应执行printf(“###a=%d,b=%d,c=%d\n”,a,b,c),应注意a的值依然为25,b的值经过b--运算后改变为13,而c的值仍为19。17.若有定义:inta=7;floatx=2.5,y=4.7;则表达式x+a%3*(int)(x+y)%2/4的值是A)2.500000B)2.750000C)3.500000D)0.000000答案:A解析:x+y的值为实型7.200000,经强制类型转化成整型7。a%3的值为1,1*7的值为7,7%2值为1。1/4的值为0,而非0.25,因而为两个整数相除的结果为整数,舍去小数部分。与实型x相加,最终得结果为2.500000。18.有如下程序段inta=14,b=15,x;charc=′A′;x=(a&&b)&&(c′B′);执行该程序段后,x的值为A)tureB)falseC)0D)1答案:D解析:在C语言中,逻辑运算符有4个,它们分别是:!(逻辑非)、||(逻辑或)、&&(逻辑与)、^(异或)。在位运算里面还有&(位与)、|(位或)的运算。本题考查逻辑与运算符的用法,在表达式x=(a&&b)&&(c′B′);中,先判断a&&b条件,逻辑与条件的两边都要保证为1,即a和b都成立,当然c′B′是成立的,显然,该表达式的值为1。19.在以下一组运算符中,优先级最高的运算符是A)=B)=C)%D)&&答案:C解析:关系运算符、逻辑与和算术运算符总算术运算符的优先级最高,故选C)。20.以下选项中,与k=n++完全等价的表达式是A)k=n,n=n+1B)n=n+1,k=nC)k=++nD)k+=n+1答案:A解析:k=n++的意思是先将n的值赋给k,然后n的值再加1,选项A)符合题意;选项C)是先使n的值加1,然后再赋值给k;选项D)等价于k=k+(n+1)。21.以下选项错误的是A)main()B)main(){intx,y,z;{intx,y,z;x=0;y=x-1;x=0,y=x+1;z=x+y;}z=x+y;}C)main()D)main(){intx;{intx,y,z;inty;x=0;y=x+1;x=0,y=x+1;z=x+y,}z=x+y;}答案:D解析:在选项A)中的语句没有一条是错误的。选项B)和C)中有一个逗号表达式,选项B)中是x=0,y=x+1;在选项C)中是y=x+1,z=x+y;所以B)和C)中也没有错误。选项D)中的最后一条语句是以逗号结束的,而C语言中不能用逗号作为一个语句的结束标志,每一条语句最后应该是分号,所以D)选项中的程序是错误的。22.以下4个选项中,不能看做一条语句的是A);B)a=5,b=2.5,c=3.6;C)if(a5);D)if(b!=5)x=2;y=6;答案:D解析:选项D)为两条语句。23.下列运算符中优先级最高的是________。A)B)+C)&&D)!=答案:B24.判断char型变量ch是否为大写字母的正确表达式是________。A)'A'=CH='Z'B)(CH='A')&(CH='Z')C)(CH='A')&&(CH='Z')D)('A'=ch)AND('Z'=ch)答案:C25.设inta=12,则执行完语句a+=a-=a*a后,a的值是________。A)552B)264C)144D)-264答案:D26.设a=5,b=6,c=7,d=8,m=2,n=2,执行(m=ab)&&(n=cb)后n的值为________。A)1B)2C)3D)4答案:B27.逻辑运算符两侧运算对象的数据类型________。A)只能是0或1B)只能是0或非0正数C)只能是整型或字符型数据D)可以是任何类型的数据答案:D28.正确表示当x的取值在[1,10]或[200,210]范围内为真,否则为假的表达式是________。A)(X=1)&&(X=10)&&(X=200)&&(X=210)B)(X=1)||(X=10)||(X=200)||(X=210)C)(X=1)&&(X=10)||(X=200)&&(X=210)D)(X=1)||(X=10)&&(X=200)||(X=210)答案:C29.设x,y和z是int型变量,且x=3,y=4,z=5,则下面表达式中值为0的是________。A)'x'&&'y'B)x=yC)x||y+z&&y-zD)!((xy)&&!z||1)答案:D30.已知x=43,ch='A',y=0;则表达式x=y&&ch'B'&&!y的值是________。A)0B)语法错C)1D)