C程序设计(第四版)第11章常见错误分析概论.ppt

C程序设计(第四版)第11章常见错误分析概论.ppt

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

要真正学好C、用好C并不容易,“灵活”固然是好事,但也使人难以掌握,尤其是初学者往往出了错还不知怎么回事。C编译程序对语法的检查不如其他高级语言那样严格(这是为了给程序人员留下“灵活”的余地)。因此,往往要由程序设计者自己设法保证程序的正确性。调试一个C程序要比调试一个PASCAL或FORTRAN程序更困难一些。需要不断积累经验,提高程序设计和调试程序的水平。 下面是常见的一些错误:;(1) 忘记定义变量。如: main( )   {x=3; y=6; printf(%d\n ,x+y); };C要求对程序中用到的每一个变量都必须定义其类型,上面程序中没有对x、y进行定义。应在函数体的开头加int x,y;这是学过BASIC和FORTRAN语言的读者写C程序时常见的一个错误。在BASIC语言中,可以不必先定义变量类型就可直接使用。在FORTRAN中,未经定义类型的变量按隐含的I-N规则决定其类型,而C语言则要求对用到的每一个变量都要在本函数中定义(除非已定义为外部变量)。;(2) 输入输出的数据的类型与所用格式说明符不一致。 例如,若a已定义为整型,b已定义为实型。 a=3;b=4.5; printf(%f %d\n,a,b); 编译时不给出出错信息,但运行结果将与原意不符,输出为 0.000000 16402 它们并不是按照赋值的规则进行转换(如把4.5转换成4),而是将数据在存储单元中的形式按格式符的要求组织输出(如b占4个字节,只把最后两个字节中的数据按%d,作为整数输出)。;(3) 未注意int型数据的数值范围。 在Turbo C编译系统,对一个int整型数据分配两个字节。因此一个整数的范围为 -215~215-1,即-32768~32767。常见这样的程序段: int num;  num=89101;   printf(%d,num); 得到的却是23565,原因是89101已超过32767。两个字节容纳不下89101,则将高位截去。见图16.1。即将超过低16位的数截去。即将89101减去216(即16位二进制所形成的模)。89101-65536=23565。; 有时还会出现负数。例如 num=196607; 输出得-1。因为196607的二进制形式为 00 00 00 00 00 00 00 1011 11 11 11 11 11 11 11 去掉高位10,低16位的值是-1(-1的补码是:1111111111111111)。   对于超过整个范围的数,要用long型,即改为 long int num; num=89101; printf(%ld,num); 请注意,如果只定义num为long型,而在输出时仍用“%d”说明符,仍会出现以上错误。 ;(4) 输入变量时忘记使用地址符。如: scanf(%d%d,a,b); 这是许多初学者刚学习C语言时一个常见的疏忽,或者说是习惯性的错误,因为在其他语言中在输入时只需写出变量名即可,而C语言要求指明“向哪个地址标识的单元送值”。应写成scanf(%d%d,a,b);;(5) 输入时数据的形式与要求不符。 用scanf函数输入数据,应注意如何组织输入数据。假如有以下scanf函数: scanf(%d%d,a,b); 有人按下面的方法输入数据: 3,4 这是错的。数据间应该用空格来分隔。应该用以下方法输入: 3 4(中间有空格); 如果scanf函数为 scanf(%d,%d,a,b); 对scanf函数中格式字符串中除了格式说明符外, 对其他字符必须按原样输入。因此,应按以下方法输入: 3,4 此时如果用“3 4”反而错了。;(6) 在用scanf函数向字符数组输入数据时,在数组名前面多加了,例如: char a[20]; scanf(“%s”, a); 在对变量输入数据时应当加,例如a,但是数组名本身已经表示地址,不需要再加,应当写成: scanf(“%s”, a); ;(7) 在用scanf函数向数值型数组输入数据时,直接用数组名,例如: int a[20]; scanf(“%d”, a); 这是错误的。数值型的数组不能一次性整体输入,只能一个个元素单独输入,应当写成: int a[20]; int i; for(i=0;i20;i++) scanf(“%d”, a[i]); ;(8) 语句后面漏分号,例如: a=3 b=4; (9) 在预处理指令后面加分号,例如: #include stdio.h; 注意预处理不是语句,是指令,所以不需要分号。;(10) 在不该加分号的地方加分号,例如: if (ab); printf(“a is larger than b\n”); 这个写法相当于if的条件成立时,执行空语句(就

文档评论(0)

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

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

1亿VIP精品文档

相关文档