c语言初学者:C语言初学者存在的误区



本人通过对C学习积累了些C编程时常犯写给各位学员以供参考
 
  1.书写标识符时忽略了大小写字母区别
 
  ()
 
  { a=5;prf("%d"A);}编译把a和A认为是两个区别变量名而显示出错信息C认为大写字母和小写字母是两个区别习惯上符号常量名用大写变量名用小写表示以增加可读性
 
  2.忽略了变量类型进行了不合法运算
 
  ()
 
  { float ab;prf("%d"a%b);} %是求余运算得到a/b整余数整型变量a和b可以进行求余运算而实型变量则不允许进行“求余”运算
 
  3.将常量和串常量混淆
 
  char c;c="a";在这里就混淆了常量和串常量常量是由对单引号括起来单个串常量是对双引号括起来序列C规定以“\”作串结束标志它是由系统自动加上所以串“a”实际上包含两个:“a'和‘\'而把它赋给变量是不行
 
  4.忽略了“=”和“区别
 
  在许多高级语言中用“=”符号作为关系运算符“等于”如在BASIC中可以写
 
   (a=3) then …
 
  但C语言中“=”是赋值运算符”是关系运算符如:
 
   (a3) a=b;前者是进行比较a是否和3相等后者表示如果a和3相等把b值赋给a.由于习惯问题初学者往往会犯这样
 
  5.忘记加分号
 
  分号是C语句中不可缺少部分语句末尾必须有分号
 
  a=1 b=2编译时编译在“a=1”后面没发现分号就把下行“b=2”也作为上行语句部分这就会出现语法改错时有时在被指出有错行中未发现就需要看下上行是否漏掉了分号
 
  { z=x+y;t=z/100;prf("%f"t);}对于复合语句来说最后个语句中最后分号不能忽略不写(这是和PASCAL区别)
 
  6.多加分号
 
  对于个复合语句如:
 
  { z=x+y;t=z/100;prf("%f"t);};复合语句花括号后不应再加分号否则将会画蛇添足
 
  又如:
 
   (a%30);I;本是如果3整除a则I加1.但由于 (a%30)后多加了分号语句到此结束将执行I语句不论3是否整除aI都将自动加1.
 
  再如:
 
  for (I=0;I
 
  本意是先后输入5个数每输入个数后再将它输出由于for()后多加了个分号使循环体变为空语句此时只能输入个数并输出它
 
  7.输入变量时忘记加地址运算符“&”
 
   ab;scanf("%d%d"ab);这是不合法Scanf作用是:按照a、b在内存地址将a、b值存进去“&a”指a在内存中地址
 
  8.输入数据方式和要求不符
 
  ①scanf("%d%d"&a&b);
 
  输入时不能用逗号作两个数据间分隔符如下面输入不合法:
 
  34
 
  输入数据时在两个数据的间以个或多个空格间隔也可用回车键跳格键tab.
 
  ②scanf("%d%d"&a&b);
 
  C规定:如果在“格式控制”串中除了格式介绍说明以外还有其它则在输入数据时应输入和这些相同下面输入是合法:
 
  34
 
  此时不用逗号而用空格或其它是不对
 
  3 4 3:4
 
  又如:
 
  scanf("a=%db=%d"&a&b);输入应如以下形式:
 
  a=3b=4
 
  9.输入格式和要求不
 
  在用“%c”格式输入“空格”和“转义”都作为有效输入
 
  scanf("%c%c%c"&c1&c2&c3);
 
  如输入a b c
 
  “a”送给c1“ ”送给c2“b”送给c3%c只要求读入后面不需要用空格作为两个间隔
 
  10.输入输出数据类型和所用格式介绍说明符不
 
  例如a已定义为整型b定义为实型
 
  a=3;b=4.5;prf("%f%d\n"ab);编译时不给出出错信息但运行结果将和原意不符这种尤其需要注意
 
  11.输入数据时企图规定精度
 
  scanf("%7.2f"&a);这样做是不合法输入数据时不能规定精度
 
  12.switch语句中漏写语句
 
  例如:根据考试成绩等级打印出百分制数段
 
  switch(grade)
 
  { 'A':prf("85~100\n"); 'B':prf("70~84\n"); 'C':prf("60~69\n"); 'D':prf("由于漏写了语句只起标号作用而不起判断作用因此当grade值为A时prf在执行完第个语句后接着执行第 2、 3、 4、 5个prf语句正确写法应在每个分支后再加上“;”例如
 
   'A':prf("85~100\n");;13.忽视了while和do-while语句在细节上区别
 
  (1)()
 
  { a=0I;scanf("%d"&I);while(I(2)
 
  ()
 
  { a=0I;scanf("%d"&I);do {a=a+I;I;}while(I可以看到当输入I值小于或等于10时 2者得到结果相同而当I>10时 2者结果就区别了while循环是先判断后执行而do-while循环是先执行后判断对于大于10数while循环次也不执行循环体而do-while语句则要执行次循环体


 
  14.定义时误用变量
 
   n;scanf("%d"&n); a[n];名后用方括号括起来是常量表达式可以包括常量和符号常量即C不允许对大小作动态定义
 
  15.在定义将定义“元素个数”误认为是可使最大下标值
 
  ()
 
  { a[10]={12345678910};prf("%d"a[10]);} C语言规定:定义时用a[10]表示a有10个元素其下标值由0开始所以元素a[10]是不存在
 
  16.未使用静态存储
 
   a[3]={012};这样是不对C语言规定只有静态存储()和外部存储(exterm)才能应改为:
 
   a[3]={012};17.在不应加地址运算符&位置加了地址运算符
 
  scanf("%s"&str);C语言编译系统对处理是:名代表该起始地址且scanf输入项是不必要再加地址符&.应改为:
 
  scanf("%s"str);18.同时定义了形参和局部变量
 
   max(xy)
 
   xyz;{ z=x>y?x:y;(z);}形参应该在体外定义而局部变量应该在体内定义应改为:
 
   max(xy)
 
   xy;{ z;z=x>y?x:y;(z);}
Tags:  课件使用存在的误区 c语言初学者入门 c语言初学者论坛 c语言初学者

延伸阅读

最新评论

发表评论