内容发布更新时间 : 2025/1/5 23:23:13星期一 下面是文章的全部内容请认真阅读。
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 while(a<10) {if(a<1)continue; if(a==5)break;