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

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

ID:57057030

大小:73.00 KB

页数:57页

时间:2020-07-30

C语言常见错误与程序调试课件.ppt_第1页
C语言常见错误与程序调试课件.ppt_第2页
C语言常见错误与程序调试课件.ppt_第3页
C语言常见错误与程序调试课件.ppt_第4页
C语言常见错误与程序调试课件.ppt_第5页
资源描述:

《C语言常见错误与程序调试课件.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、常见错误和程序调试主要内容14.1常见错误分析14.2程序调试要真正学好C、用好C并不容易,“灵活”固然是好事,但也使人难以掌握,尤其是初学者往往出了错还不知怎么回事。C编译程序对语法的检查不如其他高级语言那样严格(这是为了给程序人员留下“灵活”的余地)。因此,往往要由程序设计者自己设法保证程序的正确性。调试一个C程序要比调试一个PASCAL或FORTRAN程序更困难一些。需要不断积累经验,提高程序设计和调试程序的水平。C语言有些语法规定和其他高级语言不同,学习过其他高级语言的读者往往按照使用其他高级语言

2、的习惯来写C程序,这也是出错的一个原因。14.1 常见错误分析下面将初学者在学习和使用C语言(不包括C++)时容易犯的错误列举出来,以起提醒的作用。这些内容在以前各章中大多已谈到,为便于查阅,在本章中集中列举,供初学者参考,以此为鉴。(1)忘记定义变量。如:main( ){x=3;y=6;printf("%d ",x+y);}(2)输入输出的数据的类型与所用格式说明符不一致。例如,若a已定义为整型,b已定义为实型。a=3;b=4.5;printf("%f %d",a,b);编译时不给出出错信息,但

3、运行结果将与原意不符,输出为0.000000 16402它们并不是按照赋值的规则进行转换(如把4.5转换成4),而是将数据在存储单元中的形式按格式符的要求组织输出(如b占4个字节,只把最后两个字节中的数据按%d,作为整数输出)。(3)未注意int型数据的数值范围。一般微型计算机上使用的C编译系统,对一个整型数据分配两个字节。因此一个整数的范围为-215~215-1,即-32768~32767。常见这样的程序段:intnum;num=32767;printf("%d",num+1);得到的却是-32768,

4、原因是32768超过32767。变成补码形式(4)输入变量时忘记使用地址符。如:scanf("%d%d",a,b);这是许多初学者刚学习C语言时一个常见的疏忽,或者说是习惯性的错误,因为在其他语言中在输入时只需写出变量名即可,而C语言要求指明“向哪个地址标识的单元送值”。应写成scanf("%d%d",&a,&b);(5)输入时数据的组织与要求不符。用scanf函数输入数据,应注意如何组织输入数据。假如有以下scanf函数:scanf("%d%d",&a,&b);有人按下面的方法输入数据:3,4这是错的

5、。数据间应该用空格来分隔。读者可以用printf("%d%d",a,b);来验证一下。应该用以下方法输入:34如果scanf函数为scanf("%d,%d",&a,&b);对scanf函数中格式字符串中除了格式说明符外,对其他字符必须按原样输入。因此,应按以下方法输入:3,4此时如果用“34”反而错了。还应注意,不能企图用scanf("inputa&b:%d,%d",&a,&b);想在屏幕上显示一行信息:inputa&b:然后在其后输入a和b的值,这是不行的。这是由于有的读者以为scanf具有BASI

6、C语言中的INPUT语句的功能(先输出一个字符串,再输入变量的值)。如果想在屏幕上得到所需的提示信息,可以另加一个printf函数语句:printf("inputa&b:");scanf("%d,%d",&a,&b);(6)误把“=”作为“等于”比较符。C编译系统将(a=b)作为赋值表达式处理,将b的值赋给a,然后判断a的值是否零,若为非零,则作为“真”;若为零作为假。如果a的值为3,b的值为4,a≠b,按原意不应输出“aequaltob”。而现在先将b的值赋给a,a也为4,赋值表达式的值为4。if语句中

7、的表达式值为真(非零),因此输出“aequaltob”。这种错误在编译时是检查不出来的,但运行结果往往是错的。而且由于习惯的影响,程序设计者自己往往也不易发觉。(7)语句后面漏分号。C语言规定语句末尾必须有分号。分号是C语句不可缺少的一部分。这也是和其他语言不同的。有的初学者往往忘记写这一分号。如:a=3b=4编译时,编译程序在“a=3”后面未发现分号,就把下一行“b=4”也作为上一行的语句的一部分,这就出现语法错误。有时编译时指出某行有错,但在该行上并未发现错误,应该检查上一行是否漏了分号。如果用复合语

8、句,有的学过PASCAL语言的读者往往漏写最后一个语句的分号,如:{t=a;a=b;b=t}在PASCAL中分号是两个语句间的分隔符而不是语句的一部分,而在C中,没有分号的就不是语句。(8)在不该加分号的地方加了分号。例如:if(a>b);printf("a is largerthanb");总之,在if、for、while语句中,不要画蛇添足多加分号。(9)对应该有花括弧的复合语句,忘记加花括弧。如:sum=0;i=1;

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

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

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