C语言编程常见错误与程序调试.ppt

  1. 1、本文档共39页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
C语言编程常见错误与程序调试

C 语言  常见错误与程序调试 ② 逻辑错误。程序并无违背语法规则,但程序执行结果与原意不符。这是由于程序设计人员设计的算法有错或编写程序有错,通知给系统的指令与解题的原意不相同,即出现了逻辑上的混乱。例如:前面第9条错误: sum=0;i=1; while(i<=100) sum=sum+i; i++; 语法并无错误。但while语句通知给系统的信息是当i≤100时,执行“sum=sum+i;”。C系统无法辨别程序中这个语句是否符合作者的原意,而只能忠实地执行这一指令。这种错误比语法错误更难检查。要求程序员有较丰富的经验。 ③ 运行错误。程序既无语法错误,也无逻辑错误,但在运行时出现错误甚至停止运行。例如: int a ,b ,c; scanf(%d %d,a,b); c=b/a; printf(“c=%d\n”,c);  输入a和b的值, 输出b/a的值, 程序没有错。 但是如果输入a的值为0, 就会出现错误。 因此程序应能适应不同的数据, 或者说能经受各种数据的“考验” , 具有“健壮性”。 写完一个程序只能说完成任务的一半(甚至不到一半)。调试程序往往比写程序更难,更需要精力、时间和经验。常常有这样的情况:程序花一天就写完了,而调试程序二三天也未能完。有时一个小小的程序会出错五六处,而发现和排除一个错误,有时竟需要半天,甚至更多。希望大家通过实践掌握调试程序的方法和技术。 程 序 调 试 所谓程序调试是指对程序的查错和排错。 为了有效地进行程序调试,所编的程序应注意力做到以下几点: ①应当采用结构化程序方法编程,以增加可读性; ②尽可能多加注释,以帮助理解每段程序的作用; ③在编写复杂的程序时,不要将全部语句都写在main函数中,而要多利用函数,用一个函数来实现一个单独的功能。这样既易于阅读也便于调试,各函数之间除用参数传递数据这一渠道以外,数据间尽量少出现耦合关系,便于分别检查和处理。 调试程序一般应经过以下三个步骤  (1) 在完成源代码的编写后,通过上机发现错误称动态检查。根据编译时给出语法错误的信息(包括哪一行有错以及错误类型),找出程序中出错之处并改正之。应当注意的是:有时提示的出错行并不是真正出错的行,如果在提示出错的行上找不到错误的话应当到上一行再找。另外,有时提示出错的类型并非绝对准确,由于出错的情况繁多而且各种错误互有关联,因此要善于分析,找出真正的错误,而不要只从字面意义上死抠出错信息,钻牛角尖。 如果系统提示的出错信息多,应当从上到下逐一改正。有时显示出一大片出错信息往往使人感到问题严重,无从下手。其实可能只有一二个错误。例如,对所用的变量未定义,编译时就会对所有含该变量的语句发出出错信息。只要加上一个变量定义,所有错误都消除了。 常见错误分析 下面将初学者在学习和使用C语言时容易犯的错误列举出来,以起提醒的作用。供初学者参考,并引以为戒。 (1) 忘记定义变量。如: main() { x=3; y=6; printf(%d\n,x+y); } C要求对程序中用到的每一个变量都必须事先进行定义,指明其数据类型。 上面程序中没有对x、y进行定义。应在函数体的开头加“int x,y;”,除非x,y已定义为外部变量。 (2) 输入输出的数据的类型与所用格式说明符不一致。 例如,int a; double b; a=3; b=4.5; printf(%f %d\n,a,b); 编译时不给出出错信息,但运行结果将与原意不符,输出为 0.000000 1074921472 它们并不会自动地进行数据类型转换(如把4.5转换成4),而是将数据在存储单元中的形式按格式符的要求组织输出(如b占4个字节,只把最后两个字节中的数据按%d,作为整数输出,注:对2字节的int而言)。 (3) 在对变量赋值时需注意变量所属数据类型的取值范围。 譬如,C编译系统对一个短整型数据分配两个字节。因此一个短整数的范围为 -215~215-1,即-32768~32767。 则程序段: short num; num=89101; printf(%d,num); 得到的却是23565,原因是89101已超过32767。两个字节容纳不下89101,则将高位截去。见图1。相当于将89101减去216(即16位二进制1所形成的数),89101-65536=23565。 注意:这里的讨论以short为例,在32计算机中int数据占据4个字节,取值范围是:–2,147,483,648 到 2,147,483,647。 图1 有时还会出现负数。例如 num=196607; 输出得-1。因为196607的二进制形式为 0000 0000 0000 0010 1111 1111 1111 1111

文档评论(0)

pangzilva + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档