zoukankan      html  css  js  c++  java
  • 计算机软件工程 作业三

    作业要求链接 https://edu.cnblogs.com/campus/jssf/infor_computation17-31/homework/10454
    课程目标 简单软件开发,进行软件测试与维护
    本作业目标 单元测试
    参考文献 https://www.cnblogs.com/xinz/archive/2011/11/20/2255830.html
    https://www.cnblogs.com/SivilTaram/p/software_pretraining_cpp.html
    作业正文 https://www.cnblogs.com/yanwenshen/p/12458259.html

    单元测试

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

    代码

    #include<iostream>
    #include<cstdlib>
    using namespace std;
    int getmax(int array[],int length)
    {
        int sum = 0;    //记录当前连续子数组的最大和
        int max = 0;   //记录当前数组连续几个元素的和(当其值小于0时,重新对其赋值;【即:抛弃前面的所有元素】)
        int startIndex = 0; //记录子数组(和最大)的起始位置
        int endIndex = 0;   //记录子数组(和最大)的终止位置
        int newStartIndex = 0;  //记录子数组(和最大)的新的起始位置
        for (int i = 0; i < length; i++)    //遍历整个目标数组
        {
            if (max < 0)   //如果max < 0;则要对max重新赋值
            {
                max = array[i];    //对max重新赋值
                newStartIndex = i;  //暂时记录子数组(和最大)的新的起始位置(要看后续的sum 和 max是否发生交换)
            }
            else
            {
                max += array[i];   //如果max >= 0;则要继续将此时的数组元素(array[i])加入到max中
            }
            if (sum < max) //如果此时 sum < max;则表示此时的子数组和大于之前的子数组和
            {
                sum = max; //将大的子数组和max赋值给sum
                startIndex = newStartIndex; //子数组(和最大)的新的起始位置起作用了
                endIndex = i;   //子数组(和最大)的终止位置(只要发生交换就说明endIndex发生变化)
            }
        }
        return max;
    }
    
    int getstartIndex(int array[],int length)
    {
        int sum = 0;    //记录当前连续子数组的最大和
        int max = 0;   //记录当前数组连续几个元素的和(当其值小于0时,重新对其赋值;【即:抛弃前面的所有元素】)
        int startIndex = 0; //记录子数组(和最大)的起始位置
        int endIndex = 0;   //记录子数组(和最大)的终止位置
        int newStartIndex = 0;  //记录子数组(和最大)的新的起始位置
        for (int i = 0; i < length; i++)    //遍历整个目标数组
        {
            if (max < 0)   //如果temp < 0;则要对temp重新赋值
            {
                max = array[i];    //对max重新赋值
                newStartIndex = i;  //暂时记录子数组(和最大)的新的起始位置(要看后续的sum 和 max是否发生交换)
            }
            else
            {
                max += array[i];   //如果max >= 0;则要继续将此时的数组元素(array[i])加入到max中
            }
            if (sum < max) //如果此时 sum < max;则表示此时的子数组和大于之前的子数组和
            {
                sum = max; //将大的子数组和max赋值给sum
                startIndex = newStartIndex; //子数组(和最大)的新的起始位置起作用了
                endIndex = i;   //子数组(和最大)的终止位置(只要发生交换就说明endIndex发生变化)
            }
        }
        return startIndex;
    }
    int getendIndex(int array[],int length)
    {
        int sum = 0;    //记录当前连续子数组的最大和
        int max = 0;   //记录当前数组连续几个元素的和(当其值小于0时,重新对其赋值;【即:抛弃前面的所有元素】)
        int startIndex = 0; //记录子数组(和最大)的起始位置
        int endIndex = 0;   //记录子数组(和最大)的终止位置
        int newStartIndex = 0;  //记录子数组(和最大)的新的起始位置
        for (int i = 0; i < length; i++)    //遍历整个目标数组
        {
            if (max < 0)   //如果max < 0;则要对max重新赋值
            {
                max = array[i];    //对max重新赋值
                newStartIndex = i;  //暂时记录子数组(和最大)的新的起始位置(要看后续的sum 和 max是否发生交换)
            }
            else
            {
                max += array[i];   //如果max >= 0;则要继续将此时的数组元素(array[i])加入到max中
            }
            if (sum < max) //如果此时 sum < max;则表示此时的子数组和大于之前的子数组和
            {
                sum = max; //将大的子数组和max赋值给sum
                startIndex = newStartIndex; //子数组(和最大)的新的起始位置起作用了
                endIndex = i;   //子数组(和最大)的终止位置(只要发生交换就说明endIndex发生变化)
            }
        }
        return endIndex;
    }
    int main()
    {
        int length,i=0;
        cout<<"请输入个数:";
        cin>>length;
        cout<<"请输入数组:";
        int array[1000]={0};
        for(i=0;i<length;i++)
        {
            cin>>array[i];
        }
            cout<<"最大子数组的和为:"<<getmax(array,length)<<endl;
        cout<<"最大子数组起始下标:"<<getstartIndex(array,length)<<endl;
        cout<<"最大子数组结束下标:"<<getendIndex(array,length)<<endl;
        system("pause");
        return 0;
    }
    

    回顾

    大一粗略了解了c++语言用法,大二学习Java,数据库,MATLAB等,大三学习aspnet网页制作等

    展望

    巩固基础,联系各个学科,学好学精。

    预习(两人合作)

    “代码规范”可以分成两个部分。

    (1)代码风格规范。主要是文字上的规定,看似表面文章,实际上非常重要。

    (2)代码设计规范。牵涉到程序设计、模块之间的关系、设计模式等方方面面,这里有不少与具体程序设计语言息息相关的内容(如C/C++/Java/C#),但是也有通用的原则,这里主要讨论通用的原则。

    代码复审的目的在于:

    (1)找出代码的错误。如:

         a. 编码错误,比如一些能碰巧骗过编译器的错误。
    
         b. 不符合项目组的代码规范的地方。
    

    (2)发现逻辑错误,程序可以编译通过,但是代码的逻辑是错的。

    (3)发现算法错误,比如使用的算法不够优化。

    (4)发现潜在的错误和回归性错误——当前的修改导致以前修复的缺陷又重新出现。

    (5)发现可能改进的地方。

    (6)教育(互相教育)开发人员,传授经验,让更多的成员熟悉项目各部分的代码,同时熟悉和应用领域相关的实际知识。

    为什么要结对编程?

    每人在各自独立设计、实现软件的过程中不免要犯这样那样的错误。在结对编程中,因为有随时的复审和交流,程序各方面的质量取决于一对程序员中各方面水平较高的那一位。这样,程序中的错误就会少得多,程序的初始质量会高很多,这样会省下很多以后修改、测试的时间。具体地说,结对编程有如下的好处:

    (1)在开发层次,结对编程能提供更好的设计质量和代码质量,两人合作能有更强的解决问题的能力。

    (2)对开发人员自身来说,结对工作能带来更多的信心,高质量的产出能带来更高的满足感。

    (3)在心理上, 当有另一个人在你身边和你紧密配合, 做同样一件事情的时候, 你不好意思开小差, 也不好意思糊弄。

    (4)在企业管理层次上,结对能更有效地交流,相互学习和传递经验,能更好地处理人员流动。因为一个人的知识已经被其他人共享。

    总之,如果运用得当,结对编程能得到更高的投入产出比(Return of Investment)。

    https://gitee.com/jansyw/codes/i97qj8kg1uxoz43y0etav84

  • 相关阅读:
    笔记12:maven项目管理工具
    笔记11:Oracle基础
    笔记10:springMVC
    笔记9:spring
    笔记8:mybatis
    Bad Sequence
    Optimal Currency Exchange
    Two Small Strings
    Equalizing by Division (easy version)&&(hard version)
    Codeforce 1096:D. Easy Problem(DP,思维)
  • 原文地址:https://www.cnblogs.com/yanwenshen/p/12458259.html
Copyright © 2011-2022 走看看