C语言易错题集及易忘知识
1.下面的程序运行后输出为【 】。
  main( )
  { int a=-32769;
  ptintf("%8U\\n",a);
  }
  A) 32769 B) %8U C) 32767 D) -32767
  分析:格式字符必须小写,题中的"%8U"不会当作格式控制符,而是原样输出,变量a将没有对应的格式说明,也不会送出。本题正确答案为B
2. 八进制----> 十进制
  31.5)(八)
  整数部分: 3*81+1*80=25
  小数部分: 5*8-1=0.625
  所以(31.5)(八)=25.625)(十)
②十六进制----> 十进制
  19.A)(十六)
  整数部分:1*161+9*160=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++;
printf("%d,%d,%d",a,b,c);
  分析:本题考查条件运算符和增量运算符的概念,题中b<C为真,应取B++的值给A,B的值是先用后增1,所以A3,题中的C++没有执行到,C保持原值。
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个字符
  分析:"\\x41"中的"41"是十六进制数,即十进制的65,题中ch1存放的65是字母"A"ASCII码。
12. 赋值号左端不能为表达式;赋值号不能将字符串赋给某个变量(ch="green";);增量运算符“++”--”不能用于表达式(x=(a+b)++;
13. 以下程序输出的结果是________
  main()
  {
  int a=65535
  printf("du"aa)
  }
  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,另外注意是舍弃小数部分,而不是四舍五入。答案为 74.9000008 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表达式的值时,是按整型数据处理的(但不45入),所以程序是从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的值(此值只有01两种情况),接着再判断该值小于等于′Z′(ZASCII码是122),所以该式的值永远为1,程序输出LOW
19. 下列程序段中,正确的是(  )。
Aint x=0,y=10;              Bint 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                Dint 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后的表达式必须是常量或常量表达式,并且不能重复,而选项ABcase后的表达式中使用了关系、逻辑等变量表达式,因此,AB不正确。C中的case后虽然使用的都是常量表达式(用宏定义的值为常量),但是case 12case y-8的值均为12case后的值发生重复,因此,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++;
}} 
A1      B10        (C)6        (D)死循环,不能确定次数
解析:此题主要考察continuebreak的使用,执行continue语句后,结束本次循环,其后的语句不再执行,即循环控制变量a的值始终为0    【答案】 D
23. 下面循环语句的循环次数是(    )。
int  k=2;
while(k=0) printf("%d",k);
k--;printf("\n").
A无限次      B0      (C)1      (D)2
解析:表达式k=0是赋值表达式,不论k为何值,表达式k=0使k0,且此表达式的值也为0,不能进入循环。                      【答案】 B
24. 假定abint型变量,则执行以下语句后b的值为(      )。
  a=1;b=10;
  do{ b-=a;
a++;
}while(b--<0);
A9        B-2      (C)-1        (D)8
解析:b的初值为10,执行循环体后,b9a2,先判断b<0为假,退出循环,然后b--
使b8                  【答案】 D
25. C语言中,当函数调用时下列说法中正确的是(    )。
A实参和形参各自占用一个独立的存储单元。
B实参和形参共用存储单元
C可以由用户指定实参和形参是否共用存储单元
D由系统自动确定实参和形参是否共用存储单元
解析:C语言中,参数的传递方式是值传递,这就需要实参和形参各自占有一个独立的存储单元。在函数调用时,系统将实参的值赋给形参,而修改形参的值与实参变量无关。A
26. 以下说法不正确的是(    )。
A不同函数可以使用同名变量
B函数内定义的变量只在本函数内有效
C形式参数是局部变量
D复合语句中定义的变量在本函数范围内有效
解析:复合语句中定义的变量只在本复合语句范围内有效【答案】 D
27. auto关键字只能出现在复合语句或函数内,此类变量也只能在定义它的函数内存取,只有该函数被调用时才给他们分配存储空间,从函数返回时收回存储空间。而externstatic类型的变量的初始化和空间分配由编译系统确定,占用空间是永久性的。而int关键字不是存储类型的关键字。
28. .若一个外部变量的定义形式为static int x;那么,其中static的作用应该是(    )。
A将变量存放在静态存储区      B使变量x可以由系统自动初始化
C使x只能在本文件内引用      D使x的值可以永久保留
解析:作为一种修饰,令数组全部的值为0static仅是限制此类外部变量的引用范围:只能在定义它的文件范围内使用。而无论有无static修饰,外部变量都具有选项ABD三种特性。C
29. 9.若程序中定义了如下函数:
  float  fun(float a,float b)
  {return(a+b);  }
在下列选项中,错误的函数声明形式是(      )。
Afloat  fun(float a,float b)      Bfloat  fun(float ,float )

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。