您的位置:首页 > 其它

返回整型数组子数组和的最大值

2014-03-10 16:16 295 查看
结对组员:刘静(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
;
int num;
int i;
int k=1;
do
{
printf("输入数组个数:\n");//初始化数组个数
scanf("%d",&num);
printf("输入%d个数,以空格区分:\n",num);//数组元素初始化
for(i=0;i<num;i++)
{
scanf("%d",&a[i]);
}
printf("最大子数组的和为:%d",maxSum(a,num));//调用子函数,返回最大值
printf("\n\n");
printf(" 1、继续   0、退出\n");
scanf("%d",&k);
}while(k!=0);
}


实验结果截图:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: