习题二 数据类型及其运算
1.已定义c为字符型变量,则下列语句中正确的是______。
A、c='97' B、c="97"; C、c=97; D、c="a";
解析:本题的考查点是字符型变量。C语言中,字符型数据和整型数据之间可以通用。一个字符数据既可以以字符形式输出,也可以以整数形式输出。所以把整型数据赋给字符型变量,直接用c=97即可,所以选项C正确。
2.以下选项中可作为C语言合法整数的是______。
A、10110B B、0386 C、0Xffa D、x2a2
解析:本题的考查点是C语言中的整型常数。整型常数可以用十进制、八进制或十六进制表示,并分为有符号数、无符号数和长整数。由此可知选项A错;选项B,用0386表示八进制错误,因为八进制数为0-7八个数字,含有8是不对的;选项D,数字前加“0x”表示十六进制数,所以D也不对。故本题答案为C。
3. 以下选项中不能作为合法常量的是______。
A、1.234e04 B、1.234e0.4 C、1.234e+4 D、1.234e0
解析:本题考查的是常量表示法。本题选项中的几个常量都属于指数形式的实型常量。此种类型的常量要求字母e(或E)之前必需有数字,且e后面的指数必须为整数,所以本题中选项B非法。故本题答案为B。
4.与十进制数200等值的十六进制数为______。
A、A8 B、A4 C、C8 D、C4
解析:本题考查的是进制之间的转换。用十--十六进制转换法,除16,由下而上取余法。故本题答案为C。
5. 若有代数式(其中e仅代表自然对数的底数,不是变量),则以下能够正确表示该代数式的C语言表达式是______。
A、sqrt(abs(n^x+e^x)) B、sqrt(fabs(pow(n,x)+pow(x,e)))
C、sqrt(fabs(pow(n,x)+exp(x))) D、sqrt(fabs(pow(x,n)+exp(x)))
解析:本题考查的是基本函数应用。exp(x)函数功能是返回以自然数e为底,函数参数x为幂的指数值ex;pow(n,x)函数功能是返回n的x次幂值nx;fabs()函数功能是返回函数参数的绝对值;sqrt()用于返回函数参数的平方根。选项A中 n^x不是有效的C语言表达式,所以错误;选项B中pow(x,e)的功能是求xe的值,显然也不正确;选项D中的pow(x,n)存在和选项B相同的问题。选项C正确。故本题答案选C。
6. 以下合法的字符型常量是______。
A、'\x13' B、'\081' C、'65' D、"\n"
解析:本题考查的是字符常量。字符常量只能包含一个字符,因此选项C错误。字符常量只能用单引号括起来,不能用双引号括起来,因此选项D错误。转义字符常量是以一个反斜线开头后跟一个特定的字符,用来代表某个特定的ASCII字符,反斜线后直接跟数字表示八进制(八进制不用0开头),所以选项B错误。反斜线后用小写字母x开头来表示十六进制数。故本题答案选A。
7. 以下叙述中错误的是______。
A、可以通过typedef增加新的类型
B、可以用typedef将已存在的类型用新的名字来代表
C、用typedef定义新的类型名后,原有类型名仍有效
D、用typedef可以为各种类型起别名,但不能为变量起别名
解析:本题考查的是类型声明的概念。选项A错误,原因是typedef可以声明新的类型名来代替已有的类型名,但却不能增加新的类型。故本题答案为A。
8. 以下能正确定义且赋初值的语句是______。
A、int n1=n2=10; B、char c=32; C、float f=f+1.1; D、double x=12.3E2.5;
解析:本题考查的是变量初始化。语句"int n1=n2=10;"中,由于变量n2未定义,所以此赋值语句错误;由于赋值语句中不能存在运算表达式,所以选项C中的赋值语句错误;选
项D中指数表示错误,C语言规定,e后面的指数必须为整数;选项B中的"32"是ASCII码的表示形式,这是C语言中字符型数据和整型数据通用的表现。 故本题答案为B。
9. 以下不能正确计算代数式值的C语言表达式是______。
A、1/3*sin(1/2)*sin(1/2) B、sin(0.5)*sin(0.5)/3
C、pow(sin(0.5),2)/3 D、1/3.0*pow(sin(1.0/2),2)
解析:本题考查的是C语言表达式。如果算术运算符"/"中参与运算的变量都是整型变量,则"/"表示整除运算,所以"1/3"的值应为0,故本题答案为A。
10. 以下程序的功能是:给r输入数据后计算半径为r的圆面积s,程序在编译时出错。
main()
/* Beginning */
{int r; float s;scanf("%d",&r);
s=*∏*r*r; printf("s=%f\n",s);}
出错的原因是______。
A、注释语句书写位置错误 B、存放圆半径的变量r不应该定义为整型
C、输出语句中格式描述符非法 D、计算圆面积的赋值语句中使用了非法变量
解析:本题考查的是C程序的编写。本题并未对变量"∏"作任何定义,所以编译时会出现非法字符的错误信息。 故本题答案为D。
11. 有以下程序
main()
{int x, y, z;
x=y=1;z=x++,y++,++y;
printf("%d,%d,%d\n",x, y, z); }
程序运行后的输出结果是______。
A、2,3,3 B、2,3,2 C、2,3,1 D、2,2,1
解析:本题考查的是C语言的运算规则。x++:表示在使用x之后,使x的值加1;y++:表示在使用y之后,使y的值加1;++y:表示在使用y之前,使y的值加1。此题中执行z=x++,是将x的值先赋给z,所以z=1,接下来x自行加1,其结果为2;执行y++后,y=2,执行++y后,y=3。 故本题答案为C。
12. 以下选项中,值为1的表达式是______。
A、1-'0' B、1-'\0' C、'1'-0 D、'\0'-'0'
解析:本题考查的是C表达式的基本运算。'0'代表ASCII码为48的字符,'\0' 代表ASCII码为0的字符,'1'代表ASCII码为49的字符,所以只有选项B的表达式的值为1。 故本题答案选B。
13. 有以下程序
main()
{char a1='M',a2='m';
printf("%c\n",(a1,a2));}
以下叙述中正确的是______。
A、程序输出大写字母M B、程序输出小写字母m
C、格式说明符不足,编译出错 D、程序运行时产生出错信息
解析:本题考查的是逗号表达式。在逗号表达式(表达式1,表达式2)中,其运算方法是先求表达式1的值,然后求表达式2的值,整个逗号表达式的值是表达式2的值。故本题输出的是a2的值m。 故本题答案为B。
14. 有以下程序
main()
{ int a,b,d=25;
a=d/10%9;
b=a&&(-1);
printf("%d,%d\n",a,b);}
程序运行后的输出结果是______。
A、6,1 B、2,1 C、6,0 D、2,0
解析:本题考查的是算术运算符。如果算术运算符"/"中参与运算的变量都是整型变量,则"/"表示整除运算,"%"表示求余。本题中"a=d/10%9;"的值为25/10%9=2;"b=a&&(-1);"为2&&(-1)=1(注意:-1表示真,只有0才表示假),所以逗号表达式的运算顺序a,b的值分别为2,1。故本题答案为B。
15. 若整型变量a、b、c、d中的值依次为:1、4、3、2
则条件表达式a<b?a:c<d?c:d的值是______。
A、1 B、2 C、3 D、4
解析:本题考查的是条件表达式。本题先求的是a<b的值,根据a=1,b=4,故a<b的值为真,所以整个表达式"a<b?a:c<d?c:d"的值为a的值1。故本题的答案为A。
16. 若x和y代表整型数,以下表达式中不能正确表示数学关系|x-y|<10的是______。
A、abs(x-y)<10 B、x-y>-10&&x-y<10
C、!(x-y)<-10||!(y-x)>10 D、(x-y)*(x-y)<100
解析:本题考查的是表达式。选项A中,abs()本身就是求绝对值的函数,所以是正确的;选项B是把|x-y|<10表示成了数学表达式中的-10<(x-y)<10,然后再用c语言规则表示出来的;选项D相当于把|x-y|<10两边同时平方,是正确的;而选项C中!(x-y)<-10相当于(x-y)>=-10,!(y-x)>10相当于(x-y)>=-10。故选项C相当于(x-y)>=-10,所以错误。故本题答案为C。
17.有以下程序
main()
{ char a='a',b;
printf("%c,",++a);printf("%c\n",b=a++);}
程序运行后的输出结果是______。
A、b,b B、b,c C、a,b D、a,c
解析:本题考查的是++运算符。本题中printf("%c,",++a)先将a加,再执行此条语句,输出b,而printf("%c\n",b=a++)是先输出刚才a的值(刚才的a++表示a=a+1,所以是b),然后再加1。所以答案为A。
18.有以下程序
main()
{ unsigned int a;
int b=-1;
a=b;printf("%u",a);}
程序运行后的输出结果是______。
A、-1 B、65535 C、32767 D、-32768
解析:本题考的是不同类型数据间的混合运算。当运算对象为不同类型时,数据的转换方向为int→unsigned→long→double,本题程序中的变量b为int型,先要转换为unsigned型,int型变量的数值范围为-32768~32767,最高位为符号位,而unsigned所表示的数的范围为0--65535,它的最高位为数值位。由于内存中是以补码形式存储数据的,所以整型的“-1”在内存中的表示为 16个1,最高位的“1”表示符号负,将它转换为unsigned类型,即将原符号位表示符号的“1”看成数值,所以就得到16个数值位1,即65535。故本题答案为B。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论