最大连续子数组和(C语言)

 

软件工程-单人任务

任务描述:

请阅读邹欣老师的这篇博文(地址:https://www.cnblogs.com/xinz/archive/2011/10/22/2220872.html)和构建之法第1~3章内容,尤其是第2章效能分析和第3章代码规范部分。 回顾和复习课堂讲授的单元测试部分内容。

任务目的:

熟悉一个“高质量”软件的开发过程。

任务要求:

(1) 请从语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、条件组合覆盖五个覆盖标准中(条件组合覆盖难度较大,鼓励尝试,但请谨慎选择),任选一个标准设计测试用例 。
(2) 请利用自动测试工具对程序进行测试 。
(3) 请下载《第二次作业.doc》模板将程序运行结果和自动测试分析结果截图保存到文档中,提交。 【题目内容】 使用C语言完成: 给定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。 【输入形式】 整数序列 【输出形式】 最大连续子数组和(最大子段和) 【测试用例1】 输入: -2 11 -4 13 -5 -2 输出: 20 【测试用例2】 输入: 6 -3 -2 7 -15 1 2 2 输出: 8 【测试用例3】 输入: -5 -3 -7 -10 -6 -8 -2 输出: 0
“优化后的代码”

#include<stdio.h> int main() { int num=0,sum=0,maxsum=0; while((scanf("%d",&num))!=EOF) { sum = sum + num; if(sum < 0) { sum = 0; } if(sum > maxsum) { maxsum = sum; } if(getchar()=='\n') break; } printf("%d",maxsum); return 0; }

 单元测试

参考上一届学长文章:软件工程(2019)第二次作业 - 肖乃俊 - 博客园 (cnblogs.com)

软件为visual studio 2019,不会用visual studio 2010测试。。。

安装visual studio 2019参考文章visual studio2019的安装以及使用_江小举的博客-CSDN博客

最大连续子数组和(C语言)

 为单元测试修改代码结构

#include<iostream>
#include<stdio.h>
#include<stdlib.h>

using namespace std;

int maxsum(int nums[], int n)
{
    int i = 0, sum = 0, maxsum = 0;
    for (i = 0; i < n; i++)
    {
        sum = sum + nums[i];
        if (sum < 0)
        {
            sum = 0;
        }
        if (sum > maxsum)
        {
            maxsum = sum;
        }
    }
    return maxsum;
}
int main()
{
    int n = 0, num = 0;
    int nums[1000];
    #pragma warning(suppress : 4996)
    while (scanf("%d", &num) != EOF) 
    {
        nums[n] = num;
        n++;
        if (getchar() == '\n')
        {
            break;
        }
    }
    cout << maxsum(nums, n);
    system("pause");
    return 0;
}

测试代码

#include "pch.h"
#include "CppUnitTest.h"
#include "../test.h"

using namespace Microsoft::VisualStudio::CppUnitTestFramework;

namespace UnitTest1
{
    TEST_CLASS(UnitTest1)
    {
    public:
        
        TEST_METHOD(TestMethod1)
        {
            int a[6] = {-2,11,-4,13,-5,-2},
                b[8] = {6,-3,-2,7,-15,1,2,2},
                c[7] = {-5,-3,-7,-10,-6,-8,-2};
                Assert::AreEqual(maxsum(a,6),20);
                Assert::AreEqual(maxsum(b,8),8);
                Assert::AreEqual(maxsum(c,7),0);
        }
    };
}

测试>>运行所有测试

最大连续子数组和(C语言)

上一篇:leetcode(24)-最大子序列和


下一篇:c语言解决leetcode中最大子序和问题。