高分网 > 答案大全 > 其它答案 >

c语言易错知识点总结

时间: 炎婷2 其它答案

  C语言易错知识点整理

  1.变量应先定义后使用,例如:

  main( )

  { int i;

  for(i=1;i<=10;i++)

  s=s+i;

  printf("%d",s);}

  程序中用到了变量s但是没有对其定义数据类型,会提示错误。

  2. 自加自减(++ --)运算符的作用及表达式的值。

  例如:

  ① int i=3,j;

  j=i++;

  printf(“%d,%d”,i,j);

  此时i由1变成2,但是i++表达式的值为1,所以结果输出2,1。

  ② int i=3,k;

  k=++i;

  printf(“%d%d”,i,k);

  此时i由1变成2,但是i++表达式的值为2,所以结果输出2,2。

  3.两整数相除结果是整数,例如5/3=1,不是1.333333。

  4.赋值运算的过程:把赋值运算符左边的值转换成赋值运算符右边变量所要求的类型再赋值。

  例如:double x;int y;

  x=1.5;

  y=x;

  因为y为整型变量,所以y的值为1。

  5.注意赋值运算符和比较运算符的区别,例如:

  以下哪个表达式可以表示数x能被4整除( )

  A.x/4=0 B.x%4=0 C.x/4= =0 D. x%4= =0

  答案为C。

  6.变量的取值范围的表示。例如:

  若有定义int x;用C语言描述3

  A.33 D.x<5&&x>3

  答案为D。

  7.输入函数中同时输入多个数值型数据时,

  ①若格式说明字符串中没有分隔符,那么空格、制表符和换行符可作为数据之间的分割符;

  int a,b;

  scanf(“%d%d”,&a,&b);

  则输入数据时应为3 4或3<回车>4或3Tab4,两数据之间可以用空格,回车和Tab键作为分隔符。

  ②当格式说明字符串中有普通字符时,输入时普通字符要原样输入;

  例如:int a,b;

  scanf(“%d,%d”,&a,&b);

  则输入数据时应为3,4,其他的输入形式都不对;

  例如:int a,b;

  scanf(“a=%d,b=%d”,&a,&b);

  则输入数据时应为a=3,b=4,其他的输入形式都不对。

  8.if语句中当表达式为真时,如要执行多条语句时一定要把多条语句用{}括起来,例如:输入两整数,按数值的由小到大次序输出两个数。

  main( )

  { inta,b,t;

  scanf(“%d%d”,&a,&b);

  if(a>b) {t=a;a=b;b=t;}

  printf("%d%d ",a,b);}

  9.switch语句的执行过程中,当switch后的表达式与某个case后面的常量表达式的值相等时,就执行case后的语句直到最后一个语句为止。

  例如:以下程序运行后输出结果是( )

  main( )

  { int i=1;

  switch(5%3)

  { case 1:i++;

  case 2: i++;

  default: i++;}

  printf("%d",i);}

  A.2 B.3 C.4 D.5

  表达式5%3=2,所以应该执行case 2: i++; default: i++;结果i由1变成3。

  10.同学在理解执行switch过程时,比较容易犯的错误是以为表达式5%3的值为2,只执行case 2: i++;就结束,这是不对的,若要只执行case 2: i++;就结束,应该在case2: i++;后加上break语句。

  11.break语句和continue语句在循环结构中的作用与区别。

  ①break语句的作用是终止循环的执行。

  例如:int i,s=0;

  for(i=1;i<=30;i++)

  { if(i%7= =0) break;

  s=s+i;

  }

  printf("%d",s);

  程序是由1加到6,当i为7时满足i%7= =0,执行break;for语句就停止执行了,结果是s的值为1+2+3+…..6=21。

  ②continue语句的作用是跳过本次循环体中尚未执行的语句,循环并未结束。

  若把break改为continue:

  int i,s=0;

  for(i=1;i<=30;i++)

  { if(i%7= =0) continue;

  s=s+i;

  }

  printf("%d",s);

  程序由1加到6,当i为7时满足i%7==0,执行continue;那么i=7时本次循环体执行结束(即不执行s=s+i;7没有加到s中),接着执行i++,i=8,满足i<=30,再执行循环体,把8加到s中,所以程序的作用是把1~30之间,除去能被7整除的数相加。

  12.带参数的宏定义的替换过程:

  例如 #define S(r) r*r

  main( )

  { int a=1,b=2,c;

  c=S(a+b);

  printf("%d\n",c);}

  宏替换的过程中a+b相当为r, S(a+b)=a+b*a+b=1+2*1+2=5;很多同学在替换的过程中容易犯的错误是:把a+b表达式的值先算出来为3,a+b相当为r,然后带入S(a+b)=3*3=9。

  13.函数调用过程中参数的类型对实参的影响。

  ①参数是数值时,实参把值传递给形参,实参和形参占用不同的存储空间,所以形参的改变不会影响到实参。例如:

  void swap(int m,int n)

  {printf(“⑵m=%d,n=%d\n”,m,n);

  int t;

  t=m;m=n;n=t;

  printf(“⑶m=%d,n=%d\n”,m,n);

  }

  main( )

  { int a=3,b=5;

  printf(“⑴a=%d,b=%d\n”,a,b);

  swap(a,b);

  printf(⑷a=%d,b=%d\n”,a,b);

  }

  程序的结果为

  ⑴a=3,b=5

  ⑵m=3,n=5

  ⑶m=5,n=3

  ⑷a=3,b=5

  ②参数是数组名或地址时时,实参把地址传递给形参,实参和形参占用共同的存储空间,形参改变实参也会改变。例如:

  14.下面程序运行的结果是( )

  A. 53 B.55 C.33 D.35

  void swap(int c[ ])

  { int t;

  t=c[0];c[0]=c[1];c[1]=t;

  }

  main( )

  { int a[2]={3,5};

  swap(a);

  printf(“%d %d \n”,a[0],a[1]);

  }

  结果是a[0]=5,a[1]=3,答案是B。

  看了“c语言易错知识点总结”的还看了:

1.初三物理期末易错知识点总结

2.高中生物常见易错知识点汇编

3.高考化学易错知识点归纳

4.二十个语文易错知识点

5.高考英语易错知识点汇总

50248