一、题目及要求:
题目:返回一个整数数组中最大子数组的和。
要求(新加):①要求程序必须能处理1000个元素;②每个元素都是int32类型的。
二、设计思路
这次练习依然是在之前一维数组的基础上完成的,此次的首要问题是要求程序能处理1000个数据并要求元素是int32型,所以会存在大数溢出问题,我们的想法就是将它找出并做 出警告
三、源程序
1 //结对人员 盖相庚 曹美娜 2 3 #include "stdafx.h" 4 #include "stdio.h" 5 #include"stdlib.h" 6 #include"time.h" 7 #define N 1000 8 int compare( int arry[],int length) 9 { 10 int max[N],max1; 11 for(int j=0;j<length;j++) 12 { 13 int sum=0; 14 max1=-987654321; 15 for(int i=j;i<length;i++) 16 { 17 sum=sum+arry[i]; 18 if(sum<0) //判断其是否溢出 19 { 20 printf("数值溢出! "); 21 return 0; 22 } 23 else if(sum>=max1) 24 { 25 max1=sum; 26 } 27 } 28 max[j]=max1; 29 printf("包含数组中第%d个数的所有子数组中和最大的值为:%d ",j+1,max[j]); 30 } 31 int fmax=max[0]; 32 for(int i=0;i<length;i++) 33 { 34 if(max[i]>fmax) 35 fmax=max[i]; 36 } 37 printf("所有子数组的和的最大值为:%d ",fmax); 38 return 0; 39 } 40 int main(int argc, char* argv[]) 41 { 42 int arry[N]; 43 int length; 44 srand(time(NULL)); 45 printf("请输入要比较整数的个数:"); 46 scanf("%d",&length); 47 48 for(int i=0;i<length;i++) 49 { 50 arry[i]=rand()+100000000; 51 52 } 53 printf("随机产生的数组为: "); 54 for( i=0;i<length;i++) 55 { 56 printf("%d ",arry[i]); 57 58 } 59 compare(arry,length); 60 return 0; 61 }
四、截图
五、心得体会
由于处理1000个数据出来的结果太长,所以我输入的是100个元素,其实1000个元素是能处理的,在程序中可以看出,我随机生成的元素比较大,所以就会出现大数溢出这种现象,然后程序找出,并提示数值已经溢出啦,结果会出现错误,程序就自己停止了
六、工作照