软件工程第三次作业

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.代码单元测试


  1. 条件组合覆盖

判定所有条件中可能的情况,例如当n<=0,时返回0,之后考虑B和C的情况组合
2. ###流程图

Coding.net地址:点我就知道

  1. 测试代码

int a[100];
int Maxshu(int a[],int n)
{
	int b=0,i,c=0;
	if (n <= 0)
	{
		return -1;
	}
	else
	{
		for (i = 0; i < n; i++)
		{
			b = b + a[i];
			if (b > c)
			{
				c = b;

			}
			else if (b < 0)
			{
				b = 0;
			}

		}


		return c;
	}
}
int main()
{
	int n,maxx,i;
	scanf_s("%d", &n);
	for (i = 0; i < n; i++)
	{
		scanf_s("%d", &a[i]);
	}
	maxx = Maxshu(a, n);
	printf("%d", maxx);
	system("pause");
	return 0;
}

3.测试代码和结果


1.组合的条件

条件1 条件2
B>c B>0
B>c B<=0
B<=c B>0
B>c B<=0

2.单元测试代码

TEST_METHOD(TestMethod1)
		{
			int a[] = { 0 };
			int n = -1;
			Assert::AreEqual(Maxshu(a, n), 0);
		}
		TEST_METHOD(TestMethod2)
		{
			int a[] = {1,2,3,1};
			int n = 4;
			Assert::AreEqual(Maxshu(a, n), 7);
			//b>c,b>0
		}
		TEST_METHOD(TestMethod3)
		{
			int a[] = { 1,2,3,-1,-2,-3 };
			int n = 6;
			Assert::AreEqual(Maxshu(a, n), 6);
			//b>c,b<=0
		}
		TEST_METHOD(TestMethod4)
		{
			int a[] = { 1,2,3,-1};
			int n = 4;
			Assert::AreEqual(Maxshu(a, n), 6);
			//b<=c,b>0
		}
		TEST_METHOD(TestMethod5)
		{
			int a[] = { 1,2,-10,-1};
			int n = 4;
			Assert::AreEqual(Maxshu(a, n), 3);
			//b<=c,b<=0
		}

3.单元测试结果

posted @ 2019-04-16 22:17  檠央  阅读(155)  评论(0编辑  收藏  举报