C语言易错题集及易忘知识

C语言易错题集及易忘知识

1.下面的程序运行后输出为【 】。 main( )

{ int a=-32769; ptintf(\

}

A) 32769 B) %8U C) 32767 D) -32767

分析:格式字符必须小写,题中的\不会当作格式控制符,而是原样输出,变量a将没有对应的格式说明,也不会送出。本题正确答案为B。 2. ①八进制----> 十进制 (31.5)(八)

整数部分: 3*8(1)+1*8(0)=25 小数部分: 5*8(-1)=0.625

所以(31.5)(八)=(25.625)(十) ②十六进制----> 十进制 (19.A)(十六)

整数部分:1*16(1)+9*16(0)=25 小数部分:10*16(-1)=0.625

所以(19.A)(十六)=(25.625)(十) 3. 若执行下面程序段后的输出为:3,4,5,请填空。 int a,b=3,c=5;

a=b

printf(\

分析:本题考查条件运算符和增量运算符的概念,题中b

4. 与其它高级语言相比,在C语言中赋值号并不是优先级最低的,C语言中优先级最低的运算符是逗号运算符。

5. C语言语句一行写不下时,可以【D 】。

A) 用逗号换行 B) 用分号换行 C) 用回车换行 D) 在任意一空格处换行 6. 表达式5%(-3)的值是2 ,表达式-5%(-3)的值是-2 。

分析:注意到%运算符只能两边为整数,且其作用是取余数,与正负无关,二%的优先级高于符号。

7. 在C语言中,格式输入库函数为scanf 格式输出库函数为printf 。

8. C语言中构造类型的数据有三种:数组、结构体和共用体,数组是同类型数据的集合,结构体是不同类型的数据集合。

9. C语言中int型数据是以补码形式存放的,字符型数据是以ASCII码形式存放的。 10. 字符常量的定义是用单引号括起来的一个字符

11. 若有说明语句char ch1=′\\\\x41′;则ch1【 】。

A) 包含4个字符 B) 包含3个字符 C) 包含2个字符 D) 包含1个字符

分析:\中的\是十六进制数,即十进制的65,题中ch1存放的65是字母\的ASCII码。

12. 赋值号左端不能为表达式;赋值号不能将字符串赋给某个变量(ch=\);增量运算符“++”“--”不能用于表达式(x=(a+b)++;) 13. 以下程序输出的结果是________。

main()

{

int a=65535;

printf(\%d%u\,a,a); }

A)-1 -1 B)65535 65535 C)-1 65535 D)65535 -l 答案:C

评析:printf函数中不同类型的数据用不同的格式字符,其中%d是按整型数据的实际长度输出十进制整数。变量a=65535以%d格式输出时最高位的1被当成了符号,1111111111111111成了负数的补码,即-1;%u用来输出unsigned型数据,无符号整型变量的数值范围为0~65535,所以变量a=65535以%u格式输出的值为65535。 14. 下面程序的运行结果是x=【7】,y=【8】。 main( )

{ float x=4.9;int y;

y=(int)x;

printf(\

分析:强制类型变换并不改变x的原值,x仍为4.9,而变换得到的是中间结果,此题将中间结果赋给了y,另外注意是舍弃小数部分,而不是四舍五入。答案为 【7】4.900000【8】 4。 15. C语言中if语句的表达式可以是任意类型,只要表达式的值非0就算作真,是0就作为假。

16. 以下判断两个字符串相等的正确方法是【 】。

A) if(str1=str2) B) if(str1==str2)

C) if(strcpy(str1,str2)=0) D) if(strcmp(str1,str2)==0)

分析:选项A)中用了赋值号,显然是错误的,选项C)中的字符串拷贝函数(strcpy)不能比较大小,选项B)中的\号也不具有串比较功能,比较两个字符串的大小应用字符串比较函数(strcmp)。本题正确答案为D。 17. 执行下面程序的正确结果是【 】。 main( ) { float a=1.9; switch(a)

{ case 0: printf(\ case 1: printf(\ case 2: printf(\ }

printf(\ }

A) 1.900000 B) 111122221.900000 C) 22221.900000

D) 0000111122221.900000

分析:题中定义了单精度实数a,所以最下面的printf语句输出有6位小数,另外C语言在判断switch表达式的值时,是按整型数据处理的(但不4舍5入),所以程序是从case 1

处开始执行的,因没有break语句,接着会执行case 2。本题正确答案为B。 18. 下面程序运行结果为【 】。 main( ) { char c=′a′;

if(′a′

}

A) LOW B) UP C) LOWUP D) 语句错误,编译不能通过 分析:关系运算符“<”和“<=”的优先级相同,计算顺序是从左向右,求解表达式′a′

(A)int x=0,y=10; (B)int x=0,y;

switch(x) switch(x)

{case y: x++;break; { case x>0:y=1;break; case y+2: x+=10;break; case x= =0:y=0;break; case y-1:x=-7;break; case x<0:y=-1;break;

} }

(C)#define y 20 (D)int x=0,y;

int x=10,z; switch(x) switch(x) { case 3:

{case 12:z=3;break; case -1:y=2;break; case y+1:x+=10;break; case 2:break; case y-8:y-=3;break; }

}

解析:switch语句中要求case后的表达式必须是常量或常量表达式,并且不能重复,而选项A、B的case后的表达式中使用了关系、逻辑等变量表达式,因此,A、B不正确。C中的case后虽然使用的都是常量表达式(用宏定义的值为常量),但是case 12与case y-8的值均为12,case后的值发生重复,因此,C不正确。选项D虽无实际意义,但从语法角度看是正确的。

20. putchar函数可以向终端输出一个( )。

(A)整型变量表达式的值 (B)实型变量的值

(C) 字符串 (D) 字符或字符型变量的值

解析:这是putchar函数的功能,只能输出一个字节的值。 【答案】D

21. for语句既可用在循环次数确定的情况,也可用在循环次数不确定的情况。for语句先判断条件,后执行语句,并可使用break语句强行退出循环,其循环体可以是单条语句,也可以是多条语句,但必须用花括号括起来。

22. 以下程序中,while语句的执行次数是( )。 #include void main() { int a=0;

while(a<10)

{if(a<1)continue; if(a==5)break;

联系客服:779662525#qq.com(#替换为@) 苏ICP备20003344号-4