軟件工程(2019)第三次我的做業

[TOC]目錄ios

#軟件工程(2019)第三次我的做業git



##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。 -- 引用自《百度百科》函數

###具體要求工具

  • (1) 請從上述兩個題目中根據我的實力任選一題,要求寫出可運行的完整代碼提交至GitHub或者Coding.net系統中,並將代碼地址附到博客內
  • (2) 請從語句覆蓋、斷定覆蓋、條件覆蓋、斷定/條件覆蓋、條件組合覆蓋五個覆蓋標準中(條件組合覆蓋難度較大,鼓勵嘗試,但請謹慎選擇),任選一個標準設計測試用例
  • (3) 請利用自動測試工具對程序進行測試
  • (4) 請將程序運行結果和自動測試分析結果截圖附到博客中

##2、編碼單元測試

###代碼地址學習

戳這裏測試

###源程序編碼

  考慮最大連續子數組之和,只要存在正數,最大和就必定是正數。基於此分析,最大連續子數組的第一個元素必定會是正數,如果元素累加以後值爲負數,就須要從下一個不爲負的元素從新開始累計。

  • 主函數
#include<stdio.h>
#include<iostream>
using namespace std;
#include"test2.h"
int main()
{
	int a[100],num;
	int i, max;
	cin >> num;
	if (num <= 0)
		cout << "error" << endl;
	else
	{
		for (i = 0; i < num; i++)
			cin >> a[i];
		max = MAX(a, num);
		cout << max << endl;
	}
	system("pause");
	return 0;

}
  • 頭文件
#pragma once
#include"stdio.h"
int MAX(int a[], int n)
{
	int i;
	int max = 0, t = 0;
	for (i = 0; i < n; i++)
	{
		t = t + a[i];
		if (t > max)
			max = t;
		if(t<0)
			t = 0;
	}
	return max;
}
  • MAX函數流程圖

<img src="https://img2018.cnblogs.com/blog/1645406/201904/1645406-20190418214545193-1918207403.png"width="55%" height="55%">

##3、單元測試

選擇條件/斷定覆蓋設計測試案例

斷定一:t>max,t<=max; 斷定二:t<0,t>=0;

  • 測試數組取值
序號 數組取值 結果
1 {-1,-2,-3,-4,-5} 0
2 {-1,-2,5,9,-4} 14
3 {3,6,6,-6,-5} 15
4 {9,6,5,-6,10} 24
  • 單元測試代碼
#include "stdafx.h"
#include "CppUnitTest.h"
#include"../Project2/test2.h"
using namespace Microsoft::VisualStudio::CppUnitTestFramework;

namespace UnitTest1
{		
	TEST_CLASS(UnitTest1)
	{
	public:
		
		TEST_METHOD(TestMethod1)
		{
			// TODO: 在此輸入測試代碼
			int a[5] = { -1,-2,-3,-4,-5 };
			Assert::AreEqual(0, MAX(a, 5));
		}
		TEST_METHOD(TestMethod2)
		{
			// TODO: 在此輸入測試代碼
			int a[5] = { -1,-2,5,9,-4 };
			Assert::AreEqual(14, MAX(a, 5));
		}
		TEST_METHOD(TestMethod3)
		{
			// TODO: 在此輸入測試代碼
			int a[5] = { 3,6,6,-6,-5 };
			Assert::AreEqual(15, MAX(a, 5));
		}
		TEST_METHOD(TestMethod4)
		{
			// TODO: 在此輸入測試代碼
			int a[5] = {9,6,5,-6,10};
			Assert::AreEqual(24, MAX(a, 5));
		}
	};
}
  • 測試結果

<img src="https://img2018.cnblogs.com/blog/1645406/201904/1645406-20190418225308796-1141960986.png"width="40%" height="40%">

##4、程序運行結果

<img src="https://img2018.cnblogs.com/blog/1645406/201904/1645406-20190418225842230-1657042956.png"width="40%" height="40%">

<img src="https://img2018.cnblogs.com/blog/1645406/201904/1645406-20190418225849295-599842239.png"width="40%" height="40%">

##5、最後

  第一次我的編程,仍是有必定難度的,學習本身設計單元測試案例,在coding上提交代碼,可是收穫也很大。

相關文章
相關標籤/搜索