2016-07-15 186 views
4

編寫一個輸入一系列10個數字並查找10個數字的2個最大值的程序? (只使用如果和循環)查找最大和最大的數字

有人可以幫我解決這個問題嗎?我試圖但不對。它不能列出第二大數字。任何幫助將不勝感激。

#include "stdafx.h" 
    #include <stdio.h> 
    #include <stdlib.h> 
    #include <math.h> 


int main() 
{ 
    int counter = 0, number, largest = 0,largest2=0; 
    for (counter = 1; counter <= 10; counter++) { 
     printf("Enter number (%d): ", counter); 
     scanf_s("%d", &number); 
     if (number > largest) 
     { 
      largest = number; 
     } 
     else 
     { 
      if (number > largest2) 
       largest2 = number; 
     } 
    } 
    printf("The largest number is %d\n", largest); 
    printf("The second largest number is %d\n", largest2); 
    system("pause"); 
    return 0; 
} 
+0

這是功課? hehehe –

+0

順便說一句,你應該使用「INT_MIN」爲最大的初始化 - 如果我會寫-10,-11,..作爲輸入? 從零開始,你會得到0作爲最大的,但那不是真的:) 看看常量,例如。那裏https://en.wikibooks.org/wiki/C_Programming/C_Reference/limits.h – xxxvodnikxxx

+0

您如何預期重複值被處理?例如,您希望輸入「9 9 10 10 10 10 10 10 10 10 10」的輸出是什麼?根據定義,第二大的值是9或10. – Peter

回答

3

你的邏輯必須細化:

  • 當你得到一個新的數,你必須更新的第二大和,因爲以前的數量最多成爲第二大。
  • 此外,您應該初始化最大和第二大到INT_MIN,以便您可以正確處理負數。
  • 您還必須檢查返回值scanf_s(),並在用戶未能輸入數字時退出。

這裏是一個改進版本:

#include <limits.h> 
#include <stdio.h> 
#include <stdlib.h> 

int main(void) { 
    int number, largest = INT_MIN, largest2 = INT_MIN; 

    for (int counter = 1; counter <= 10; counter++) { 
     printf("Enter number %d: ", counter); 
     if (scanf_s("%d", &number) != 1) { 
      printf("input failure\n"); 
      return 1; 
     } 
     if (number > largest) { 
      largest2 = largest; 
      largest = number; 
     } else 
     if (number > largest2) { 
      largest2 = number; 
     } 
    } 
    printf("The largest number is %d\n", largest); 
    printf("The second largest number is %d\n", largest2); 
    system("pause"); 
    return 0; 
} 
+0

謝謝chqrlie! –

+0

我的榮幸。你可以對此和任何其他答案都有幫助。 – chqrlie

13

當你得到一個新的最大號碼時,舊的最大號碼成爲第二大號碼。所以你只需要一次檢查最大的數字和兩個作業。

喜歡的東西

if (number > largest) 
{ 
    largest2 = largest; 
    largest = number; 
} 

你仍然需要檢查比largest2更大的數字。

+0

我很傻,很簡單。非常感謝你! –

1

在下面的代碼:

if (number > largest) 
    { 
    largest = number; 
    } 

你扔掉已知數量最多,而這一數字應成爲第二大數目。所以你應該添加行maximum2 =最大。

注意:通過初始化最大值和最大值2爲零,該算法不適用於負數。

+0

謝謝MrBastK! –

1

如果numberlargest時,你應該更新largest2太多,因爲現在你比以往任何發現了一些較大的,largest成爲第二大數目!

if (number > largest) 
    { 
     largest = number; 
    } 

成爲

if (number > largest) 
    { 
     largest2 = largest; 
     largest = number; 
    } 
+0

謝謝Nicolas Jean! –

+1

@dave你不必感謝所有回覆你問題的人。這只是不推薦。 –