作业要求 | 作业要求链接 |
---|---|
我在这个课程的目标 | 学习软件工程的基本操作,能够自行完成作业,并能将软件工程与其他课程联系起来 |
此作业在哪个具体方面帮我实现目标 | 看完相关的博文链接后,学习单元测试的操作,以及如何写单元测试的代码,遇到问题时,在网上寻找各种解决方案,向同学请教等 |
参考文献 | 在Visual Studio 2017 上对 C++ 进行单元测试 , 如何编写C与C++单元测试代码 |
gitee 链接 | gitee仓库链接 |
作业正文
单元测试运行截图
程序代码
#include <stdio.h>
#include<iostream>
#include<vector>
using namespace std;
int getmax(int data[], int length)
{
int temp = 0, start = 0, end = 0, i = 0, num = 0, max = 0, flag = 0;
while (i < length)
{
if (data[i] > 0)
{
temp = i;
while (temp < length)
{
num += data[temp];
if (num < 0) //当num<0时退出这个循环
{
num = 0;
i = temp + 1;
break;
}
if (num > max) //不加=说明若存在多个最大子数组时取第一个,加上=说明取最后一个
{
start = i;
max = num;
end = temp;
//cout<<i<<" "<<temp<<endl;
}
temp++;
}
if (temp >= length) //当temp已经循环到数组最后一位,则结束整个外层循环
break;
}
else
{
i++;
flag++; //用来记录负数出现的次数
}
}
if (flag == length) //数组全为负数的情况
{
int max = data[0];
for (i = 1; i < length; i++)
{
if (data[i] > max)
{
max = data[i];
}
}
return max;
}
for (i = start; i <= end; i++) //打印最大子数组
cout << data[i] << " ";
cout << endl;
return max;
}
//更简单的写法,没有输出下标
int findmax(vector<int> ve)
{
if (ve.size() == 0)
return 0;
int i = 0, sum = 0, great = INT_MIN;
for (i = 0; i < ve.size(); i++)
{
if (sum <= 0)
sum = ve[i];
else
sum += ve[i];
if (sum > great)
great = sum;
}
return great;
}
int main()
{
int data[] = { -5,-4,-3,-2,-1,1,2,3,4,5 };
int length = sizeof(data) / sizeof(int);
//int max = getMaxValue(data,length);
cout << getmax(data, length) << endl;
return 0;
}
单元测试代码
#include "pch.h"
#include "CppUnitTest.h"
#include "D:Max_SubArrayMax_SubArrayMax_SubArray.cpp"
using namespace Microsoft::VisualStudio::CppUnitTestFramework;
namespace MaxSubArryTest1
{
TEST_CLASS(MaxSubArryTest1)
{
public:
TEST_METHOD(TestMethod1)
{
int data[] = { -5,-4,-3,-2,-1,1,2,3,4,5 };
int length = sizeof(data) / sizeof(int);
Assert::AreEqual(15, getmax(data, length));
}
};
}