软件工程 第三次作业

作业三

作业要求 https://edu.cnblogs.com/campus/jssf/infor_computation17-31/homework/10454
课程目标 掌握如何设计单元测试、运行单元测试
参考文献 https://www.cnblogs.com/xinz/archive/2011/11/20/2255830.htmlhttps://www.cnblogs.com/SivilTaram/p/software_pretraining_cpp.html 关于求最大子数组 - 知乎 https://zhuanlan.zhihu.com/p/25704214
作业正文 https://www.cnblogs.com/jiangziyi/p/12449281.html

作业题目——单元测试

  • 数组中最大子数组的和。

用类/函数来实现
需求:希望返回 3 种信息
最大子数组的和
最大子数组开始的下标
最大子数组结束的下标
从文本文件中读输入的数据,熟悉文件操作, 文件有两种数据
第一个数字:这次测试中有多少个数据, 数字后面是冒号。
后续数字: 每个数据的值,用逗号隔开
比如
文件内容:
17: -32, -10, 33, -23, 32, -12, 41, -12, 1, 3, 5, -98, 70, -21, 10, -9, 61
输出
sum = 71

设计单元测试,运行单元测试

  • 开始:所有单元测试都失败
  • 改进程序,加入正确的逻辑,,看到有单元测试通过,并且看到代码覆盖率的增加
  • 重复, 直到所有单元测试都通过,代码覆盖率达到满意的结果。

解决思想

求一组数组的最大子数组有暴力求解、分治算法还有一种线性算法。暴力求解的时间复杂度为O(n^2),分治算法的时间复杂度为O(nlog2n),而线性算法的时间复杂度为O(n)。但是暴力求解的代码最容易理解,也易于写出运行成功。

附录代码

  • 暴力求解
#include<iostream>
#include<stdio.h>
#include<stdlib.h>
#include<limits.h>
#include<cstdlib>
using namespace std;
int maxsubset(int *a,int len){
    int summax=INT_MIN;
    int i,j,k;
    for(i=0;i<len;i++)
        for(j=i;j<len;j++){
            int temp=0;
            for(k=i;k<=j;k++)
                temp+=a[k];
            if(temp > summax) summax=temp;
        }
    return summax;
}
int main(){
    int a[]={-32,-10,33,-23,32,-12,41,-12,1,3,5,-98,70,-21,10,-9,61};
    cout<<"the maxsubset:"<<maxsubset(a,16)<<endl;
	system("pause");
    return 0;
}

运行结果


码云地址:
https://gitee.com/jiang_zi_yi/codes/new

博客作业

回顾我在信息与计算科学专业两年多以来,先从计算机基础开始然后到C++,数据结构,java,操作系统和MySql数据库等,逐渐深入对程序语言的学习。但就对于我个人而言,我的能力是远远不足的,对于较长的,要求比较多,功能比较全面的程序没有办法独立完成。不能把自己的思想完全用程序语言表达出来,程序常常出现逻辑错误。所以在今后的学习过程中,要多动手,多总结,对于比较好的,典型的程序结构进行积累,丰富自己的编程知识,提高自己的能力。多尝试,多运行,有问题及时反馈,及时解决,充分利用好身边的网络书籍资源。

原文地址:https://www.cnblogs.com/jiangziyi/p/12449281.html