软件课上,学习单元测试,王老师给我们亮出一个求最大值的函数,要求我们在10分钟内对该函数进行用例测试,原代码如下:
1 int Largest(int list[], int length) 2 { 3 int i,max; 4 for(i = 0; i < (length – 1); i ++ ) 5 { 6 if(list[i] > max) 7 { 8 max=list[i]; 9 } 10 } 11 return max; 12 }
因为,前几天刚敲过类似的代码,所以,看出max没有赋初值,并且for循环应为i<length;
很欣喜的给max=0;
输入数组{2,3,4,6,9} 输出 max=9 对了
输入数组{-9 8 3} 输出 max=8 也对哦
输入数组{-9 -8 -6} 输出 max=0 奇怪,怎么不对呢?
。。。
原来max初值不该赋0 ,应该赋数组中的一个值--------max=list[0];
这样应该就对了吧
输入{-9 -8 -1} 输出 max=-1 对了
输入{9 9 -4} 输出 max=9 对了
原以为这样就可以了,老师又问,如果数组为空怎么办?????
数组为空,C中编译都通不过。(老师发话了:把电脑合上吧!课下完成后发到博客上)
课下:
有C定义一个数组,初始化为空时,编译都通不过,最后在同学的提醒下,想到用malloc动态分配内存,解决了数组为空的问题(C语言还得再学啊!)
最终代码如下:
1 #include<stdio.h> 2 #include<stdlib.h> //malloc动态分配内存 3 void main() 4 { 5 void Largest(int list[],int length); 6 int *p1; //数组所分配区域第一个字节的地址 7 int i; 8 int n; 9 printf("输入数组个数:"); 10 scanf("%d",&n); 11 p1=(int *)malloc(n*sizeof(int)); 12 while(n!=0) 13 { 14 printf("输入数组元素: "); 15 for(i=0;i<n;i++) 16 { 17 scanf("%d",p1+i); 18 } 19 break; //一次数组输入完成,跳出 20 } 21 Largest(p1,n); 22 } 23 void Largest(int list[],int length) //求数组元素中最大数 24 { 25 int i; 26 int max=list[0]; 27 if(list==NULL||length==0) //数组为空 28 { 29 printf("数组不能为空 "); 30 } 31 else 32 { 33 for(i=0;i<length;i++) 34 { 35 if(list[i]>max) 36 { 37 max=list[i]; 38 } 39 } 40 printf("max=%d ",max); 41 } 42 }
运行结果:
这次测试还有不到位的,就是没有实现都去读取文件中事先存好的测试用例,下面我们将会再完善一下。
通过这次课,这次作业,感受到,只有保证了一个个函数单元的正确,才更有利于整个程序的运行,也有利于调试,明白编程时养成单元测试的习惯是多么的重要。