【问题标题】:Erroneous calculation method in C++C++中的错误计算方法
【发布时间】:2014-11-11 02:52:10
【问题描述】:

我正在学习 C++ 初学者课程,我现在正在努力完成一项作业。作业是:

一个特定的才艺比赛有 5 名评委,每个评委给每个表演者打分,分数在 0 到 10 之间。编写一个程序,使用这些规则来计算和显示参赛者的分数。它应该包括以下功能:

• int getJudgeData() 应该向用户询问裁判的分数,将其存储在参考参数变量中,并对其进行验证。 5 位评委中的每一个都应该由 main 调用一次此函数。

• double calcScore() 应该计算并返回在删除执行者获得的最高和最低分数后剩下的 3 个分数的平均值。这个函数应该只被main调用一次,并且应该传递5个分数。

calcScore 应该调用下面描述的两个附加函数,它使用返回的信息来确定要删除哪个分数。

• int findLowest() 应该找到并返回传递给它的 5 个分数中的最低值。

• int findHighest() 应该找到并返回传递给它的 5 个分数中的最高值。

在测试我的程序时,如果裁判员的分数最低,它可以正常工作,但现在其他裁判员的分数最低,它可以正常工作。

Ex: I will enter 2,1,5,4,3 so it should drop the 1 & 5 and come out with the avg of 3 but the result is 2.6667

int findLowest() 的代码是:

int findLowest(int scoreOne,int scoreTwo,int scoreThree,int scoreFour,int scoreFive)
{
    int lowest = scoreOne;
    if ( scoreTwo < lowest )
        lowest = scoreTwo;
    if ( scoreThree < lowest )
        lowest = scoreThree;
    if ( scoreFour < lowest )
        lowest = scoreFour;
    if ( scoreFive < lowest )
        lowest = scoreFive;

    return lowest;
}

int findHighest 类似,但小于符号明显切换。

对于我拥有的calcAverage() 函数:

double calcAverage(double OneScore,double twoScore,double threeScore, double fourScore,double fiveScore)
{
    double lowest, highest, sum;

    lowest=findLowest(OneScore,twoScore,threeScore,fourScore,fiveScore);
    highest=findHighest(OneScore,twoScore,threeScore,fourScore,fiveScore);

    sum = (OneScore + twoScore + threeScore + fourScore + fiveScore);
    sum = sum - lowest;
    sum = sum - highest;
    sum = sum / 3;

    cout<<"\nAfter droping highest and lowest scores\n";
    cout<<"Your average score is "<<sum << endl;

return 0;
}

编辑:我已经在 findHighest 和 findLowest 函数中放置了 cout 语句,以检查它确定的数字是正确的,并且每次选择正确的最高数字和最低的数字时,它将有 0

编辑二:我发现无论输入什么,程序都会将分数设置为 0。程序会为其他分数输入正确的输入。

【问题讨论】:

  • 你能想象如果有 100 名评委,甚至 20 名评委吗?输入所有代码后,您将需要一个新键盘。提示:学习数组。
  • @PaulMcKenzie 谢谢你的建议。我们还没有在这门课程中学习数组,所以教授没有让我们在这里使用它们。
  • 我可以看到一个有 3 位评委的练习,并且要求您编写这样的代码。但是,如果你被告知以这种方式做事,那么任何高于 3 的东西都会变成一个恶作剧。处理 > 3 个项目的方式总是(我什至不会说“几乎总是”)使用数组或某种聚合类型。
  • 我相信这就是我们接下来要介绍的内容,所以我们可能会再次收到相同的作业,但评委和教授的数量会增加,并且正在寻找要使用的数组
  • 这里有一些类型混淆。在计算平均值之前,一切都应该是ints,为什么一切都是double

标签: c++ date-arithmetic


【解决方案1】:

快速浏览后,您拥有的代码应该可以工作。再次运行它并确保每个 if 语句都与您想要做的一致。如果这不起作用,您可以尝试另一种方法是

double lowest = oneScore;

if (twoScore < lowest)
    lowest = twoScore;
if(threeScore < lowest)
    lowest = threeScore;

etc...

您的 calcAverage() 函数可能只是因为最低 () 和 hihgest() 函数而失败。

编辑:如果您学习过数组,请使用它来声明分数数组,然后使用 for 循环进行迭代,正如 Paul 在他的评论中暗示的那样

【讨论】:

  • 这实际上是我首先拥有的,但仍然得到相同的结果。如果判断一个得分最低,程序会计算正确的平均值,但它不能以任何其他方式正常工作
  • @user3363195 - 很难相信您的代码与答案中发布的代码相同。确保在这些检查之间没有else,因为这样做肯定行不通。
  • @user3363195 - 请在此处查看代码。 ideone.com/kTSiwu 获取该代码并告诉我们它与您的代码有何不同。效果很好。
  • @PaulMcKenzie 我发现问题不在 findLowest 函数中。出于某种原因,无论输入什么,程序都会将分数设置为 0。它需要其他分数的正确输入只是不得分
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-11
  • 1970-01-01
  • 2012-07-28
  • 1970-01-01
  • 2021-03-29
相关资源
最近更新 更多