2011年计算机等级二级C语言课后练习题及答案解析(3)
一、单项选择题
1.下面不属于C语言的数据类型是【 】。
A) 整型 B) 实型 C) 逻辑型 D) 双精度实型
分析:和其它高级语言相比,C语言中没有逻辑型数据,也没有逻辑型变量。
本题正确答案为C。
2.C语言中,下列属于构造类型的是【 】。
A) 整型 B) 实型 C) 指针类型 D) 结构体类型
分析:C语言中构造类型的数据有三种:数组、结构体和共用体,数组是同类型数据的集合,结构体是不同类型的数据集合。
本题正确答案为D。
3.下列字符串不符合标识符规定的是【 】。
A) SUM B) sum C) 3cd D) end
分析:标识符规定只能由26个英文字母(大小写均可),数字0~9和下划线组成,且不能以数字开头,题中的3cd不符合规定。
本题正确答案为C。
4.下面能正确表示八进制数的是【 】。
A) 0x16 B) 029 C) -114 D) 033
分析:选项A)以0x开头是十六进制数,选项B)虽然是0开头,但出现了数字9,选项C)是十进制数。
本题正确答案为D。
5.下面四个选项中,均是合法实数的选项是【 】。
A) 2e-4.2 B)-0.50 C) 0.2e-.5 D)-e5
分析:实数有两种表示形式:小数形式和指数形式,小数形式必须有小数点,指数形式中,字母e之前必须有数字,e之后必须是整数。选项A)中的"2e-4.2",选项C)中的"0.2e-.5",选项D)中的"-e5"均是不合法的。
本题正确答案为B。
6.C语言中,字符型数据在内存中存储形式是【 】。
A) 原码 B) 反码 C) 补码 D) ASCII码
分析:C语言中int型数据是以补码形式存放的,字符型数据是以ASCII码形式存放的。
本题正确答案为D。
7.下列正确的字符型常量是【 】。
A) "a" B) ′\\\\′ C) "\\r" D) 277
分析:字符常量的定义是用单引号括起来的一个字符,A和C的定界符不对,D超过了char型数据的表示范围,′\\\\′是转义字符。
本题正确答案为B。
8.若有说明语句char ch1=′\\x41′;则ch1【 】。
A) 包含4个字符 B) 包含3个字符 C) 包含2个字符 D) 包含1个字符
分析:"\\x41"中的"41"是十六进制数,即十进制的65,题中ch1存放的65是字母"A"的ASCII码。
本题正确答案为D。
9.下列程序段输出的字符串长度为【 】。
printf("\\\\aaa\\′ccc\\bddd\\"");
A) 11 B) 12 C) 13 D) 17
分析:\\\\、\\′、\\b和\\"为转义字符,程序输出结果为:\\aaa′ccddd"。
本题正确答案为A。
10.下列运算符中,要求运算对象必须是整数的是【 】。
A) / B) * C) % D) !
分析:题目中"/"、"*"、"!"的运算对象既可以整数,也可以是实数,只有取余数运算符"%"要求运算对象必须是整数。
本题正确答案为C。
11.下面合法的赋值语句是【 】。
A) x+y=2002; B) ch="green"; C) x=(a+b)++; D) x=y=0316;
分析:赋值号左端不能为表达式,选项A)是错的;赋值号不能将字符串赋给某个变量,选项B)也是错的;增量运算符“++”不能用于表达式,选项C)也是错的。
本题正确答案为D。
12.已知a为int型,b为double型,c为float型,d为char型,则表达式a+b*c-d/a结果的类型为【 】。
A) int 型 B) float型 C) double型 D) char型
分析:不同类型数据混合运算的转换规律是:运算前float型数据会自动转换为double型,char型数据会自动转换为int型。运算时int型数据和double型数据要先化为相同类型,即double型,运算结果也为double型。
本题正确答案为C。
13.执行以下程序段后的输出结果是【 】。
int x=0xcde;
printf("M,%4o,%4x\\n",x,x,x);
A) 3294,6336,cde B) 3294,6336,xcde C) 3294,06336,0xcde D) 3294,6336,0cde
分析:0xcde是十六进制数,写成二进制数形式为:1100 1101 1110,按八进制送出时,是从右向左3位二进制数写成1位,按十六进制形式送出时,是从右向左4位二进制数写成1位。
本题正确答案为A。
14.下面的程序运行后输出为【 】。
#include
#include
main( )
{ int a,b;
float c;
b=5;c=6;c=b+7;b=c+1;
a=sqrt((double)b+c);
printf("%d,%f,%d",a+6,c,b);
}
A) 11.000000,12.000000,13.000000
B) 11.000000,12.000000,13
C) 11.0000000,12,13
D) 11,12.000000,13
分析:C语言允许将一种类型的数据赋给另一种类型的变量,但是变量的类型并不会因为赋值而发生改变,如本题中将b+7,即12赋给float型变量c,c值应为12.000000而不是整数12,同样a=sqrt((double)b+c),赋值号右边是双精度数,但由于a是整形变量,故a的值为5。
本题正确答案为D。
15.执行以下程序后x的值为【 】。
unsigned int x=65535;
printf("%d\\n",x);
A) 65535 B) 1 C) 有错误 D) -1
分析:题中将x定义成无符号整数,并且已初始化为:1111111111111111,若按%d格式输出,则最高位的1被当成了符号,1111111111111111成了负数的补码,输出结果为-1。
本题正确答案为D。
二、填空题
1.下面程序段的功能是输出大写字母对应的小写字母的ASCII码,请填空。
char ch;
scanf("%c",&ch);
ch=(ch>=′A′&&ch<=′Z′)?(【1】):ch
printf("【2】\\n",ch);
分析:题目中条件运算为判断输入字母是否为大写,当ch>=′A′&&ch<=′Z′为真时,将其转换成对应的小写字母,需ASCII码值加上32,已知题意是将大写字母对应的小写字母ASCII值输出,所以printf语句中的输出格式应为十进制格式。
本题正确答案为 【1】 ch+32, 【2】 %d。
2.下面程序段的执行结果是x=【3】,y=【4】。
inta=3,b=5,x,y;
x=a+1,b+6;
y=(a+1,b+6);
printf("x=%d,y=%d",x,y);
分析:此题考查逗号表达式的概念,因逗号运算符的优先级比赋值号还低,所以执行x=a+1,b+6时,x得到的是a+1的值。
本题正确答案为 【3】 4, 【4】 11。
3.下面程序执行后k的值为【5】。
int a=1,b=2,c=3,d=4,k;
k=a>b?a:c>d?c:d
分析:因题中a>b的值为假,故求解表达式k=a>b?a:c>d?c:d相当于求k=a>b?a:(c>d?c:d)。
本题正确答案为 【5】 4。
4.已知:int a=5;则执行a+=a-=a*a;语句后,a的值为【6】。
分析:a+=a-=a*a的运算顺序是从右向左,相当于求a+=(a-=a*a),其中小括号内的运算得a=5-5*5即a=-20,下一步再求a+=a,即a=a+a,将-20代入得a=-40。
本题正确答案为 【6】 -40。
5.下面程序的运行结果是x=【7】,y=【8】。
main( )
{ float x=4.9;int y;
y=(int)x;
printf("x=%f,y=%d",x,y); }
分析:强制类型变换并不改变x的原值,x仍为4.9,而变换得到的是中间结果,此题将中间结果赋给了y,另外注意是舍弃小数部分,而不是四舍五入。
本题正确答案为 【7】 4.900000 【8】 4。
编辑特别推荐:
C语言学习要领
名师谈C语言的重要性和如何学习C语言
c语言初学者环境选择