习题二  数据类型及其运算
1.已定义c为字符型变量,则下列语句中正确的是______
Ac='97'  Bc="97";  Cc=97;  Dc="a";
解析:本题的考查点是字符型变量。C语言中,字符型数据和整型数据之间可以通用。一个字符数据既可以以字符形式输出,也可以以整数形式输出。所以把整型数据赋给字符型变量,直接用c=97即可,所以选项C正确。
2.以下选项中可作为C语言合法整数的是______
A10110B  B0386  C0Xffa  Dx2a2
    解析:本题的考查点是C语言中的整型常数。整型常数可以用十进制、八进制或十六进制表示,并分为有符号数、无符号数和长整数。由此可知选项A错;选项B,用0386表示八进制错误,因为八进制数为0-7八个数字,含有8是不对的;选项D,数字前加“0x”表示十六进制数,所以D也不对。故本题答案为C
3. 以下选项中不能作为合法常量的是______
A1.234e04    B1.234e0.4  C1.234e+4  D1.234e0
  解析:本题考查的是常量表示法。本题选项中的几个常量都属于指数形式的实型常量。此种类型的常量要求字母e(或E)之前必需有数字,且e后面的指数必须为整数,所以本题中选项B非法。故本题答案为B
4.与十进制数200等值的十六进制数为______
AA8    BA4  CC8  DC4
解析:本题考查的是进制之间的转换。用十--十六进制转换法,除16,由下而上取余法。故本题答案为C
5. 若有代数式(其中e仅代表自然对数的底数,不是变量),则以下能够正确表示该代数式的C语言表达式是______
Asqrt(abs(n^x+e^x))          Bsqrt(fabs(pow(n,x)+pow(x,e)))
Csqrt(fabs(pow(n,x)+exp(x)))  Dsqrt(fabs(pow(x,n)+exp(x)))
解析:本题考查的是基本函数应用。exp(x)函数功能是返回以自然数e为底,函数参数x为幂的指数值expow(n,x)函数功能是返回nx次幂值nxfabs()函数功能是返回函数参数的绝对值;sqrt()用于返回函数参数的平方根。选项A n^x不是有效的C语言表达式,所以错误;选项Bpow(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. 以下能正确定义且赋初值的语句是______
Aint n1=n2=10;  Bchar  c=32;  Cfloat  f=f+1.1;  Ddouble  x=12.3E2.5;
  解析:本题考查的是变量初始化。语句"int  n1=n2=10;"中,由于变量n2未定义,所以此赋值语句错误;由于赋值语句中不能存在运算表达式,所以选项C中的赋值语句错误;选
D中指数表示错误,C语言规定,e后面的指数必须为整数;选项B中的"32"ASCII码的表示形式,这是C语言中字符型数据和整型数据通用的表现。 故本题答案为B
9. 以下不能正确计算代数式值的C语言表达式是______
A1/3*sin(1/2)*sin(1/2)  Bsin(0.5)*sin(0.5)/3   
Cpow(sin(0.5),2)/3      D1/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); }
程序运行后的输出结果是______
A2,3,3  B2,3,2   C2,3,1   D2,2,1
  解析:本题考查的是C语言的运算规则。x++:表示在使用x之后,使x的值加1y++:表示在使用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的表达式是______
A1-'0'   B1-'\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);}
程序运行后的输出结果是______
A6,1  B2,1   C6,0   D2,0
解析:本题考查的是算术运算符。如果算术运算符"/"中参与运算的变量都是整型变量,则"/"表示整除运算,"%"表示求余。本题中"a=d/10%9;"的值为25/10%9=2"b=a&&(-1);"2&&(-1)=1(注意:-1表示真,只有0才表示假),所以逗号表达式的运算顺序a,b的值分别为2,1。故本题答案为B
15. 若整型变量abcd中的值依次为:1432
则条件表达式a<b?a:c<d?c:d的值是______
A1  B2   C3   D4
解析:本题考查的是条件表达式。本题先求的是a<b的值,根据a=1,b=4,故a<b的值为真,所以整个表达式"a<b?a:c<d?c:d"的值为a的值1。故本题的答案为A
16. 若xy代表整型数,以下表达式中不能正确表示数学关系|x-y|<10的是______
Aabs(x-y)<10               Bx-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++);}
程序运行后的输出结果是______
Ab,b   Bb,c   Ca,b   Da,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  B65535   C32767  D-32768
    解析:本题考的是不同类型数据间的混合运算。当运算对象为不同类型时,数据的转换方向为intunsignedlongdouble,本题程序中的变量bint型,先要转换为unsigned型,int型变量的数值范围为-32768~32767,最高位为符号位,而unsigned所表示的数的范围为0--65535,它的最高位为数值位。由于内存中是以补码形式存储数据的,所以整型的“-1”在内存中的表示为 161,最高位的“1”表示符号负,将它转换为unsigned类型,即将原符号位表示符号的“1”看成数值,所以就得到16个数值位1,即65535。故本题答案为B

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。