第三章 程序改错.doc

上传人:cl****1 文档编号:543029107 上传时间:2022-10-23 格式:DOC 页数:21 大小:109KB
返回 下载 相关 举报
第三章 程序改错.doc_第1页
第1页 / 共21页
第三章 程序改错.doc_第2页
第2页 / 共21页
第三章 程序改错.doc_第3页
第3页 / 共21页
第三章 程序改错.doc_第4页
第4页 / 共21页
第三章 程序改错.doc_第5页
第5页 / 共21页
点击查看更多>>
资源描述

《第三章 程序改错.doc》由会员分享,可在线阅读,更多相关《第三章 程序改错.doc(21页珍藏版)》请在金锄头文库上搜索。

1、第三章 程序改错本章的目的是纠正编程中的常见错误。我们重点分析了编程中常见错误产生的原因,同时还提供了一些改错专项练习题,希望能够通过本章的学习提高大家的辨错和纠错能力。31要点分析编程中的常见错误主要有两种,一种是语法错误,一种是逻辑错误。语法错误的产生主要是基本概念问题,逻辑错误的产生主要是基本概念和算法问题。语法问题主要出现在输入输出、变量和函数的定义、条件的表达等方面。例如,用scanf()函数给整型变量b赋值,函数会写成如下一些形式:scanf(“%d”,b);或scanf(“%f”,b);或scanf(“%f”,&b);。而正确的语句是:scanf(“%d”,&b);。用scanf

2、()函数给字符数组a赋值一串字符,将函数错写成scanf(“%s”,&a);,而正确的写法是:scanf(“%s”,a);,因为数组名是数组的地址,所以不需要在数组名a前加&。再如,用printf()函数输出整型数组a的元素,错误的写为:printf(“%d”,*a+);。正确的写法应该是:printf(“%d”,*(a+i));。数组名的值是不允许改变的。如,定义整型函数ax形式参数为整型a,b。正确的定义是int ax(int a,int b);,而错误的写为:int ax(int a, b);,将形式参数的定义与变量定义混淆。如,在条件表达式中将条件运算符“= =”写成赋值运算符“=”。

3、将诸如,a大于b并且a小于d的表达式写成bad,而正确的表达式是bd。类似的例子很多,我们将不一一列举。下面我们列举几个逻辑错误。例:程序用二分法在一个按单调不减次序排列的数组中查找某个数。若存在,输出该数及它的下标位置;若不存在,输出表示找不到该数的信息。下面程序中有两个逻辑错误,请指出。#1 main( )#2 #3 int a10=2,5,6,8,11,15,18,22,60,88;#4 int low,high,m,i,x;#5 scanf(“%d”,&x);#6 low=0;#7 high=9;#8 while(lowam) high=m+1;#13 else low=m-1;#14

4、 #15 if(lowam时应该在am之后继续查找,所以应该调整low的值为m+1,而不是调整high的值为m+1。当xam时应该在am之 前继续查找,所以应该调整high的值为m-1,而不是调整low的值为m-1。在这个程序中产生的错误完全是由于对二分法算法没有完全掌握引起的。再如,求最大最小值的程序段,正确写法:if(maxai) min=ai;常见的错误写法为:if(maxai)max=ai else min=ai;如,在字符串比较中使用关系运算符进行比较,而正确的比较是用字符串比较函数strcmp().程序中常见的其它错误,我们将在专项练习中列出,并纠正。32专项练习下列程序中都有三个

5、错误,按题中的计算要求,纠正所有错误,并以“将#XX行改为YYYY”的形式进行解答,代码左边的“#1”、“#2”、是附加的行号。(1) 程序输入n(0n=100)个整数,计算n个整数之和并输出和数。#1 (2) #define N 100 (符号常量:定义符号N表示数字100)#2 int sum (int *b, m)(定义函数sum)(3) 函数定义分为2种#3 int s=0;#4 for (;m-;)for(;m-)(4) 【for 函数(循环变量赋初值;循环条件;循环变量增值)】(5) 比如for(i=0;i,=100;i+)(6) xcc#5 s+=*b+;#6 return s;

6、#7 #8 main()#9 int i,n,aN;(定义数组a【100】)(变量必须先定义后使用【变量名实际上是用以一个名字代表的一个存储地址)在系统编译时会会给每个变量名分配对应的内存地址】#10 do printf(Enter n(0n0&n=100);#13 printf(Enter a0-a%dn,n-1);#14 for(i=0;in;i+)#15 scanf(%d,a+);#16 printf(sum%dn,sum(a,n);#17 (7) 程序用二分法在一个按单调不减次序排列的数组中查找某个数。若存在,输出该数及它的下标位置;若不存在,输出表示找不到该数的信息。#20 main

7、( )#21 #22 int a10=2,5,6,8,11,15,18,22,60,88;#23 int low,high,m,i,x;#24 scanf(“%f”,&x);#25 low=0;#26 high=9;#27 while(lowam) high=m+1;#32 else low=m-1;#33 #34 if(low=high)#35 printf(“ d is found,the position is %d”,x,m);#36 else#37 printf(“%d is not foundn”,x);#38 (8) 程序求3*4矩阵中的最大元素及其所在行和列的位置。数组元素可能

8、有大于0,等于0或小于0的值。#1 #include stdio.h#define M 3#2 #define N 4#3 main()#4 int aMN,max,i,j;#5 int row,column;#6 for(i=0;iM;i+)#7 for(j=0;jN;j+)#8 scanf(%d,aij);#9 max=0;#10 for(i=0;iM;i+)#11 for(j=0;jN;j+)#12 if(maxaij)#13 max=aij;row=i;column=j;#14 printf(nmax=%d,row=%d,colum=%d,max,row,column);#15 (9)

9、 程序中函数fun的功能是计算数组a的每列元素的最大值,存入数组max。#1 #define X 5#2 #define Y 4#3 void fun(int aXY,int max) #4 int i,j;#5 int maxf;#6 for(i=0;iY;i+)#7 maxf=a00; #8 for(j=1;jmaxf)#10 maxf=aji;#11 maxi=maxf;#12 #13 #14 void main()#15 int p =2,4,6,8,9,1,3,5,7,2,4,6,1,3,5,4,5,0,9,9; #16 int maxY,i;#17 fun(p,max);#18 p

10、rintf(nthe max value sum is:n);#19 for(i=0;iY;i+)#20 printf(%d,maxi);#21 printf(n);#22 (10) 程序的主函数main()调用aver()函数用来统计某数组中值大于0和小于0的元素个数(等于0的元素个数不统计)。并求数组中所有元素的平均值。平均值通过函数返回,其余两个统计结果通过形式参数的方法返回。#1 #include stdio.h#2 main()#3 double aver(int,int,int*,int*);#4 int c1,c2,x=0,12,33,-9,-5,27,80,0,54,-63;#

11、5 double av;#6 av=aver(x,10,c1,c2);#7 printf(nc1=%d,c2=%d,aver=%f,c1,c2,av);#8 #9 double aver(int a,int n,int *p1,int *p2)#10 int i;#11 double sum=0;#12 for (i=0;i0)#15 (*p1)+ ;#16 else#17 (*p2)+;#18 #19 return sum/n;#20 (11) 16进制数可以由数字0到9和大写字母A至F组成的字符串表示,函数hexvalue()的功能是将用字符串表示的16进制数转化为十进制数,如将2A转化为

12、42,若字符串中出现其它符号则返回-1。#1 int hexvalue(char *str)#2 #3 int data,i,n;#4 for(i=0;stri!=0;i+)#5 #6 if(stri=A&stri=F)#9 n=stri-A+10;#10 else#11 return-1;#12 data=data*10+n;#13 #14 return data;#15 (12) 程序计算数列2/1,3/2,5/3,8/5,之和,其中 由定义。#1 #include #2 series_sum(n)#3 int a=2,b=1,c,k;#4 double s=0.0;#5 for(k=1;k=n;k+)#6 s=s+a/b;#7 c=a;a+=b;b=c;#8 return ;#9 #10 void main()#11 int n=10;#12 printf(the sum is:%fn,series_sum(n);#13 (13) 程序调用函数UpperNum ,统计字符串str中大写字母的个数并作为函数值返回。#01 #includectype.h#02 main()#03 char str80;#

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 社会民生

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号