C语言易错题集及易忘知识
1.下面的程序运行后输出为【 】。
main( )
{ int a=-32769;
ptintf("%8U\\n",a);
}
A) 32769 B) %8U C) 32767 D) -32767
分析:格式字符必须小写,题中的"%8U"不会当作格式控制符,而是原样输出,变量a将没有对应的格式说明,也不会送出。本题正确答案为B。
2. ①八进制----> 十进制
main( )
{ int a=-32769;
ptintf("%8U\\n",a);
}
A) 32769 B) %8U C) 32767 D) -32767
分析:格式字符必须小写,题中的"%8U"不会当作格式控制符,而是原样输出,变量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<c?【3】:c++;
int a,b=3,c=5;
a=b<c?【3】:c++;
printf("%d,%d,%d",a,b,c);
分析:本题考查条件运算符和增量运算符的概念,题中b<C为真,应取B++的值给A,因B的值是先用后增1,所以A为3,题中的C++没有执行到,C保持原值。
分析:本题考查条件运算符和增量运算符的概念,题中b<C为真,应取B++的值给A,因B的值是先用后增1,所以A为3,题中的C++没有执行到,C保持原值。
4. 与其它高级语言相比,在C语言中赋值号并不是优先级最低的,C语言中优先级最低的运算符是逗号运算符。
5. C语言语句一行写不下时,可以【D 】。
A) 用逗号换行 B) 用分号换行 C) 用回车换行 D) 在任意一空格处换行
6. 表达式5%(-3)的值是2 ,表达式-5%(-3)的值是-2 。
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. 字符常量的定义是用单引号括起来的一个字符
8. C语言中构造类型的数据有三种:数组、结构体和共用体,数组是同类型数据的集合,结构体是不同类型的数据集合。
9. C语言中int型数据是以补码形式存放的,字符型数据是以ASCII码形式存放的。
10. 字符常量的定义是用单引号括起来的一个字符
11. 若有说明语句char ch1=′\\x41′;则ch1【 】。
A) 包含4个字符 B) 包含3个字符 C) 包含2个字符 D) 包含1个字符
A) 包含4个字符 B) 包含3个字符 C) 包含2个字符 D) 包含1个字符
分析:"\\x41"中的"41"是十六进制数,即十进制的65,题中ch1存放的65是字母"A"的ASCII码。
12. 赋值号左端不能为表达式;赋值号不能将字符串赋给某个变量(ch="green";);增量运算符“++”“--”不能用于表达式(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被当成了符号,111111*********1成了负数的补码,即-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=%f,y=%d",x,y); }
分析:强制类型变换并不改变x的原值,x仍为4.9,而变换得到的是中间结果,此题将中间结果赋给了y,另外注意是舍弃小数部分,而不是四舍五入。答案为 【7】4.900000【8】 4。
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。
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("0000");
case 1: printf("1111");
case 2: printf("2222");
}
printf("%f",a);
}
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′<C<=′Z′)PRINTF("LOW");
}
printf("%f",a);
}
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′<C<=′Z′)PRINTF("LOW");
elseprintf("UP");
}
A) LOW B) UP C) LOWUP D) 语句错误,编译不能通过
分析:关系运算符“<”和“<=”的优先级相同,计算顺序是从左向右,求解表达式′a′<C<=′Z′时,是先计算出′A′<C的值(此值只有0和1两种情况),接着再判断该值小于等于′Z′(Z的ASCII码是122),所以该式的值永远为1,程序输出LOW。
19. 下列程序段中,正确的是( )。
}
A) LOW B) UP C) LOWUP D) 语句错误,编译不能通过
分析:关系运算符“<”和“<=”的优先级相同,计算顺序是从左向右,求解表达式′a′<C<=′Z′时,是先计算出′A′<C的值(此值只有0和1两种情况),接着再判断该值小于等于′Z′(Z的ASCII码是122),所以该式的值永远为1,程序输出LOW。
19. 下列程序段中,正确的是( )。
(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 <stdio.h>
void main()
{ int a=0;
while(a<10)
{if(a<1)continue;
if(a==5)break;
a++;
}}
(A)1 (B)10 (C)6 (D)死循环,不能确定次数
解析:此题主要考察continue和break的使用,执行continue语句后,结束本次循环,其后的语句不再执行,即循环控制变量a的值始终为0。 【答案】 D
23. 下面循环语句的循环次数是( )。
int k=2;
while(k=0) printf("%d",k);
k--;printf("\n").
(A)无限次 (B)0次 (C)1次 (D)2次
解析:表达式k=0是赋值表达式,不论k为何值,表达式k=0使k为0,且此表达式的值也为0,不能进入循环。 【答案】 B
24. 假定a和b为int型变量,则执行以下语句后b的值为( )。
a=1;b=10;
do{ b-=a;
a++;
}while(b--<0);
(A)9 (B)-2 (C)-1 (D)8
解析:b的初值为10,执行循环体后,b为9,a为2,先判断b<0为假,退出循环,然后b--
使b为8。 【答案】 D
25. 在C语言中,当函数调用时下列说法中正确的是( )。
(A)实参和形参各自占用一个独立的存储单元。
(B)实参和形参共用存储单元
(C)可以由用户指定实参和形参是否共用存储单元
(D)由系统自动确定实参和形参是否共用存储单元
解析:C语言中,参数的传递方式是值传递,这就需要实参和形参各自占有一个独立的存储单元。在函数调用时,系统将实参的值赋给形参,而修改形参的值与实参变量无关。A
26. 以下说法不正确的是( )。
(A)不同函数可以使用同名变量
(B)函数内定义的变量只在本函数内有效
(C)形式参数是局部变量
(D)复合语句中定义的变量在本函数范围内有效
解析:复合语句中定义的变量只在本复合语句范围内有效。【答案】 D
27. auto关键字只能出现在复合语句或函数内,此类变量也只能在定义它的函数内存取,只有该函数被调用时才给他们分配存储空间,从函数返回时收回存储空间。而extern和static类型的变量的初始化和空间分配由编译系统确定,占用空间是永久性的。而int关键字不是存储类型的关键字。
28. .若一个外部变量的定义形式为static int x;那么,其中static的作用应该是( )。
(A)将变量存放在静态存储区 (B)使变量x可以由系统自动初始化
(C)使x只能在本文件内引用 (D)使x的值可以永久保留
解析:作为一种修饰,令数组全部的值为0static仅是限制此类外部变量的引用范围:只能在定义它的文件范围内使用。而无论有无static修饰,外部变量都具有选项A、B、D三种特性。C
29. 9.若程序中定义了如下函数:
float fun(float a,float b)
{return(a+b); }
在下列选项中,错误的函数声明形式是( )。
(A)float fun(float a,float b); (B)float fun(float ,float );
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论