首先,分析题目,整数包括0,正整数,和负整数,所以要对所处理的数据做一个全面的测试。
测试的内容包括:
①局部变量类型是否正确
②是否初始化
③是否存在错误的初始值或错误的默认值
④运算是否正确
⑤逻辑是否正确
⑥是否存在死循环
⑦对错误条件的处理
老师所给的函数如下:
int Largest(int list[],int length) { int i,max; for(i=0;i<length-1;i++) { if(list[i]>max) { max=list[i]; } } return max; }
观察,max没有赋初值,可能会对结果产生影响;
再者没有对异常进行处理,也就是当length长度为空的时候,也就表示list数组的为空;
还有就是在做比较的时候,要判读比较的次数,在length-1这也有问题。
为了是程序能够具备更加完整的性能,改进后的代码如下
#include<stdio.h> #include<stdlib.h> int Largest(int list[],int length) { if(length==0) { printf("数组长度不能为空!\n"); return 0; } else { int i; int max=list[0]; for(i=0;i<length;i++) { if(list[i]>max) { max=list[i]; } } return max; } } int main() { int *a; int max; int i; int b; int n; a=(int *)malloc(sizeof(int)*n); printf("请输入数组的个数n:\n",n); scanf("%d",&n); if(n>0) { printf("输入%d个数\n",n); for(i=0;i<n;i++) { scanf("%d",&b); a[i]=b; } max=Largest(a,n); printf("max=%d\n",max); } else { Largest(a,n); } return 0; }
对以上的程序解释:
①本题目的目的是测试Largest函数,使其具有更好的实用性,所以在对此函数做完善是代码加在Largset里,也就是length=0时的异常处理,还有赋初值的问题。
②因为length是可变的,所以对于数组的申请应该是动态的。
运行结果如下:
原文:http://www.cnblogs.com/wangbingru/p/3578572.html