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
    }
}
  • 您将 return 放入 for 循环中犯了一个错误,这意味着无论您输入什么,score[1]因为该函数随后将返回 max 。

删除 for 循环中的 return 并将其放在函数的末尾,你应该没问题。

于 2012-12-04T04:54:42.210 回答
2

正如我们在这里所说,您需要将苍蝇与肉丸分开。好的选择是制作只找到最大值并分别填充数组的函数。

例子:

    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,有一个好点(虽然没有优雅地陈述)。

您应该在一个步骤中收集您的输入,然后在下一步中找到最大的数字。对于像这样简单的问题,它并没有太大的区别,但是对于更难的问题,你应该学习这种模式。

于 2012-12-04T04:56:14.860 回答
2

欢迎来到美妙的代码世界!

  1. 请记住,当调用 return 时,它会跳出 for 循环并返回给调用者。话虽如此,在您的maximum_number函数中,只需拉出 return 语句......

    return (max);
    

    ...在 for 循环之外

  2. 通过将变量i初始化为 0 而不是 1 来开始你的 for 循环。这样你将获得 5 个循环,而不是 4 个。

  3. 确保第一次执行 for 循环时,将max变量设置为输入的任何值。我通过在 if 语句中使用以下条件来确保发生这种情况

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

    注意i == 0。想想为什么会这样。

  4. 您的maximum_number函数不需要传递参数max。您可以简单地在函数中创建一个名为max的局部变量并使用它。

  5. 此外,尝试使用“驼峰”格式命名您的函数(示例如下)。

您的最终(工作)函数将如下所示:

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 回答