求最大子数组的和,并进行单元检测

一.实验目的

求最小子数组的和,开始,结束索引。对代码进行单元检测,检测代码的健壮性

二.实现过程

1.定义一个结构体,里面有元素最小子数组的和,开始,结束索引。

2.创建findMax()函数,用来求出最小子数组的和,开始,结束索引。

3.调用findMax()函数

4.进行单元检测

实现代码如下:

#include<iostream>
using namespace std;
//定义结构体使函数返回多值
struct result
{
int sum;
int begin;
int end;
};
void main(){
result findMax(int a[], int size);
result Maxarray;
int n,i;
cout<<"请输入原数组大小"<<endl;
cin>>n;
int *p;
p = new int [n] ; //创建一个数组
cout<<"请输入原数组的元素"<<endl;
for(i=0;i<n;i++)
{
cin>>p[i];
}
Maxarray=findMax(p,n);
cout<<"最大子数组的和为:"<<Maxarray.sum<<endl;
cout<<"最大子数组的开始的下标为:"<<Maxarray.begin<<endl;
cout<<"最大子数组的结束的下标为:"<<Maxarray.end<<endl;
}


result findMax(int a[], int size)
{
struct result res = {a[0], 0, 0};
int sum = a[0], i;
for (i = 1; i < size; i++)
{

if (sum > 0)
{
sum += a[i]; //第i-1个元素结尾且和最大的连续子数组加上这个元素
}
else
{
sum = a[i]; //只包含第i个元素
if(a[i]>0)
{
res.begin = i;
}
}
if (a[i]>0)
{
res.end=i;
}
if (sum > res.sum)
res.sum = sum; //将最大子数组的和存在res.sum中

}
return res;
}

三.单元测试

1.取边界值测试

 

 

2. 1->2->1->1->3

 

 

3.辅助测试

 

 

 

4.全为负值

 

posted @ 2021-03-15 10:47  暗影猎手1  阅读(86)  评论(1)    收藏  举报