软件工程第三次作业
一、问题简介
给定n个整数(可能为负数)组成的序列a[1],a[2],a[3],…,a[n],求该序列如a[i]+a[i+1]+…+a[j]的子段和的最大值。当所给的整数均为负数时定义子段和为0,依此定义,所求的最优值为: Max{0,a[i]+a[i+1]+…+a[j]},1<=i<=j<=n. 例如,当(a[1],a[2],a[3],a[4],a[5],a[6])=(-2,11,-4,13,-5,-2)时,最大子段和为20。 |
引用自《百度百科》
##
二、代码显示
```
int Max(int* number, int n)
{
int i;
int max=number[0];
int temp=number[0];
for (i=1;i
max)
max=temp;
if(max<0)
max = 0;
return max;
}
```
完整代码见
##三、程序流程图
![](https://img2018.cnblogs.com/blog/1645943/201904/1645943-20190419171034169-2117442482.png)
##四、单元测试
###1、单元测试代码
```
TEST_METHOD(TestMethod1)
{
int n[]{ -2,11,-4,13,-5,-2 };
int len = sizeof(n) / sizeof(int);
int max = Max(n, len);
Assert::AreEqual(20, max);
}
TEST_METHOD(TestMethod2)
{
int n[]{ -3,-5,-1 };
int len = sizeof(n) / sizeof(int);
int max = Max(n, len);
Assert::AreEqual(0, max);
}
TEST_METHOD(TestMethod3)
{
int n[]{ 8,-1,6,5,-2,11 };
int len = sizeof(n) / sizeof(int);
int max = Max(n, len);
Assert::AreEqual(27, max);
}
TEST_METHOD(TestMethod4)
{
int n[]{ 6,5,-1,0 };
int len = sizeof(n) / sizeof(int);
int max = Max(n, len);
Assert::AreEqual(11, max);
}
TEST_METHOD(TestMethod5)
{
int n[]{ -2,-11,0,-1,1,2 };
int len = sizeof(n) / sizeof(int);
int max = Max(n, len);
Assert::AreEqual(3, max);
}
```
2、判定、条件覆盖测试
满足以下测试条件:
max>0
max<0
temp+number[i]>number[i]
temp+number[i]max
temp3、测试结果
![](https://img2018.cnblogs.com/blog/1645943/201904/1645943-20190419162222954-671821730.png)
本次测试一共使用五组测试数据,分别是:
序号 |
测试数据 |
测试结果 |
a |
-2,11,-4,13,-5,-2 |
20 |
b |
-3,-5,-1 |
0 |
c |
8,-1,6,5,-2,11 |
27 |
d |
6,5,-1,0 |
11 |
e |
-2,-11,0,-1,1,2 |
3 |
|
|
|