软件工程第三次作业

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.测试结果如下

posted @ 2019-04-19 21:36  Ermengarde  阅读(208)  评论(0)    收藏  举报