2013-05-30 64 views
0

我必須編寫一個程序來查找參數列表中五個整數中最小的一個。這裏是我的代碼:爲什麼我在測試中得到'0'作爲返回值?

int min5(int a, int b, int c, int d, int e) 
{ 
    int answer; 

    if (a < b && a < c && a < d && a < e) 
    { 
     answer = a; 
    } 
    else if (b < a && b < c && b < d && b < e) 
    { 
     answer = b; 
    } 
    else if (c < a && c < b && c < d && c < e) 
    { 
     answer = c; 
    } 
    else if (d < a && d < b && d < c && d < e) 
    { 
     answer = d; 
    } 
    else if (e < a && e < b && e < c && e < d) 
    { 
     answer = e; 
    } 
    return answer; 
} 

這是我的測試用例:

void min5_tests(void) 
{ 
    int a, b, c, d, e, result; 

    a = 1; 
    b = 4; 
    c = 2; 
    d = 7; 

    result = min5(a, b, c, d, e); 
    checkit_int(result, 1); 
} 

int main() 
{ 
    min5_tests(); 

    return 0; 
} 

當我運行我的測試,它說,該值應爲0,而不是什麼,我希望它是,1。我我認爲我的代碼是正確的,但我猜不是。 :(我不知道這是爲什麼。

+1

'e'未初始化,請爲其添加值。 'checkit_int'做什麼? – Nobilis

+0

啊!對不起,沒有看到!謝謝! – Karen

+0

'checkit_int()'幾乎肯定只是檢查它的兩個參數是否相等,如果不是,則打印一個錯誤。 – paxdiablo

回答

1

好了,你有沒有一開始,因此將被設置爲一個不確定的值,可能是零初始化e

這也是相當......應我們說,如果所有輸入值都相等,則將返回的單位化值(不包括if的陳述將爲真),而不是優雅的代碼(沒有違法意圖)用於找到最小值,完全可以解決這個問題。通過使用<=而不是<,但它可以用類似的東西讀取更多的可讀性:

int min5 (int a, int b, int c, int d, int e) { 
    int answer = a; 
    if (b < answer) answer = b; 
    if (c < answer) answer = c; 
    if (d < answer) answer = d; 
    if (e < answer) answer = e; 
    return answer; 
} 
+0

啊!我明白,對不起,粗心大意的錯誤! – Karen

1

你不給e值。嘗試設置e = 10;

+0

另外,當一個或多個變量具有相同的值時,您會做什麼?例如,如果a和b = 0並且c,d,e = 100,那麼你有麻煩了。 – Owen

+0

嗯...好點。如果問題沒有指定(他們想要的全部是5個整數的最小值),那麼......如果我不考慮這個問題,那麼是否可以? – Karen

+0

@Karen,這取決於你是否認爲'{1,1,1,1,1}'的最小值是程序運行時隨機值恰好在棧上的值。我會懷疑會不會被接受:-)在_minimum,_ use'<='而不是'<'。 – paxdiablo

0

e未初始化,也是一個相當呃不健康的代碼。 另外,如果最小值由兩個或更多變量共享,則代碼可能會有問題。 嘗試初始化一個變量的答案,然後將答案的值與其他每個變量進行比較。換句話說,這裏沒有其他語句,因爲它必須將答案與所有​​其他4個變量進行比較,一次一個。

相關問題