软件工程第三次作业
1.题目要求
问题: 给定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。
2.代码显示
具体代码思路:对于数组array,从array[1]开始逐个进行相加,与最大值比较,并不停地更替最大值。
详细代码见:https://dev.tencent.com/u/chengzinaiyou/p/ruanjian03/git
#include "pch.h"
#include <iostream>
#include<stdio.h>
int getMAX(int* line, int xu)
{
if (line == NULL || xu <= 0)
return 0;
int sum = line[0];
int max = line[0];
for (int i = 1; i < xu; i++)
{
if (sum < 0)
sum = line[i];
else
{
sum = sum + line[i];
}
if (sum > max)
max = sum;
}
return max;
}
int main()
{
int line[20];
int xu;
int max;
scanf_s("%d", &xu);
for (int i = 0; i < xu; i++)
{
scanf_s("%d", &line[i]);
}
max = getMAX(line, xu);
printf("%d", max);
return 0;
}
3.程序流程图

4.测试代码及测试样例
(1).测试代码
#include "stdafx.h"
#include "CppUnitTest.h"
#include "C:\Users\lenovo\source\repos\软件工程02\软件工程02\标头.h"
using namespace Microsoft::VisualStudio::CppUnitTestFramework;
namespace 软二
{
TEST_CLASS(UnitTest1)
{
public:
TEST_METHOD(TestMethod1)
{
int line[] = { -2,11,-4,13,-5,-2 };
int xu = 6;
int k;
k = getMAX(line, xu);
Assert::AreEqual(k, 20);
}
TEST_METHOD(TestMethod2)
{
int line[] = { -2,11,-4,13,-5,-2 };
int xu = 0;
int k;
k = getMAX(line, xu);
Assert::AreEqual(k, 0);
}
TEST_METHOD(TestMethod3)
{
int line[] = { 1,-2,3,10,-4,7,2,-5 };
int xu = 8;
int k;
k = getMAX(line, xu);
Assert::AreEqual(k, 18);
}
TEST_METHOD(TestMethod4)
{
int line[] = { 1,-2,-3,-4,-5};
int xu = 5;
int k;
k = getMAX(line, xu);
Assert::AreEqual(k, 1);
}
};
}
(2).测试样例
满足判定、条件覆盖测试
1.xu <= 0
2.xu > 0
3.sum < 0
4.sum > 0
5.测试结果如下


浙公网安备 33010602011771号