用c++求二维数组的最大子数组,进行单元测试及代码覆盖率

一、程序分析

1、题目要求

  • 从文件中读取内容作为数组数据
  • 输出这个数组的最大联通子数组
  • 给出单元测试、代码覆盖率等报告

2、代码实现

#include<iostream>
#include<fstream>
#include<cstdio>  
#include<ctime>
using namespace std;
#define M 3
#define N 4
#include <memory.h>  
int maxSubArray(int* arr, int len)       //最大子序列和  
{
    int i, sum = arr[0], b = 0;
    for (i = 0; i < len; ++i)
    {
        if (b > 0)
            b += arr[i];
        else
            b = arr[i];
        if (b > sum)
            sum = b;
    }
    return sum;
}
int maxSubMatrix(int n, int m, int array[M][N])
{
    int i, j, h, max, sum = -100000;
    int b[100];
    for (i = 0; i < n; i++)
    {
        memset(b, 0, sizeof(b));       //初始化b[]  
        for (j = i; j < n; j++)          //把第i行到第j行相加,对每一次相加求出最大值  
        {
            for (h = 0; h < m; h++)
            {
                b[h] += array[j][h];   //二维数组压缩成一维数组,然后求最大子序列和  
            }
            max = maxSubArray(b, h);

            if (max > sum)
                sum = max;
        }
    }
    return sum;
}
int main()
{
    int arr[M][N];
    ifstream infile;
    infile.open("C:\\Users\\小凯克\\Desktop\\tlm3.txt", ios::in);

    for (int i = 0; i < M; i++)
    {
        for (int j = 0; j < N; j++)
        {
            infile >> arr[i][j];
        }
    }
    cout << "最大的子数组和为:";
    cout << maxSubMatrix(M, N, arr) << endl;
    system("pause");
    return 0;
}

3、运行结果

二维数组:

运行结果:

二、单元测试

使用vs2019进行单元测试

1、测试代码

#include "pch.h"
#include "..\Project2\12.cpp"
#include "CppUnitTest.h"
#include<fstream>
using namespace Microsoft::VisualStudio::CppUnitTestFramework;

namespace UnitTest2
{
    TEST_CLASS(UnitTest2)
    {
    public:

        TEST_METHOD(TestMethod1)
        {
            ifstream infile1;
            infile1.open("C:\\Users\\小凯克\\Desktop\\tlm1.txt", ios::in);
            int test1[3][4] = {};
            for (int i = 0; i < M; i++)
            {
                for (int j = 0; j < N; j++)
                {
                    infile1 >> test1[i][j];
                }
            }
            Assert::AreEqual(15, maxSubMatrix(3, 4, test1));

            ifstream infile2;
            infile2.open("C:\\Users\\小凯克\\Desktop\\tlm2.txt", ios::in);
            int test2[3][4] = {};
            for (int i = 0; i < M; i++)
            {
                for (int j = 0; j < N; j++)
                {
                    infile2 >> test2[i][j];
                }
            }
            Assert::AreEqual(11, maxSubMatrix(3, 4, test2));

            ifstream infile3;
            infile3.open("C:\\Users\\小凯克\\Desktop\\tlm3.txt", ios::in);
            int test3[3][4] = {};
            for (int i = 0; i < M; i++)
            {
                for (int j = 0; j < N; j++)
                {
                    infile3 >> test3[i][j];
                }
            }
            Assert::AreEqual(11, maxSubMatrix(3, 4, test3));
        }
    };
}

2、测试结果

三个测试用例:

测试结果:

 

三、代码覆盖率

四、性能分析

1、cpu和GPU使用率

2、内存使用率

 

posted @ 2021-04-01 17:36  xh嘿  阅读(218)  评论(1)    收藏  举报