程序错误和编程风格.ppt
《程序错误和编程风格.ppt》由会员分享,可在线阅读,更多相关《程序错误和编程风格.ppt(41页珍藏版)》请在三一办公上搜索。
1、C语言程序设计(Programming in C),程序错误和编程风格,程序错误编程风格,程序错误,一个编程大师说:“任何一个程序,无论它多么小,总存在着错误。”初学者不相信大师的话,他问:“如果一个程序小得只能执行一个简单的功能,那会怎样?”“这样的程序没有意义,”大师说,“但如果这样的程序存在的话,操作系统最后将失效,产生一个错误。”初学者不满足,他问:“如果操作系统不失效,那么会怎么样?”“没有不失效的操作系统,”大师说,“但如果这样的操作系统存在的话,硬件最后将失效,产生一个错误。”初学者仍不满足,再问:“如果硬件不失效,那么会怎样?”大师长叹一声道:“没有不失效的硬件。但如果这样的硬
2、件存在的话,用户就会想让那个程序做一件不同的事,这件事也是一个错误。”没有错误的程序世间难求。【James 1999】,C程序错误,程序中的错误可分为语法错误逻辑错误(语义错误)运行错误,C程序错误,语法错误,逻辑错误(语义错误),语法错误指编程时违背了C语法的规定,对这类错误,编译程序一般都能够给出“出错信息”,并且告诉在哪一行出错及出错的类型。只要仔细检查,可以很快发现并排除这类错误。,程序并没有违背语法规则,但程序的执行结果与预期不符。这是由于程序与设计人员的本意不相符,即出现逻辑错误(或语义错误)。,运行错误,运行时发生的、与运行状态或环境有关的错误。,C程序中常见错误,使用的变量没有
3、定义变量没有赋值初就直接使用输入输出的数据类型与所用格式说明符不一致超出数据范围输入变量时忘记使用地址符号输入时数据的组织方式与要求不符“=”与“=”混淆 语句的分号缺少或放置错误 缺少“”符号引用错误,(、)、括号不配对 引用数组元素越界.,C程序中常见错误,使用的变量没有定义(语法错),例如:,正确:main()int x,y;x=3;y=x+5;,错误:x、y没有定义main()x=3;y=x+5;,C/C+规定:任何变量都必须在使用前定义,否则编译时会出错。,C程序中常见错误(续),变量没有赋初值就直接使用(逻辑错),例如:,错误:sum没有赋初值int addition(int n)
4、int i;int sum;for(i=0;i n;i+)sum+=i;return(sum);,正确:int addition(int n)int i;int sum=0;for(i=0;i n;i+)sum+=i;return(sum);,C程序中常见错误(续),变量赋初值:累加的初值应为0、连乘的初值应为1,例如:,求累加和:sum=0;for(k=10;k=20;k+)sum=sum+k;,求累乘积:fact=1;for(k=1;k=8;k+)fact=fact*k;,求累加和:sum=0;for(k=10;k=20;k+)sum=sum+k;,求累乘积:fact=1;for(k=1;
5、k=8;k+)fact=fact*k;,C程序中常见错误(续),输入输出的数据类型与所用格式说明符不一致(逻辑错),例如:,错误:数据输出时的格式错误main()int a=3;float b=4.5;printf(%f%dn,a,b);,正确:main()int a=3;float b=4.5;printf(%d%fn,a,b);,TC2.0,C程序中常见错误(续),超出数据范围(逻辑错),例如:,错误:x的有效范围在-128127之间main()char x;x=300;,300101001011002,C程序中常见错误(续),输入变量时忘记使用地址符号(本来是语法错,表现为逻辑错),例如
6、:,错误:scanf函数的实参格式main()int a,b;scanf(%d%d,a,b);printf(%d%d,a,b);,正确:main()int a,b;scanf(%d%d,C程序中常见错误(续),输入时数据的组织方式与要求不符,例如:,main()int a,b;scanf(%d,%d,运行时输入:35 12,C程序中常见错误(续),误把“=”作为关系运算符“=”,例如:,错误:关系运算与赋值运算混淆if(a=b)c=0;else c=1;,正确:if(a=b)c=0;else c=1;,1.为何if语句中的条件总是成立或不成立?在排除可能出现的逻辑错误外,有可能与条件表达式书写
7、不正确有关。例如:if(x=3)x=x+8;这时的条件x=3始终成立,语句x=x+8也总是执行。要判断x是否等于3就必须写成x=3。又如:if(x=0)x=x+8;这时条件x=0总是不成立,语句x=x+8永远不执行。要判断x是否等于0就必须写成x=0或!x。同样,在其它使用条件的语句中也要注意类似问题。,C程序中常见问题-if语句,2.为什么会出现if-else不匹配?这种错误的原因可能比较复杂;总的原则是:(1)有一个else必有一个if,所以首先在数量上要匹配(2)逻辑关系要合理;若执行的是复合语句,不要漏掉复合语句标志。例如:if(xy)t=a;a=b;b=t;else t=m;编译时就
8、会提示出错信息,正确的写法:if(xy)t=a;a=b;b=t;else t=m;(3)若条件不成立时要求执行的语句有多条,else后必须为复合语句。例如:if(xy)t=a;a=b;b=t;else t=m;m=n;n=t;,C程序中常见问题-if语句,C程序中常见错误(续),语句的分号放置错误,例如:,语法错误:缺少“;”main()unsigned int i,sum;sum=0;for(i=0;i10;i+)sum+=i,正确:main()unsigned int i,sum;sum=0;for(i=0;i 10;i+)sum+=i;,逻辑错误:“;”放错位置main()unsigne
9、d int i,sum=0;for(i=0;i 10;i+);sum+=i;,C程序中常见错误(续),语句的分号放置错误,例如:,正确:main()unsigned int i,sum;sum=0;for(i=0;i 10;i+)sum+=i;,逻辑错误:“;”放错位置main()unsigned int i,sum;sum=0;for(i=0;i 10;i+);sum+=i;,C程序中常见错误(续),“”的使用问题,例如:,逻辑错误:循环体部分没有使用”sum=0;i=1;while(i=10)sum+=i;i+;,正确:sum=0;i=1;while(i=10)sum+=i;i+;,C程序
10、中常见错误(续),符号引用错误,(、)、括号不配对 引用数组元素超界.,数组下标越界错误:int a10;for(i=0;i=10;i+)scanf(%d,正确方式:int a10;for(i=0;i10;i+)scanf(%d,C程序中常见错误(续),整除运算的结果依然是整数 字符与字符串,9/2的结果为4,而9.0/2的结果为4.5。因此,需要对9或2进行强制类型转换,以得到4.5,即 9/(float)2=4.5 特别注意:1/3+1/3+1/3的结果为0。,字符常量是由单引号括起的一个字符,如:s。而s是字符串常量,由双引号括起,包含两个字符:s和0。使用时不能混淆,例如:char c
11、,p;p=s;/正确c=s;/错误,字符变量c只能存放一个字符,(1)+和-运算只能适用于变量(尤其是整型变量)例如:n*m+正确的,(n*m)+是错误的,因为(n*m)是表达式。(2)前置和后置有区别:int n,post,pre;n=2;post=n+;/执行后post为2,n为3 n=2;pre=+n;/执行后pre为3,n为3,C程序中常见问题-+/-运算,C程序中常见问题-定长数组与变长数组,定义定长数组:int a5;,变长数组:int n;int an;,定义数组并初始化数组元素:int a5=1,2,3,4,5;,访问数组元素(写、读):for(i=0;i 5;i+)ai=i*
12、2;for(i=0;i 5;i+)printf(%d,ai);,变长数组:int n=20;int an;,C99标准规定:定义数组时,其大小可以不确定,但不是所有的编译器都支持该特性,C程序中常见问题-字符数组 与 字符串,定义字符数组:char name5;,定义字符数组及初始化:char name15=c,h,i,n,a;char name2=c,h,i,n,a;,定义字符数组及初始化:char name1=c,h,i,n,a,0;char name2=china;Char name3=china;,scanf(%s,name);或 gets(name);读入一个字符串时,系统会自动加上
13、结束标志0。,C程序中常见问题-if语句,Code 1:if(mark=90)printf(优);else if(mark=80)printf(良);else if(mark=70)printf(中);else if(mark=60)printf(及格);else printf(不及格);,例如:百分制成绩mark与对应五级制,Code 2:if(mark 60)printf(不及格);else if(mark 70)printf(及格);else if(mark 80)printf(中);else if(mark 90)printf(良);else printf(优);,Code 3:if(
14、mark=60)printf(及格);else if(mark=70)printf(中);else if(mark=80)printf(良);else if(mark=90)printf(优);else printf(不及格);,C程序中常见问题-if语句,Code 4:if(mark=90)printf(优);else if(80=mark 90)printf(良);else if(70=mark 80)printf(中);else if(60=mark 70)printf(及格);else printf(不及格);,例如:百分制成绩mark与对应五级制,Code 5:if(mark=90)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 程序 错误 编程 风格
![提示](https://www.31ppt.com/images/bang_tan.gif)
链接地址:https://www.31ppt.com/p-6011274.html