结对组员:刘静(20092532)
解凤娇(20112878)
王洪叶(20112886)
项目:定义一个整型数组,返回该数组中子数组和的最大值!
从键盘接收到数组的数据之后,调用最大值函数 maxSum(int arr[],int length),求子函数的最大值。
下面是我们的分析过程:
要想获得子函数最大值,首先进行数组的遍历,在遍历起初,对最大值进行初始化为数组的第一个元素,每次遍历,求得该子数组的和,并将此和与最大值进行比较,若小于
最大值,则进行下一次的遍历,直到结束。此处用到三个for循环,来进行次数的控制。第一个 for(i = 0; i <length; i++),用来完成所有数组的循环,第二个for(j = i; j
<length; j++)用来表示从第几个元素开始,寻找子数组,第三个 for( k = i; k <= j; k++) ,用来获取每个子数组的和,等到遍历完全结束,返回最大值输出。
测试数据:
(1)、输入数组元素:3 6 2 8 6
应得结果:25
(2)、输入数组元素:-2 7 9 6 3
应得结果:25
(3)、输入数组元素:-4 -5 -9 -5 -3
应得结果:-3
(4)、输入数组元素:1 -2 3 10 -4 7 2 -5
应得结果:18
//对于一个整型数组,求其最大子数组和 //解凤娇、王洪叶、刘静共同完成 //2014.03.10 #include<stdio.h> #include<stdlib.h> #define N 1000 /******获取最大值子函数********/ int maxSum(int arr[],int length) { int i; int j; int k; int max= arr[0]; //最大值初始化 int sum=0; //每次遍历的和初始化为0 if(arr==NULL||length<=0)//异常捕捉,数组为空的错误 { printf("没有可执行数据!"); } for(i = 0; i <length; i++)//循环遍历数组元素 { for(j = i; j <length; j++)//判断从第几个元素开始遍历 { for( k = i; k <= j; k++) { sum += arr[k]; //求和 } if(sum > max)//与最大值进行比较 { max = sum; } sum=0; } } return max; } void main() { int a[N]; int num; int i; int k=1; do { printf("输入数组个数: ");//初始化数组个数 scanf("%d",&num); printf("输入%d个数,以空格区分: ",num);//数组元素初始化 for(i=0;i<num;i++) { scanf("%d",&a[i]); } printf("最大子数组的和为:%d",maxSum(a,num));//调用子函数,返回最大值 printf(" "); printf(" 1、继续 0、退出 "); scanf("%d",&k); }while(k!=0); }
实验结果截图: