软件工程第二次作业
博客信息 | |
---|---|
作业要求 | |
课程目标 | |
作业目标 |
一. 题目:最大连续子数组和(最大子段和)
给定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。
二. 代码与代码运行结果
代码如下
#include <iostream>
using namespace std;
int main()
{
int n,i,a[10],sum1=0,sum2=0,mod=0;
cout << "请输入数组数量"<<endl;
cin >> n;
cout << "请输入数组" << endl;
for (i = 0; i < n; i++)
{
cin >> a[i];
}
for (i = 0; i < n; i++)
{
sum1 = sum1 + a[i];
if (sum1 < 0)
{
sum1 = 0;
}
if (sum1 > sum2)
{
sum2 = sum1;
}
}
cout << "最大子段和为" << endl;
cout << sum2;
return 0;
}
github链接code
运行结果如下
![](https://img2020.cnblogs.com/blog/1976162/202004/1976162-20200403174930015-1985827947.png)
三. 单元测试工具
编译软件采用VS2019中自带的测试工具
代码如下
#include "CppUnitTest.h"
using namespace Microsoft::VisualStudio::CppUnitTestFramework;
namespace UnitTest2
{
TEST_CLASS(UnitTest2)
{
public:
TEST_METHOD(TestMethod1)
{
}
};
}
四. 判定条件覆盖
判定/条件覆盖:选择足够多的测试用例,使程序中每个判定的"真"和"假"至少执行一次,并且每个判定的每个条件取得各种可能的结果。
画出上述程序的流程图,如下所示。
![](https://img2020.cnblogs.com/blog/1976162/202004/1976162-20200403191705854-1094823557.png)
根据流程图设计测试样例。
判定一(i=n)
判定二(sum1>sum2,sum1<=sum2)
i处于累加的状态,可以不用考虑,所以判定一不用考虑真假
采用两个测试案例交替进行的(-2,6,-5,8,-7,9)和空输入
测试代码如下
#include "CppUnitTest.h"
using namespace Microsoft::VisualStudio::CppUnitTestFramework;
namespace UnitTest1
{
TEST_CLASS(UnitTest1)
{
public:
TEST_METHOD(TestMethod1)
{
int n = 6, i, sum1 = 0, sum2 = 0, mod = 0;
int a[6] = { -2,6,-5,8,-7,9 };
for (i = 0; i < n; i++)
{
sum1 = sum1 + a[i];
if (sum1 < 0)
{
sum1 = 0;
}
if (sum1 > sum2)
{
sum2 = sum1;
}
}
}
TEST_METHOD(TestMethod2)
{
int n = 0, i, sum1 = 0, sum2 = 0, mod = 0;
for (i = 0; i < n; i++)
{
sum1 = sum1;
if (sum1 < 0)
{
sum1 = 0;
}
if (sum1 > sum2)
{
sum2 = sum1;
}
}
}
};
}
单元测试结果如下图所示
![](https://img2020.cnblogs.com/blog/1976162/202004/1976162-20200403192627569-734807596.png)
测试结果正确
五. 工作记录
项目 | |
---|---|
日期 | |
开始时间 | |
结束时间 | |
编码行数 | |
错误数量 |
六. 心得
这次作业的代码并不是很难主要是在于写博客用markdown的操作比较复杂,学会了如何插入图片与如何让他居中,还有如何制作表格,表格居中也很复杂,我用的是html写的,写的有点难受,也让我学会了新的东西。代码倒是不怎么难,主要是单元测试与如何判定条件覆盖这是以前没有学过的,都是现学的,也顺便了解了这到底是干什么的,让我收获了许多。