3

さて、この質問を述べるのは難しいです。

私はC++の初心者であり、これらの単純な割り当てで問題が発生することはめったにありませんが、ここで何かが大きく間違っており、それを特定できません。私は何時間も試してきました。

このプログラムは、ユーザーが入力した配列から5つの数値を読み取り、最大の数値を出力することになっています。(forループを作成する方が簡単なことはわかっていますが、教授は関数を呼び出すことを望んでいました)。

唯一の問題は、5つの番号を要求する代わりに、2を要求することです。それ以外の場合は、5つの番号を要求する必要があります。はは。

ご意見をいただければ幸いです。私はいつかプログラマーになりたいと思っているので、私を厳しくすることを恐れないでください。

#include <iostream>
using namespace std;

int largest_number(int score[], int max)
{ 
    for (int i=1; i<5; i++)
    {
        cin >> score[i];
        if(score[i] > max)
            max=score[i];

        return (max);
    }
}

int main ()
{
    int score[5], max, z;

    cout << "Enter 5 numbers: " <<endl;
    cin >> score[0];
    max = score[0];

    z = largest_number(score, max);

    cout << "The largest number is: " << z <<endl;

    system("pause");
    return 0;
}
4

4 に答える 4

5
int largest_number(int score[], int max)
{ 
    for (int i=1; i<5; i++)
    {
        cin >> score[i];
        if(score[i] > max)
            max=score[i];

        return (max); //whoops! it's inside the for loop
    }
}
  • score[1]for ループ内に return を入れることで間違いを犯しました。これは、関数が後で max を返すため、何を入力するだけであっても意味します。

for ループ内の return を削除し、関数の最後に配置すれば問題ありません。

于 2012-12-04T04:54:42.210 に答える
2

コードの素晴らしい世界へようこそ!

  1. returnが呼び出されると、forループから抜け出し、呼び出し元に戻ることに注意してください。そうは言っても、largest_number関数内で、returnステートメントをプルするだけです...

    return (max);
    

    ...forループから

  2. 変数iを1ではなく0に初期化して、forループを開始します。そうすると、4サイクルではなく5サイクルになります。

  3. forループが最初に実行されるときに、max変数が入力されたものに設定されることを確認してください。ifステートメントで次の条件を使用してこれが発生することを確認しています

    score[i] > max || i == 0

    i==0に注意してください。それが機能する理由を考えてください。

  4. maximum_number関数にパラメーターmaxを渡す必要はありません。関数内にmaxというローカル変数を作成し、それを使用するだけです。

  5. また、「CamelHump」形式を使用して関数に名前を付けてみてください(以下の例)。

最終的な(動作中の)関数は次のようになります。

int largestNumber(int score[])
{ 
   int max = 0;
   for (int i = 0; i < 5; i++)
   {
      cin >> score[i];
      if (score[i] > max || i == 0)
        max = score[i];
   }
   return (max);
}
于 2012-12-04T05:05:04.650 に答える
2

ここで言うように、ハエとミートボールを分ける必要があります。良い選択は、max のみを見つける関数を作成し、配列を個別に埋めることです。

例:

    int FindMax(int score[], int size)
    {
       int max = score[0];
       for(int i = 1; i < size; i++)
           if(score[i] > max)
              max = score[i];
       return max; 
    }

int main()
{
    const int SIZE = 5;
    int score[SIZE];
    for(int i = 0; i < SIZE; i++)
    {
        cout << "Enter " << i << " number\n";
        cin >> score[i];
    }

    cout << "\nMax is " << FindMax(score, SIZE);

    return 0;
}
于 2012-12-04T04:56:05.987 に答える
2

あなたのforループで

for (int i=1; i<5; i++)
{
    cin >> score[i];
    if(score[i] > max)
        max=score[i];

    return (max);
}

あなたは戻ってきます。その return ステートメントを記述すると、関数は終了し、残りのループは通過しません。

return ステートメントをループの外に置くつもりだったと思います

for (int i=1; i<5; i++)
{
    cin >> score[i];
    if(score[i] > max)
        max=score[i];
}
return (max);

また、Fomin Arseniy、良い点がありました(優雅に述べられていませんが)。

1 つのステップで入力を収集し、次のステップで最大数を見つける必要があります。このような単純な問題では、それほど大きな違いはありませんが、より難しい問題で学ぶべきパターンです。

于 2012-12-04T04:56:14.860 に答える