• 计算与软件工程作业三


    作业要求 第三次作业
    我在这个课程的目标 能够实现简单软件的开发,对软件进行测试、维护和管理,可以将本课程与之前所学联系起来
    此作业在哪个具体方面帮我实现目标 实现了对代码进行单元测试
    参考文献 程序参考文献 单元测试参考文献
    gitee链接 gitee链接

    一、作业正文

    程序代码

    #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;
    }
    
    运行结果

    单元测试


    测试代码
    #include "stdafx.h"
    #include "CppUnitTest.h"
    #include "array.cpp"
    using namespace Microsoft::VisualStudio::CppUnitTestFramework;
    namespace UnitTest1
    {		
    	TEST_CLASS(UnitTest1)
    	{
    	public:
    		
    		TEST_METHOD(getmax_Test)
    		{
    			// TODO: 在此输入测试代码
    			int a[]={-32,-10,33,-23,32,-12,41,-12,1,3,5,-98,70,-21,10,-9,61};
    			Assert::AreEqual(111,getmax(a,17));
    		    
    		}
    		TEST_METHOD(getstartIndex_Test)
    		{
    			// TODO: 在此输入测试代码
    			int a[]={-32,-10,33,-23,32,-12,41,-12,1,3,5,-98,70,-21,10,-9,61};
    			Assert::AreEqual(12,getstartIndex(a,17));
    		    
    		}
    		TEST_METHOD(getendIndex_Test)
    		{
    			// TODO: 在此输入测试代码
    			int a[]={-32,-10,33,-23,32,-12,41,-12,1,3,5,-98,70,-21,10,-9,61};
    			Assert::AreEqual(16,getendIndex(a,17));
    		    
    		}
    
    	};
    }
    

    二、博客作业

    回顾

    大一开始接触计算机的学习并学习了MS office和c++语言,其中MS office主要是一个办公工具,学起来也比较简单,易操作。通过对c++语言的学习,我第一次知道了我们使用的手机软件都是通过一行行的代码实现的,虽然c++语言学起来相对较难,但是在学期结束后自己也已经可以编写一些简单的程序了。大二开始学习了Java语言和数据结构,Java语言和c++语言都是面向对象语言,都使用了面向对象的思想(封装、继承、多态),不过Java语言中没有指针的概念,不支持多重继承,但Java语言中引入了接口的概念,可以同时实现多个接口,在Java语言的学习中了解了如何做图形界面。通过对数据结构的学习,明白了什么是队列、栈、链表、树、图等,对指针进行了进一步理解。大三学习了数据库、操作系统、ASP.NET,学习了更为复杂的代码编写、数据库的连接以及网站的建立,学习了如何建立一个简单的聊天室网站,了解了什么是三层架构。这两年多虽然学习很多计算机的知识,但是自己并不能将它们很好的联系起来,复杂的代码并不能自己写出来。

    展望

    希望通过接下来一年多的学习,自己能够写出一些复杂的程序提高编程水平,学习并掌握更多的计算机知识,能够将目前所学和之前的学习联系起来。

    三、预习 3、两人合作

    “代码规范”可以分成两个部分:
    (1)代码风格规范。主要是文字上的规定,看似表面文章,实际上非常重要。
    (2)代码设计规范。牵涉到程序设计、模块之间的关系、设计模式等方方面面,这里有不少与具体程序设计语言息息相关的内容(如C/C++/Java/C#),但是也有通用的原则,这里主要讨论通用的原则。
    代码复审分为:
    (1)自我复审(自己 vs. 自己)
    (2)同伴复审(复审者 vs. 开发者)
    (3)团队复审(团队 vs. 开发者)
    代码复审的目的:
    (1)找出代码的错误。
    (2)发现逻辑错误,程序可以编译通过,但是代码的逻辑是错的。
    (3)发现算法错误,比如使用的算法不够优化。
    (4)发现潜在的错误和回归性错误——当前的修改导致以前修复的缺陷又重新出现。
    (5)发现可能改进的地方。
    (6)教育(互相教育)开发人员,传授经验,让更多的成员熟悉项目各部分的代码,同时熟悉和应用领域相关的实际知识。
    结对编程的优点:
    (1)在开发层次,结对编程能提供更好的设计质量和代码质量,两人合作能有更强的解决问题的能力。
    (2)对开发人员自身来说,结对工作能带来更多的信心,高质量的产出能带来更高的满足感。
    (3)在心理上, 当有另一个人在你身边和你紧密配合, 做同样一件事情的时候, 你不好意思开小差, 也不好意思糊弄。
    (4)在企业管理层次上,结对能更有效地交流,相互学习和传递经验,能更好地处理人员流动。因为一个人的知识已经被其他人共享。

  • 相关阅读:
    Monad Maybe
    Linq怎么支持Monad
    创建我们第一个Monad
    Monad的重点
    解析器组合子
    NFA
    全排列算法
    R语言将数据框转成xts
    R语言的字符串处理
    wpf mvvm MenuItem的Command事件
  • 原文地址:https://www.cnblogs.com/lmengmeng/p/12434028.html
Copyright © 2020-2023  润新知