在上課的時候,老師給了一個功能模塊,讓我們進行測試,程序模塊如下:
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; }
測試結果如下:
通過這次的測試使我明白了,就算是你認為不會發生的問題,也需要考慮它如果發生了,該如何處理,就比如數組為空的問題,所以在以后的編程中考慮問題一定要全面。