计算与软件工程 第3次作业
作业要求 | https://edu.cnblogs.com/campus/jssf/infor_computation17-31/homework/10454 |
---|---|
我的课程目标 | 学会一些软件的运用,对自己的代码进行储存,在有效代码基础上做出符合作业要求的改动,加以自己的理解。 |
此作业在那些具体方面实现 | 代码的运行查错 |
其他参考文献 | |
作业正文 |
正文
代码实现
数组中最大子数组的和。
用类/函数来实现
需求:希望返回 3 种信息
最大子数组的和
最大子数组开始的下标
最大子数组结束的下标
#include<iostream>
#include<cstdlib>
using namespace std;
int main()
{
int n,star=0,end=0;
//实现整型数组的输入
cout<<"输入整型数组的长度";
cin>>n;
int *p=new int[n];
cout<<"输入一个整型数组";
for(int i=0;i<n;i++)
{
cin>>p[i];
}
int sum=p[0];
int max_sum=p[0];
for(int i=1;i<n;i++)
{
if(sum>0) //从第二个数开始判断是否为正数
{
sum=sum+p[i]; //是正数,将和值(初始值为p【0】)和第i+1个数做和。
if(sum>max_sum) // 并判断是否为最大,是让其赋值给max_sum,并将子数组末位置改变。
{
max_sum=sum;
end=i;
}
}
else
{
sum=p[i]; //是负数,将第i+1个数的值赋值给和值sum
if(sum>max_sum)//并判断是否为最大,是让其赋值给max_sum,并将子数组初、末位置改变。
{
max_sum=sum;
star=i;
end=i;
}
}
}
cout<<"最大子数组位置为第"<<star+1<<"个到第"<<end+1<<"个"<<endl;
cout<<"sum="<<max_sum<<endl;
system("pause");
return 0;
}
单元测试
开始:所有单元测试都失败
改进程序,加入正确的逻辑,看到有单元测试通过,并且看到代码覆盖率的增加
重复, 直到所有单元测试都通过,代码覆盖率达到满意的结果。
#include "stdafx.h"
using namespace System;
using namespace System::Text;
using namespace System::Collections::Generic;
using namespace Microsoft::VisualStudio::TestTools::UnitTesting;
namespace TestProject2
{
[TestClass]
public ref class UnitTest1
{
private:
TestContext^ testContextInstance;
public:
/// <summary>
///获取或设置测试上下文,该上下文提供
///有关当前测试运行及其功能的信息。
///</summary>
property Microsoft::VisualStudio::TestTools::UnitTesting::TestContext^ TestContext
{
Microsoft::VisualStudio::TestTools::UnitTesting::TestContext^ get()
{
return testContextInstance;
}
System::Void set(Microsoft::VisualStudio::TestTools::UnitTesting::TestContext^ value)
{
testContextInstance = value;
}
};
#pragma region Additional test attributes
//
//编写测试时,可以使用以下附加特性:
//
//在运行类中的第一个测试之前,使用 ClassInitialize 来运行代码
//[ClassInitialize()]
//static void MyClassInitialize(TestContext^ testContext) {};
//
//在类中的所有测试都已运行之后,使用 ClassCleanup 来运行代码
//[ClassCleanup()]
//static void MyClassCleanup() {};
//
//在运行每个测试之前,使用 TestInitialize 来运行代码
//[TestInitialize()]
//void MyTestInitialize() {};
//
//在每个测试运行完之后,使用 TestCleanup 来运行代码
//[TestCleanup()]
//void MyTestCleanup() {};
//
#pragma endregion
[TestMethod]
void TestMethod1()
{
//
// TODO: 在此处添加测试逻辑
//
};
};
}
代码push
码云链接:https://gitee.com/semana/warehouse
博客作业
回顾前两年的学习,从大一的C++入手,开始编写一些简单的程序,到期末的课程设计,有自己单独完成的,也有几人和合作完成的,代码的编写能力还相对较弱,大部分会搜索资料,进行修改。大二开始涉及Matlab,Java等一些新的编程软件,了解了各个编程软件的利弊,学会运用计算机语言解决数学问题。大三又新接触了数据库和操作系统一些比较深入的编程知识,在使用过程中可以发现vs的使用频率较高,可以设计各种方面的编程,功能也较多,matlab对于画函数图比较方便,function定义一个函数输入功能即可实现,到现在大三下学期接触了博客的使用,学习了markdown的使用,在网页中也可以类似word改变字体大小格式等。希望在接下去的学习中,跟着老师一起学习编程语言,能更加熟练的掌握编程技巧,在学习中能够运用上代码编程解决数学问题和实际问题。后续对电脑的运用还要加强,在以后的社会,计算机是主流,熟练掌握计算机的运用,不论是考研还是工作都是很有帮助的。
预习
代码风格的原则是:简明,易读,无二义性。代码设计要规范。
代码的复审:
结对编程是一种敏捷软件开发的方法,两个程序员在一个计算机上共同工作。一个人输入代码,而另一个人审查他输入的每一行代码。在结对编程中,观察员同时考虑工作的战略性方向,提出改进的意见,或将来可能出现的问题以便处理。这样使得驾驶者可以集中全部注意力在完成当前任务的“战术”方面。观察员当作安全网和指南。结对编程对开发程序有很多好处。比如增加纪律性,写出更好的代码等。