最新[工学]C语言程序设计实例教程第2版丁爱萍第13章 程序调试与常见错误分析教学讲义ppt课件.ppt

最新[工学]C语言程序设计实例教程第2版丁爱萍第13章 程序调试与常见错误分析教学讲义ppt课件.ppt

ID:62078256

大小:973.50 KB

页数:67页

时间:2021-04-14

最新[工学]C语言程序设计实例教程第2版丁爱萍第13章 程序调试与常见错误分析教学讲义ppt课件.ppt_第1页
最新[工学]C语言程序设计实例教程第2版丁爱萍第13章 程序调试与常见错误分析教学讲义ppt课件.ppt_第2页
最新[工学]C语言程序设计实例教程第2版丁爱萍第13章 程序调试与常见错误分析教学讲义ppt课件.ppt_第3页
最新[工学]C语言程序设计实例教程第2版丁爱萍第13章 程序调试与常见错误分析教学讲义ppt课件.ppt_第4页
最新[工学]C语言程序设计实例教程第2版丁爱萍第13章 程序调试与常见错误分析教学讲义ppt课件.ppt_第5页
资源描述:

《最新[工学]C语言程序设计实例教程第2版丁爱萍第13章 程序调试与常见错误分析教学讲义ppt课件.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、[工学]C语言程序设计实例教程第2版丁爱萍第13章程序调试与常见错误分析13.1程序调试13.1.1程序调试的步骤所谓程序调试,是指对程序的查错和排错。调试程序一般应经过以下几个步骤。1.人工检查,即静态检查在写好一个程序以后,不要匆匆忙忙上机,而应对纸面上的程序进行人工检查。这一步是十分重要的,它能发现程序设计人员由于疏忽而造成的多处错误。而这一步骤往往容易被忽视。有的用户总希望把一切推给计算机系统去做,但这样就会多占用机器时间。而且,作为一个程序设计人员应当养成严谨科学的作风,每一步都要严格把关,不要把问题留给后面的工序。为了更有效地进行人工检查,所编的程序应

2、力求做到以下几点:(1)应当采用结构化程序方法编程,以增加可读性。(2)尽可能多地加注释,以帮助理解每段程序的作用。(3)在编写复杂的程序时,不要将全部语句都写在main函数中,而要多利用函数,用一个函数来实现一个单独的功能。这样既易于阅读,也便于调试,各函数之间除用参数传递数据外,数据间应尽量少出现耦合关系,以便于分别检查和处理。公式求根x的值,当a0和b2-4ac>0时,能得出正确结果;当a=0或b2-4ac<0时,就得不到正确结果(假设程序中未对a=0作防御处理以及未作复数处理)。因此,应当把程序可能遇到的多种方案都一一试到。再如,if语句有两个分支,有可能

3、在流程经过其中一个分支的结果正确,而经过另一个分支时结果不正确。这些都必须考虑周全。13.1.2检查和分析错误原因运行结果不对,大多属于逻辑错误。对这类错误往往需要仔细检查和分析才能发现,可以采用的方法有以下几种:(1)如果在程序中没有发现问题,可以检查流程图有无错误,即算法有无问题,如有,就需改正,接着修改程序。将程序与流程图(或伪代码)仔细对照,如果流程图是正确的话,则是程序写错了,这很容易被发现的。例如,复合语句忘记写花括弧“{}”,只要对照流程图很快就能发现。(2)如果实在找不到错误,可以采取“分段检查”的方法。在程序不同位置设几个printf函数语句,输

4、出有关变量的值,逐段往下检查,直到找到在某一段中数据不对的段为止。这时就已经把错误局限在这一段中了。不断缩小“查错区”,就可能发现错误所在。(3)也可以用第9章介绍过的“条件编译”命令来进行程序调试。在程序调试阶段,若干printf函数语句要进行编译并执行。当调试完毕时,这些语句不再编译,也不再被执行了。这种方法可以不必一一删除printf函数语句,因此可以提高效率。(4)有的系统还提供debug(调试)工具,跟踪流程并给出相应信息,使用更为方便,相关内容请查阅有关手册。总之,程序调试是一项细致深入的工作,需要下功夫、动脑子、善于累积经验。在程序调试过程中往往反映

5、出一个人的水平、经验和科学态度。上机调试程序的目的决不是为了“验证程序的正确性”,而是“掌握调试方法和技术”。13.2常见错误分析下面列举出初学者易犯的错误,以提醒读者注意。(1)误把“=”作为“等于”比较符。C语言中,“=”是赋值运算符,“==”才是关系运算符“等于”。如果写成if(a=b)printf("aequaltob");C编译程序会将(a=b)作为赋值表达式处理,将b的值赋给a,然后判断a的值是否为0,若为非0,则作为“真”;若为0,则作为“假”。如果a的值为3,b的值为4,a≠b,按原意不应输出“aequaltob”。而现在先将b的值赋给a,a也为4

6、,赋值表达式的值为4。if语句中的表达式值为“真”(非0),因此输出“aequaltob”。这种错误在编译时是检查不出来的,但运行结果往往是错的,而且,由于习惯的影响,程序设计者自己往往也不易发觉。(2)使用自加(++)和自减(--)运算符时出错。例如:main(){int*p,a[5]={1,3,5,7,9};p=a;printf("%d",*p++);}不少人认为“*p++”的作用是先使p加1,即指向第1个元素a[1]处,然后输出第一个元素a[1]的值3。其实应该是,先执行p++,而*p就是第0个元素a[0]的值1。结论是,先输出a[0]的值,然后再使p加1。

7、如果是*(++p),则先使p指向a[1],然后输出a[1]的值。(3)混淆字符和字符串的表示形式。例如:charsex;sex="M";sex是字符变量,只能存放一个字符。而字符常量的形式是用单引号括起来的,应改为sex='M';"M"是用双引号括起来的字符串,它包括两个字符M和,无法存放到字符变量sex中。(4)语句后面漏分号。C语言规定语句末尾必须有分号。分号是C语句中不可缺少的一部分。这也是和其他语言的不同之处。有的初学者往往忘记写这一分号。如:a=3b=4编译时,编译程序在a=3后面未发现分号,就把下一行b=4也作为上一行的语句的一部分,这样就会出现语

8、法错误。有

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。