[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; }
<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上提交代碼,可是收穫也很大。