C语言常见错误分析.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
* 常见错误分析 C 语言程序设计 * 程序出错有三种情况: ① 语法错误。指违背了C语法的规定,对这类错误,编译程序一般能给出“出错信息”,并且告诉你在哪一行出错。只要细心,是可以很快发现并排除的。 ② 逻辑错误。程序并无违背语法规则,但程序执行结果与原意不符。这是由于程序设计人员设计的算法有错或编写程序有错,通知给系统的指令与解题的原意不相同,即出现了逻辑上的混乱。 * ③ 运行错误。程序既无语法错误,也无逻辑错误,但在运行时出现错误甚至停止运行。例如: 例如: int a ,b ,c; scanf(%d %d,a,b); c=b/a; printf(c=%d\n,c);  如果输入a的值为0, 就会出现错误。 因此程序应能适应不同的数据, 或者说能经受各种数据的“考验” , 具有“健壮性” * (1) 忘记定义变量 void main( )  {x=3; y=6; printf(%d\n ,x+y); } C要求对程序中用到的每一个变量都必须定义其类型,上面程序中没有对x、y进行定义。应在函数体的开头加: int x,y; * (2) 输入输出数据的类型与所用格式说明符不一致 例如。 int a=3; float b=4.5; printf(%f %d\n,a,b); 编译时不给出出错信息,但运行结果将与原意不符,输出为 0.000000 16402 并不是按照赋值的规则进行转换(如把4.5转换成4),而是将数据在存储单元中的形式按格式符的要求组织输出(如b占4个字节,只把最后两个字节中的数据按%d,作为整数输出) * (3 )输入变量时忘记使用地址符 int a,b; scanf(%d%d,a,b); C语言要求指明“向哪个地址标识的单元送值”。应写成 scanf(%d%d,a,b); * (4) 输入时数据的组织与要求不符 假如有以下scanf函数: scanf(%d%d,a,b); 有人按下面的方法输入数据: 3,4 对scanf函数中格式字符串中除了格式说明符外,对其他字符必须按原样输入。 想在屏幕上显示一行信息: input a b: scanf(input a b:%d,%d,a,b); 可以另加一个printf函数语句:printf(input a b:); scanf(%d,%d,a,b); * (5) 误把“=”作为“等于”比较符 在C语言中,“=”是赋值运算符,“==”才是关系运算符“等于”。如果写成 if(a=b) printf(a equal to b); C编译系统将(a=b)作为赋值表达式处理,将b的值赋给a,然后判断a的值是否零,若为非零,则作为“真”;若为零作为假。如果a的值为3,b的值为4 这种错误在编译时是检查不出来的,但运行结果往往是错的。而且由于习惯的影响,程序设计者自己往往也不易发觉。 * (6) 语句后面漏分号 a=3 b=4 {t=a; a=b; b=t   } C语言规定语句末尾必须有分号。编译时,编译程序在“a=3”后面未发现分号,就把下一行“b=4”也作为上一行的语句的一部分,这就出现语法错误。有时编译时指出某行有错,但在该行上并未发现错误,应该检查上一行是否漏了分号。 * (7)在不该加分号的地方加了分号 if(a>b);    printf(a is larger than b\n); //当a>b时输出“a is larger than b”的信息。 由于在if(a>b)后加了分号,因此if语句到此结束。即当(a>b)为真时,执行一个空语句。本来想a≤b时不输出上述信息,但现在printf函数语句并不从属于if语句,而是与if语句平行的语句。不论a>b还是a≤b,都输出“a is larger than b”。 * 又如先后输入10个数,每输入一个数后输出它的平方值:   for(i=0;i<10;i++); {scanf(%d,x); printf(%d\n,x*x); } 由于在for( )后加了一个分号,使循环体变成了空语句。只能输入一个整数并输出它的平方值。 在if、for、while语句中,不要画蛇添足多加分号。 * (8) 对应该有花括弧的复合语句,忘记加花括弧 实现1+2+…+100,即∑i。 sum=0;    i=1;    while(i<=100) sum=sum+i; i++; 上面的语句只是重复了sum+1的操作,而且循环永不终止。 应改为 while(i<=100) {sum

文档评论(0)

5522280 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档