軟件工程第三做業


1. 題目

GITHUB代碼地址:

  GITHUB代碼地址:https://github.com/wuxuezeproject/-
  最大連續子數組和(最大子段和)
問題描述: 給定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。
git


2. 程序設計及代碼編輯

2.1程序設計

  程序的主要方程爲Sum = (Sum + array[i]) > (array[i]) ? (Sum + array[i]) : (array[i]);
  最大和要麼是前面所求最大和加下一項,要麼是下一項。具體程序流程圖以下:

github

2.2代碼編輯

int GetSum(int* array, int num)
{
    if (array == NULL) return 0;
    int i;
    int Max{ array[0] };
    int Sum{ array[0] };
    for (i = 1; i < num; i++)
    {
        Sum = (Sum + array[i]) > (array[i]) ? (Sum + array[i]) : (array[i]);
        if (Sum > Max)
        {
            Max = Sum;
        }
    }
    if (Max < 0)
    {
        Max = 0;
    }
    return Max;
}

3. 測試分析及結果

  本次測試,我採用的是條件組合測試。本次測試中涉及到的條件選擇共有四個,一共有九種組合方式。數組

3.1測試分析

  條件選擇的可能性組合的二叉圖以下:
單元測試

3.2測試案例設計

  針對上面的九種條件組合,對應的設計案例以下:學習

array==NULL? sum取值 sum>max? max<0? 測試用例 結果
array==NULL {} 0
array!=NULL sum=(sum+array[[i]) sum>max max>0 {2,2,2} 6
array!=NULL sum=(sum+array[[i]) sum>max max<0 不存在
array!=NULL sum=(sum+array[[i]) sum<max max>0 {5,,-2,3} 6
array!=NULL sum=(sum+array[[i]) sum<max max<0 不存在
array!=NULL sum= array[[i]) sum>max max>0 {-2,5,3} 8
array!=NULL sum= array[[i]) sum>max max<0 {-2,-1,-3} 0
array!=NULL sum= array[[i]) sum<max max>0 不存在
array!=NULL sum= array[[i]) sum<max max<0 {-2,-3,-5} 0

  測試代碼以下:測試

TEST_METHOD(TestMethod1)    //array==NULL
        {
            int *array = {};
            int num = sizeof(array) / sizeof(array[0]);
            int Max = GetSum(array, num);
            Assert::AreEqual(Max, 0);
        }
        TEST_METHOD(TestMethod2)    //(sum=sum+array)&&(sum>max)&&(max>0)
        {
            int array[] = { 2,2,2 };
            int num = sizeof(array) / sizeof(array[0]);
            int Max = GetSum(array, num);
            Assert::AreEqual(Max, 6);
        }
        TEST_METHOD(TestMethod3)    //(sum=sum+array)&&(sum<max)&&(max>0)
        {
            int array[] = { 5,-2,3 };
            int num = sizeof(array) / sizeof(array[0]);
            int Max = GetSum(array, num);
            Assert::AreEqual(Max, 6);
        }
        TEST_METHOD(TestMethod4)    //(sum=array)&&(sum>max)&&(max>0)
        {
            int array[] = { -2,5,3 };
            int num = sizeof(array) / sizeof(array[0]);
            int Max = GetSum(array, num);
            Assert::AreEqual(Max, 8);
        }
        TEST_METHOD(TestMethod5)    //(sum=array)&&(sum>max)&&(max<0)
        {
            int array[] = { -2,-1,-3 };
            int num = sizeof(array) / sizeof(array[0]);
            int Max = GetSum(array, num);
            Assert::AreEqual(Max, 0);
        }
        TEST_METHOD(TestMethod6)    //(sum=array)&&(sum<max)&&(max<0)
        {
            int array[] = { -2,-3,-5 };
            int num = sizeof(array) / sizeof(array[0]);
            int Max = GetSum(array, num);
            Assert::AreEqual(Max, 0);
        }

3.3測試結果

  測試時用例所有經過,結果以下:
設計


3.總結

  本次做業,學到了簡單的我的項目的開發,也更加熟悉了單元測試,可以對不一樣類型的條件進行單元測試,收穫滿滿。
  每一次做業都會有新的收穫,我也會在學習的道路上一直走下去,屏幕前的你,也要加油啊!
code

相關文章
相關標籤/搜索