- 1、本文档共60页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
谭浩强C语言第16章课件.ppt
第16章 常见错误和程序调试;要真正学好C、用好C并不容易,“灵活”固然是好事,但也使人难以掌握,尤其是初学者往往出了错还不知怎么回事。C编译程序对语法的检查不如其他高级语言那样严格(这是为了给程序人员留下“灵活”的余地)。因此,往往要由程序设计者自己设法保证程序的正确性。调试一个C程序要比调试一个PASCAL或FORTRAN程序更困难一些。需要不断积累经验,提高程序设计和调试程序的水平。
C语言有些语法规定和其他高级语言不同,学习过其他高级语言的读者往往按照使用其他高级语言的习惯来写C程序,这也是出错的一个原因。
;16.1 常见错误分析
下面将初学者在学习和使用C语言(不包括C++)时容易犯的错误列举出来,以起提醒的作用。这些内容在以前各章中大多已谈到,为便于查阅,在本章中集中列举,供初学者参考,以此为鉴。
(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型数据的数值范围。
一般微型计算机上使用的C编译系统,对一个整型数据分配两个字节。因此一个整数的范围为; -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。; 数据。假如有以下scanf函数:
scanf(%d%d,a,b);
有人按下面的方法输入数据:
3,4
这是错的。数据间应该用空格来分隔。读者可以用
printf(%d%d,a,b);
来验证一下。应该用以下方法输入:
34
如果scanf函数为
scanf(%d,%d,a,b);
对scanf函数中格式字符串中除了格式说明符外,; 对其他字符必须按原样输入。因此,应按以下方法输入:
3,4
此时如果用“34”反而错了。还应注意,不能企图用
scanf(input a b:%d,%d,a,b);
想在屏幕上显示一行信息:
input a b:
然后在其后输入a和b的值,这是不行的。这是由于有的读者以为scanf具有BASIC语言中的INPUT语句的功能(先输出一个字符串,再输入变量的值)。如果想在屏幕上得到所需的提示信息,可以另加一个printf函数语句:printf(input a b:);;scanf(%d,%d,a,b);
(6) 误把“=”作为“等于”比较符。
在许多高级语言中,用“=”符号作为关系运算符“等于”。例如,在BASIC或PASCAL程序中都可以写
if(a=b) then…
但在C语言中,“=”是赋值运算符,“==”才是关系运算符“等于”。如果写成
if(a=b) printf(a equal to b);
C编译系统将(a=b)作为赋值表达式处理,将b的值赋给a,然后判断a的值是否零,若为非零,则作为“真”;若为零作为假。如果a的值为3,b的值为4,; a≠b,按原意不应输出“ae q u a lt ob”。而现在先将b的值赋给a,a也为4,赋值表达式的值为4。if语句中的表达式值为真(非零),因此输出“ae q u a lt o b”。
这种错误在编译时是检查不出来的,但运行结果往往是错的。而且由于习惯的影响,程序设计者自己往往也不易发觉。
(7) 语句后面漏分号。
C语言规定语句末尾必须有分号。分号是C语句不可缺少的一部分。这也是和其他语言不同的。有的初学者往往忘记写这一分号。如:;a=3
b=4
编译时,编译程序在“a=3”后面未发现分号,就
您可能关注的文档
- 记叙文写作之情感真挚.ppt
- 方圆商砼商品混凝土扩建报告表公示环评报告.pdf
- 记梁任公先生一次演讲2jxkj201012184449.ppt
- 讲义2016年厚大真题解析班民法钟秀勇讲义课件.ppt
- 方山乡奇云山水库引水工程方山乡奇云山水库方山乡人民政府杭州天川环保科环评报告.pdf
- 方庄综合停车楼建设环评报告.pdf
- 方林汽车检测检测汽车万辆服务环境影响评价604环评报告.pdf
- 讲友善思利他创和谐主题班会说课课件.pptx
- 讲座肿瘤筛查课件.ppt
- 方正县万宝畜牧新建头可繁母牛标准化规模养殖基地建设报批稿环评报告.pdf
- 湖南省长沙市长郡中学2023届高三二模数学试题(解析版).docx
- 第七章《万有引力与宇宙航行》高分必刷巩固达标检测卷(基础版).doc
- 题组层级快练作业31.doc
- 第五章 交变电流(能力提升)-2020-2021学年高二物理单元测试定心卷(人教版选修3-2)(原卷版).docx
- 题组层级快练作业68.doc
- 广东省深圳市2023届高三二模数学试题(原卷版).docx
- 课时1.3.1 电解的原理(精准练习-基础练)-2021-2022学年高二化学同步学习高效学与练(鲁科版2019选择性必修1)(解析版).doc
- 4.3 人类对太空的不懈探索 教案-2021-2022学年鲁科版(2019)高中物理必修第二册.docx
- 检测卷 氯溴碘及其化合物-3届高考轮复习考点过关检测卷解析.docx
- 高一下期末模块综合测试题【01卷】(解析版).docx
文档评论(0)