zoukankan      html  css  js  c++  java
  • 软件工程第三次作业

    选择的题目.

    题目(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。
    ---- 引用自《百度百科

    问题的分析.

    输入一组数据,个数为n个,首先定义max代表最大字段和并且赋初值为0,用sum来保存当前数列的和并赋初值0。对sum和max的值进行比较,当sum的值大于max,将sum的值赋给max,如果小于,则舍弃当前的数值返回继续进行,代码是在同学的帮助下一步一步编写出来。
    注意的是:这个程序进行时最开始已经对max赋初值为0,虽然sum的值在求和的过程中可能为负,但由于编写的这个程序对max进行判断时,就已经包括对当所给的整数均为负数时定义子段和为0的这种情况,因为当sum小于0时并没有将他的值赋给max,所以当数列所给的整数均为负数时,max的就是为0,所以最后不需要对max的值进行对0的判断。

    编程.

    下面是代码

    条件组合覆盖.

    在白盒测试法中,选择足够的测试用例,使得每个判定中条件的各种可能组合都至少出现一次。显然,满足“条件组合覆盖”的测试用例是一定满足“判定覆盖”、“条件覆盖”和“判定/条件覆盖”的。条件组合覆盖:使得每个判定中条件的各种可能组合都至少出现一次。
    组合覆盖为2种情况,分别是:
    1、sum>max。
    2、sum<=max。

    • 测试用例:
    • 样例1{-8,-13,-15,-17,-19,-18}都为负数的情况
    • 样例2{8,-3,6,-7,10,16}
      ...

    单元测试如下.

    源程序如上,这里只粘贴了测试代码,便于区分。
    namespace UnitTest1
    {
    TEST_CLASS(UnitTest1)
    {
    public:

    	TEST_METHOD(TestMethod1)
    	{
    		int n = 6;
    		// TODO: 在此输入测试代码
    		int a[6] = { -8,-13,-15,-17,-19,-18 };
    		int sum = max1(6, a);
    		Assert::AreEqual(0, sum);
    	}
    	TEST_METHOD(TestMethod2)
    	{
    		// TODO: 在此输入测试代码
    		int n = 6;
    		int a[6] = {8,-3,6,-7,10,16};
    		int sum = max1(6, a);
    		Assert::AreEqual(26, sum);
    	}
    };
    

    }

    总结.

    这次的作业我学会了单元测试和条件组合覆盖,更加熟练使用vs。算法方面很薄弱还有很大进步空间。

  • 相关阅读:
    shell脚本编程练习
    linux中()、[]、{}、(())、[[]]等各种括号的使用
    Linux Shell 变量自加
    while read line [linux] shell 学习
    踢出某正在访问的用户||永久禁止某IP访问
    linux设置 自定义脚本开机启动
    syntax error: unexpected end of file完美解决方案
    Linux利用nc命令脚本批量检测服务器指定端口是否开放
    41-贪心算法
    38-动态规划
  • 原文地址:https://www.cnblogs.com/wengchao/p/8684520.html
Copyright © 2011-2022 走看看