2016-07-15 13 views
4

10個の数字を連続して入力し、10個の数字のうち2つの最大値を見つけるプログラムを作成しますか? (ifとloopのみを使用)最大と2番目に大きな数字を見つける

誰でも私が問題の解決に手伝ってくれますか?私はしようとしましたが、それは正しくありませんでした。 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

btwあなたが最大のinitに "INT_MIN"を使用する必要があります。もし入力として-10、-11、..を書いたらどうなりますか? 0からのinitから、最大値として0が得られますが、それは真ではありません:) constanctsを見てください。 https://en.wikibooks.org/wiki/C_Programming/C_Reference/limits.h – xxxvodnikxxx

+0

繰り返し値がどのように処理されると思いますか?たとえば、「9 9 10 10 10 10 10 10 10 10 10」という入力に対してどの出力を期待していますか?定義に応じて、2番目に大きな値は9または10のいずれかです。 – Peter

答えて

3

次のようになります。

  • 新しい最大数を取得すると、あなたが以前の数が最も多いことから、同様に第二位を更新する必要があります2番目に大きい。
  • また、負の数を正しく処理できるように、最大​​のものと最大のものを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

私の喜び。これとあなたを助ける他の答えをupvoteすることができます。 – chqrlie

13

新しい最大番号を取得すると、古い番号が2番目に大きな番号になります。だから、あなたが必要とするのは、最大の番号と2つの割り当てを一度チェックするだけです。あなたはまだlargest2より大きい番号を確認する必要がある

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

よう

何か。

次のコードで
+0

私はとてもばかげています。とてもシンプルです。どうもありがとうございました! –

1

:その数は二番目に大きい数になるはずながら、あなたは、知られている最大数を捨てる

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

。だから、最大の行を追加する必要があります=最大。

注:最大と最大の2を0に初期化することで、アルゴリズムは負の数では機能しません。

+0

ありがとうMrBastK! –

1

今あなたが以前のものよりも数が多く見つかっていることのでnumberlargestよりも大きければ、あなたもlargest2を更新する必要があり、largestは二番目に大きい数になります!

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

あなたのロジックは、洗練されなければならない

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

ありがとう、ニコラスジーン! –

+1

@あなたはあなたの質問に答えるすべての人に感謝する必要はありません。それはちょうどお勧めしません。 –

関連する問題