在上课的时候,老师给了一个功能模块,让我们进行测试,程序模块如下:
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; }
测试的内容大致如下:
如果数组中有两个同样大小的最大值会如何?
如果数组中只有一个元素会如何?
如果数组中的元素都为负数怎么样?
如果数组为空(长度为零),那会如何?
在编写的过程中,首先会发现数组中少了一个元素,那是因为在循环时length写成了length-1,而且max没有初始化,如果初始化为0,那么都是负数时结果为0,这个结果是错误的,原因在于负数都比0小,解决方法就是max初始化为数组第一个元素的值。并且在测试时,针对数组为空抛出异常,进行处理。
下面是我写的测试这个模块的程序:
#include<stdio.h> #include<stdlib.h> #include<string.h> int Largest(int list[],int length) { int i; int max; max=list[0]; if(list==NULL||length==0) { printf("数组元素不能为空,请重新输入!\n"); return 0; } else { for(i=0;i<length;i++) { if(list[i]>max) { max=list[i]; } } return max; } } int main() { int max; int i; int n; int *a; char ch; a=(int*)malloc(n*sizeof(int)); in: printf("请输入数组的个数:\n"); scanf("%d",&n); if(n>0) { printf("请输入数组元素:\n"); for(i=0;i<n;i++) { scanf("%d",&a[i]); } max=Largest(a,n); printf("数组元素的最大值是:%d\n",max); } else { printf("数组不能为空,请重新输入!\n"); goto in; } return 0; }
测试结果如下:
通过这次的测试使我明白了,就算是你认为不会发生的问题,也需要考虑它如果发生了,该如何处理,就比如数组为空的问题,所以在以后的编程中考虑问题一定要全面。