一、题目及要求:
题目:返回一个整数数组中最大子数组的和。
要求(新加):①要求程序必须能处理1000个元素;②每个元素都是int32类型的。
结对人员:焦燕 胡亚宝
二、设计思路:
①处理1000个元素的问题,我们将数组的长度设为1000,其中的每一个元素都是随机生成,因为这道题目重点是溢出问题,所以我们将它们设的值都比较大;
②现阶段我们将它们都设为int型,超过表示范围时,系统会自动转化成负值,判断后将显示溢出。
三、源代码:
1 // 结对开发——焦燕 胡亚宝 2 3 #include "stdafx.h" 4 #include "stdlib.h" 5 6 int _tmain(int argc, _TCHAR* argv[]) 7 { 8 int i,j,a[1000]; 9 int Sum,Max; 10 printf("随机生成的数组为:\n"); 11 for(j=0;j<1000;j++) 12 { 13 a[j]=rand()+100000000; 14 printf("%d\t",a[j]); 15 } 16 17 Max = a[0]; 18 19 for(i=0;i<1000;i++) 20 { 21 Sum = 0; 22 for(j=i;j<1000;j++) 23 { 24 Sum =Sum+ a[j]; 25 if(Sum<=0) 26 { 27 //printf("溢出!"); 28 Sum=0; 29 } 30 if(Sum > Max) 31 { 32 Max =Sum; 33 } 34 } 35 } 36 37 return 0; 38 }
四、测试及运行结果:
五、心得体会:
这个题目是考察我们大数溢出的问题,之前我们写的程序几乎都没有考虑这些问题,这次也是提醒我们,在以后的编程中,大数溢出是不可忽视的问题。
在思考思路的时候,我们首先设定了非常大的数,观察如果数据太大而超出定义变量能表示的范围将会怎样,我们发现,如果加的和值太大,系统将自动转化成一个非常大的负值,于是我们想到了随机生成的数组元素都设为正的大数,再一个个累加,如果和值出现负数,那么肯定是溢出问题,这样把结果显示出来。
这次的合作我们两个一开始都没有头绪,和别的同学讨论过后才开始进行编写。这个小程序还是有不完善之处,比如解决这种溢出问题我们还是有点困难,在讨论过后希望能解决它。
附:合照