第2章 数据类型,运算符与表达式
2.1选择题
【题2.1】下列4组选项中,不是C语言关键字的选项是____
A,define IF type B,gets char printf
C,include scanf case D,while go pow
解答:A --解析:C语言严格区分大小写IF 与关键字“if”不相同,没有type关键字
【题2.2】下面4个选项中,是C语言关键字的选项是____
A, auto enum include B,switch typedef continue
C,signed union scanf D,if struct type
解答:B --解析:A中include不是,C中union不是,Dtype不是
【题2.3】下面4个选项中,不合法的用户标识符的选项是____
A, A P_0 do B,loat lao _A
C, b-a goto int D,_123 temp INT
解答: C --解析:C语言用户标识符只能由字母,数字,下划线("_")组成,不能已有关键字,特定字。b-a非下划线 goto和int为已有关键字
【题2.4】C语言中的标识符只能由字母,数字,下划线3中字符组成,且第一个字符____
A,必须为字母 B,必须为下划线
C, 必须为字母或下划线 D,可以是字母,数字,下划线中任一种字符
解答: C
【题2.5】下面4个选项中,是合法的整形常量的选项是____
A, 160 -0xfff 011 B,-0xcdf 01a 0xe
C,-01 986,012 0668 D,-0x48a 2e5 0x
解答:A --解析:以0x开头的为16进制范围(0-9,A,,B,C,D,E,F)以0开头的为八进制范围(0-7)
B中 01a为八进制不能带值a C中989,012不能出现“,” 0668为八进制不能取值8 D中0x
【题2.6】下面4个选项中,是合法的整形常量的选项是____
A,--0f1 -0xfff 0011 B,-0Xcdf 017 12,456
C,-017 999 0668 D,-0x48eg -068 03f
解答: C --解析:A中--0f1双符号而且以0开头八进制不带f B中12,456不能带“,” D中-0x48eg 为16进制不能到g -068为8进制不能到8 03f也一样不能到f
【题2.7】下面4个选项中,不合法的浮点数的选项是____
A, 160. 0.12 e3 B,123 2e4.2 .e5
C, -.18 123e4 0.0 D,-1e3 .234 le3
解答: B --解析:指数形式:1),形式的转换用字母“e”代替x10 2),"e"的前后数字不能省略 3),“e"的后方数字只能为整形 个人觉得A的e3也是错误 B中2e4.2 e中后面是小数
【题2.8】下面4个选项中,是合法浮点数的选项是——
A,+le+1 B,-.60 C,123e D-e3
5e-9.4 l2e-4 1.2e-.4 .8e-4
03e2 -8e5 +2e-1 5.e-0
解答:B --解析:如上一题指数形式所示 A中的5e-9.4 e中后方数应该为整数,C中的1.2e-.4也一样
123e e后面要有整数,D -e3前后要有整数
【题2.9】下面4个选项中,是合法转义字符的选项是——
A,'\'' B,'\' C,'\018' D,'\\0'
'\\' '\017' '\f' '\101'
'\n' '\"' 'xab' 'xlf'
解答 :A --解析:B中的'\' 应该写为'\\'表示一个反斜杠,C中'\018'以'\0'开头为1到3位的八进制最大到7,'xab'缺少反斜杠,D中'\\0'表达有误并非转义字符,'xlf'缺少反斜杠
【题 2.10】下面4个选项中,不合法的转义字符的选项是——
A,'\"' B, '/' C, '\011' D,'\abc'
'\\' '\' '\lf' '\101'
'\xf' '\a' '\}' 'xlf'
解答 :B --解析:这题我感觉题目有误,B中'/'和'/a'。不是很理解C中的'\}' D中的'\abc' 'xlf'
【题2.11】下面4个选项中,不合法的转义字符的选项是——
A,"c" B, "\\" C,'W' D,''
解答 C: --解析:A和B用双引号是字符串D不合法
【题2.12】下面4个选项中,是正确的八进制数或十六进制数的选项是——
A,-10 B, 0abc C, 0010 D,0a12
0x8f -017 -0x11 -0x123
-011 0xc 0xf1 -0xa
解答 :C --解析:以0开头为8进制以0x开头以0x开头 A中-10为10进制。B中0abc以0开头每位不得超过7 D中的0a12也是同理
【题2.13】下面4个选项中,是正确的数值常量或字符常量的选项是——
A,0.0 B, "a" C, '3' D,+001
0f 3.9E-2.5 011 -0xabcd
8.9e 1e1 0xFF00 2e2
'&' '\"' 0a 50.
解答 :D --解析:结合前面知识A中8.9e后面缺少整数。B中3.9E-2.5后面的数字不是整数、C中0a为八进制不能出现a
【题2.14】下面4个选项中,非法常量的选项是——
A,‘as’ B, '\\' C, -0x18 D,0xabc
-0fff '\101' 01177 '\0'
'\0xa' 12,456 0xf "a"
解答 :A --解析:'as'字符只能有一个值
【题2.15】下面不正确的字符串常量是——
A,'abc' B,"12'12" C, "0" D,""
解答 :A --解析:字符串用双引号""
【题2.16】对应一下各代数式中,若变量a和x均为double类型,则不正确的C语言表到式是——
代数式 C语言表达式
A, exp(x*x/2)/sqrt(2*3.14159)
B, 1.0/2.0*(a*x+(a+x)/(4*a))
C, sqrt((pow(sin(x*3.14159/180),2.5))
D, x*x-exp(5.0)
解答 :C --解析:这题没搞懂,应该是要除以360
【题2.17】若有代数式则不正确的C语言表达式是——
A, a/b/c*e*3 B, 3*a*e/b/c C, 3*a*e/b*c D,a*e/c/b*3
解答:C --解析:根据结合性 应改为3*a*e/(b*c)
【题2.18】以下表达式值为3的是——
A,16-13%10 B, 2+3/2 C, 14/3-2 D,(2+6)/(12-9)
解答: B --解析:A先算13%10得3,再算16-3=13 C,14/3=4 =>4-2=2 D,(2+6)/(12-9)=>8/3=2
【题2.19】设有说明语句:int k=7,x=12;则以下能使值为3的表达式是——
A,x%=(k%=5) B, x%=(k-k%5) C, x%=k-k%5 D,(x%=k)-(k%=5)
解答: D --解析:复合赋值运算把等号右边作为一个整体进行计算 A 先算括号内的k%=5 得2 在用得到的值计算 x%=2 得0 同理可得 B=2 C=2 D =3
【题2.20】若x,i,j和k都是int型变量,则执行表达式x=(i=4,j=16,k=32)后x的值为——
A,4 B, 16 C, 32 D,52
解答:C --解析:逗号表达式从左至右依次计算,把最后一个值作为整个表达式的结果
【题2.21】假设所有变量均为整形,则表达式(a=2,b=5,b++,a+b)的值是——
A, 7 B, 8 C, 6 D,2
解答: B --解析:b++虽然为后置自增,但经过逗号运算进入下一次运算时已经自增为6
【题2.22】已知各变量的类型说明如下:
int k,a,b;
unsigned long w=5;
double x=1.42;
则以下不正确的表达式是——
A,x%(-3) B, w+=-2 C, k=(a=2,b=3,a+b) D,a+=a-=(b=4)*(a=3)
解答:A --解析:A为整除取余运算只能对整形进行运算,x为双精度浮点型
【题2.23】已知各变量的类型说明如下
int i=8,k,a,b;
unsigned long w=5;
double x=1.42,y=5.2;
则以下正确的表达式是——
A,a+=a-=(b=4)*(a=3) B, a=a*3=2 C, x%(-3) D,y=float(i)
解答:A --解析:B赋值号左边只能是变量不能为表达式 C整除取余只能对整数运算 D强制类型转换要带括号(float)(i)
【题2.24】以下不正确的叙述是——
A, 在C程序中,逗号运算符的优先级别最低
B,在C程序中 ,APH和aph是两个不同的变量
C,若a和b类型相同,在执行了赋值表达式a=b后b中的值将放入a中,而b中的值不变
D,当从键盘输入数据时,对于整形变量只能输入整形数据,对于实型变量只能输入实行数据
解答: D --解析:C语言会把低字节数据向高字节转换
【题2.25】以下正确的叙述是——
A,在C程序中,每行只能写一条语句
B, 若a是实型变量,C程序中允许赋值a=10.因此实型变量中允许存放整形数据
C, 在C程序中,无论是整数还是实数,都能被准确无误的表示
D,在C程序中,%是只能用于整数运算的运算符
解答: D --解析:A一行可以写多条语句,一条语句也可分多行写 B是对整数进行转换成实型数据
C若超过存储范围则会出错
【题2.26】已知字母A的ASCLL码为65,且定义c2为字符型变量,则执行语句c2='A'+'6'-'3';后c2的值为——
A,D B, 68 C, 不确定值 D,C
解答:A --解析:因为'6'=54,'3'=51 所有'A'+3='D'
【题2.27】在C语言中,要求运算符必须是整形的运算符是——
A,/ B, ++ C, != D, %
解答:D
【题2.28】若有说明语句:char c='\72'';则变量c——
A,包含一个字符 B,包含2个字符 C, 包含3个字符 D,说明不合法,c的值不确定
解答: A --解析:为转义字符的八进制数
【题2.29】若有定义语句:int a=7;float x=2.5,y=4.7;则表达式x+a%3*(int) (x+y)%2/4的值是——
A, 2.500 000 B, 2.750 000 C,3.500 000 D,0.000 000
解答:A --解析:先算(int)(x+y)=>7 在按照优先级从左至右依次计算 得2.5
【题2.30】sizeof(float)是——
A,一个双精度表达式 B,一个整形表达式 C, 一种函数调用 D,一个不合法的表达式
解答:B --解析:sizeof的作用是求内存字节个数
【题2.31】设变量a是整形,f是实型,i是双精度型,则表达式10+'a'+i*f值的数据类型是——
A,int B, float C, double D,不确定
解答:C --解析:运算时低字节向高字节转换
【题2.32】设以下变量均为int 类型,赋值不等于7的表达式是——
A,(x=y=6,x+y,x+1) B, (x=y=6,x+y,y+1) C, (x=6,x+1,y=6,x+y) D,(x=6,y+1,x=y,x+1)
解答:C --解析:C最后的结果为12
【题2.33】若有代数式则正确的C语言表达式是——
A, sqrt(fabs(pow(y,x)+log(y)))
B, sqrt(abs(pow(y,x)+log(y)))
C, sqrt(fabs(pow(x,y)+log(y)))
D,sqrt(abs(pow(y,x)+log(y)))
解答:D --解析:fabs对实型数据进行求绝对值 abs对整数进行求绝对值 pow 的格式为:==pow(x,y)
【题2.34】若有代数式——
A,fabs(x*3+log(x)) B, abs(pow(x,3)+log(x))
C,abs(pow(x,3.0)+log(x)) D,fabs(pow(x,3.0)+log(x))
解答: D
【题2.35】在C语言中,char型整形数据在内存中的存储形式是——
A,补码 B, 反码 C, 原码 D,ASCLL码
解答:D
【题2.36】设变量n为float类型,m为int 类型则以下能实现将n中的数值保留小数后两位,第三位进行四舍五入运算的表达式是1——
A, n=(n*100+0.5)/100.0 B,m=n*100+0.5,n=m/100.0
C, n=n*100+0.5/100.0 D,n=(n/100+0.5)*100.0
解答:B --解析:保留两位小数位先乘以100+0.5在赋值给一个整数变量进行四舍五入,得到的值在除以100则得到数值
【题2.37】表达式18/4*sqrt(4.0)/8值的数据类型为——
A,int B, float C, double D,不确定
解答:C
【题2.38】设有说明语句:char w;int x;float y;double z;则表达式w*x+z-y值的数据类型是——
A,float B, char C, int D,double
解答:D
2.2 填空题
【题 2.39】若采用十进制数的表示形式,则077为【1】,0111为【2】,0xab为【3】
解答 【1】63【2】73【3】171 --解析其他进制转十进制为累加法 以0开头的为8进制 0x为16进制
所有 077—>+
=63 011—>
+
+
=73 0xab--->
+
=171
【题2.40】C语言中的标识符可分为关键字,【1】,【2】3类
解答 【1】用户标识符 【2】预处理标识符
【题2.41】C语言中的标识符只能有3中字符组成,它们是【1】,【2】,【3】
解答 【1】字母 【2】数字 【3】下划线
【题2.42】在C语言中,用"\"开头的字符序列称为转义字符。转义字符"\n"的功能是【1】,转义字符"\r"的功能是【2】
解答【1】回车换行 【2】回车至下一行行首
【题2.43】在C语言中,用关键字【1】定义单精度实型变量,用关键字【2】定义双进度实型变量;用关键字【3】定义字符型变量
解答:【1】float 【2】double 【3】char
【题2.44】设a,b,c均为int类型变量,请用C语言的表达式描述以下命题
(1)a 或b 中有一个大于c a>c||b>c
(2)a,b和c中只有两个为正数 a>0&&b>0&&c<0||a>0&&c>0&&b<0||a<0&&b>0&&c>0
(3)c是偶数 c%2==0
【题2.45】 在C语言中&作为双目运算表示的是【1】,而作为单目运算符时表示的时【2】
解答 【1】与运算 【2】取地址运算
【题2.46】运算符%两侧运算量的数据类型必须是【1】;运算符++和--的运算量必须是【2】
解答 【1】整形 【2】变量
【题2.47】在C语言的赋值表达式中,赋值号左边必须是【1】
解答 【1】变量
【题 2.48】表达式x=6 应当读作【】
解答 将6赋值给x
【题2.49】若有定义语句:int m=5,y=2;则执行表达式 y+=y-=m*=y后的y值是【1】
解答 -16 按照从右至左运算
【题2.50】在C语言中的实型变量分为两种,它们是【1】和【2】
解答【1】float 【2】double
【题2.51】C语言所提供的基本数据类型包括:单精度,双精度【1】【2】和【3】
解答 【1】枚举型【2】字符型【3】整形
【题2.52】已知字母a的ASCLL码为97,而且设ch为字符型变量,则表达式ch='a'+'8'-'3'的值为【1】
解答 F 解析:前面选择题中有一道差不多的题可以去看一下
【题2.53】若有定义语句:int s=6;则表达式s%2+(s+1)%2的值为 1
解析 s%2+(s+1)%2=6%2+(6+1)%2=7%2=1
【题2.54】若a是int型变量,则表达式s%2+(s+1)%2的值为【1】
解答【1】26
【题2.55】若x和a均是int型变量 则执行表达式(1)后x的值为【1】,执行表达式(2)后的x值为【2】
(1)x=(a=4,6*2)
(2)x=a=4,6*2
解答 根据括号的优先级 【1】12 【2】4
【题2.56】若a,b和c均是int型变量,则执行表达式 a=(b=4)+(c=2)后a的值为【1】,b的值为【2】,c的值为【3】
解答 【1】6 【2】6 【3】2
【题2.57】若a int 型变量,而且a的初值为6,则表达式a+=a-=a*a后的值为 -60
解答 a+=a-=36==>a+=30==>a=60
【题2.58】若a是int 型变量,则执行表达式a=25/3%3后a的值是2
解答 a=8%3=2
【题2.59】若x和n 均是int型变量,而且x和n的初值均为5,则执行表达式x+=n++后x的值为 1,n 的值为 6
解答 后置自增运算先用原值参与运算在自增、
【题2.60】若有定义语句:int b=7;float a=2.5,c=4.7;则表达式a+(int)(b/3*(int)(a+c)/2)%4的值是5.500 000
解答 2.5+(int)(7/3*(int)(2.5+4.7)/2)%4==>2.5+(int)(2.3*7/2)%4==>2.5+7%4==>2.5+3==>5.500000
【题2.61】若有定义语句:int a=2,b=3;float x=3.5,y=2.5,则表达式(float)(a+b)/2+(int)x%(int)y的值为3.500 000
解答 5.000 000/2+3/2==>2.500 000+1==>3.500 000
【题2.62】若有定义语句:char c='\010';则变量c中包含的字符个数为【1】
【题2.63】若有定义语句:int x=3,y=2;float a=2.5,b=3.5;则表达式(x+y)%2+(int)a/(int)b的值为【1】
解答 (3+2)%2+2/3==>1
【题2.64】若x和n均为int型变量,而且x的初始值为12,n 的初始值为5,则执行表达式x%=(n%=2)后x的值为【0】
【题2.65】假设变量a,b均为整形,则表达式(a=2,b=5,a++,b++,a+b)的值为【7】
【题2.66】把以下多项式写称只含7次乘法运算表,其余皆为加,减法的C语言表达式
解答 x*(x*(x*(*x(x*(x*(5*x+3)-4)+2)+1)-6)+1)+10
【题2.67】若x,和y都是double型变量,而且x的初值是3.0,y的初始值为2.0,则表达式k=
pow(y,fabs(x))的值是【8.000 000】
【题2.68】若有定义语句:int e=1,f=4,g=2;float m=10.5,n=4.0,k;则表达式
k=(e+f)/g+sqrt((double)n)*1.2/g+m后k的值是【13.700 000】
【题2.69】表达式8/4*(int)2.5/(int)(1.25*(3.7_2.3))值的类型为【整形】
【题2.70】表达式 pow(2.8,sqrt(double(x)))值的数据类型为【双精度】
【题2.71】假设m是一个3位数,从左至右依次用a,b,c表示各位的数字,则从左至右各位数字是b,a,c的3位数的表达式是 m/10%10*100+m/100*10+m%10