【问题标题】:C++ Basic FunctionsC++ 基本函数
【发布时间】:2015-12-03 23:05:52
【问题描述】:

我在编程课上被分配了家庭作业。我明白它的要点,但我觉得有点失落。我想要一些帮助和反馈。

我的问题: 一个特定的人才组合有 5 名评委,每个评委给每个表演者打 0 到 10 分。允许使用分数分数,例如 8.3。表演者的最终分数是通过去掉所收到的最低和最高分,然后取其余 3 个分数的平均值来确定的。编写一个程序,使用这种方法计算参赛者的分数。它应该包括以下功能:

double getJudgeData() 应该向用户询问裁判的分数并验证分数。这个函数应该从 main 调用 5 次,5 位评委各调用一次。 void calcScore() 应该计算并显示在删除表演者收到的最高和最低分数后剩下的三个分数的平均值。这个函数应该从 main 调用一次,并且应该传递 5 个分数。 下面描述的最后两个函数应该由 calcScore 调用,它使用返回的信息来确定要删除哪个分数。

double findLowest() 应该找到并返回传递给它的五个分数中的最低值。 double findHighest() 应该找到并返回传递给它的五个分数中的最高值。 输入验证:不接受低于 0 或高于 10 的评委分数。

我知道获取评委数据的代码看起来类似于

Double getJudgeData(double score){
    cout << "Judge, please enter your score";
cin >> score;
    while (score<0.0 || score> 10.0){
    cout << "Invalid score. Please enter a correct one";
    cin>>score
    }
    return score;
    }

基本上重复了 4 次,总共 5 次。我想我只需将变量名称更改为 score1、score2 等。 为了计算出最高分和最低分,我想我可以只使用几个 if 语句。 例如,

if (score < lowest)
    lowest=score;
else if (score1 < score)
    lowest = score1;
else if (score2 < score)
    lowest = score2;
else if (score3 < score)
    lowest = score3;
else if (score4 < score)
    lowest = score4;

最高的则相反。

我想我最大的问题是 void calcscore() 的编码和理解这一切。我觉得我完全不明白。就像我理解的那样,我正在使用函数来找出每种情况下的评委分数并将分数发送回 main。但是,我只是觉得我不明白我在做什么。我想要一些指导。提前谢谢你。

编辑 好的,我已经对我的代码进行了更多处理,然后就到了这里。

    #include <iostream>

    using namespace std;

    double getJudgeData(double score) {

cout << "Judge 1 please enter your score: ";
cin >> score;

while (score < 0.0 || score > 10.0) {
    cout << "Invalid score. Please enter a correct one" << endl;
    cin >> score;
}
return score;
}

      double getJudgeData1(double score1) {

cout << "Judge 2 please enter your score: ";
cin >> score1;

while (score1 < 0.0 || score1 > 10.0) {
    cout << "Invalid score. Please enter a correct one" << endl;
    cin >> score1;
}
return score1;
}

     double getJudgeData2(double score2) {

cout << "Judge 3 please enter your score: ";
cin >> score2;

while (score2 < 0.0 || score2 > 10.0) {
    cout << "Invalid score. Please enter a correct one" << endl;
    cin >> score2;
}
return score2;
}

     double getJudgeData3(double score3) {

cout << "Judge 4 please enter your score: ";
cin >> score3;

while (score3 < 0.0 || score3 > 10.0) {
    cout << "Invalid score. Please enter a correct one" << endl;
    cin >> score3;
}
return score3;
}

double getJudgeData4(double score4) {

cout << "Judge 5 please enter your score: ";
cin >> score4;

while (score4 < 0.0 || score4 > 10.0) {
    cout << "Invalid score. Please enter a correct one" << endl;
    cin >> score4;
}
return score4;
}
     double findHighest(double score, double score1, double score2, double score3, double score4) {

double highest = score;
if (score1 > highest)
    highest = score1;
else if (score2 > highest)
    highest = score2;
else if (score3 > highest)
    highest = score3;
else if (score4 > highest)
    highest = score4;

return highest;

}

 double findLowest(double score, double score1, double score2, double score3, double score4) {

double lowest = score;
if (score1 < lowest)
    lowest = score1;
else if (score2 < lowest)
    lowest = score2;
else if (score3 < lowest)
    lowest = score3;
else if (score4 < lowest)
    lowest = score4;

return lowest;
    }


     void calcScore(double score, double score1, double score2, double score3, double score4, double highest, double lowest) {

double findHighest(highest);
double findLowest(lowest);
double avgScore = (score + score1 + score2 + score3 + score4 - lowest - highest) / 3;

cout << "\nThe contestant's average score is: " << avgScore << endl;
    }

    int main(double score, double score1, double score2, double score3, double score4, double highest, double lowest) {

getJudgeData(score);
getJudgeData1(score1);
getJudgeData2(score2);
getJudgeData3(score3);
getJudgeData4(score4);



system("PAUSE");

return 0;

}

它运行并能够检测代码是否对所有裁判无效。就在它获得评委的所有输入之后,它只会说“按任意键继续”两次并结束。它似乎没有通过 void calcscore 部分。

【问题讨论】:

    标签: c++ function


    【解决方案1】:

    我会在一个向量中收集 5 个分数。然后计算 score 将迭代它们,对它们求和,跟踪最低/最高,然后从总和中减去两者。

    不会为您编写代码,但这似乎是一种好方法。

    对评论的回应:

    那么你的最小/最大将不得不像这样愚蠢:

    double min(double a0, double a1, double a2, ...)
    {
        double min = a0;
    
        if (a1 < min) min = a1;
        if (a2 < min) min = a2;
        ...
    
        return min;
    }
    

    省略if,否则如果任何一个小于a0,您将无法获得尾端参数。

    【讨论】:

    • 还没有学习向量或数组。我听到我的一些同学说,如果我们只是使用这两个中的一个来完成它会更容易。这是我的第一堂编程课,还有很多东西要学。
    • 那么这样的事情对我的最低分有用吗? double findLowest(double score, double score1, double score2, double score3, double score4) { double lowest = 10; if (score &lt; lowest) lowest = score; else if (score1 &lt; score) lowest = score1; else if (score2 &lt; score) lowest = score2; else if (score3 &lt; score) lowest = score3; else if (score4 &lt; score) lowest = score4; return lowest; }
    • 没有。考虑一下当 score2 小于 score 并且 score3 小于 score2 时会发生什么。
    • 哦,我明白我做错了什么。我编辑了我的版本并相信这是正确的。 double findLowest(double score, double score1, double score2, double score3, double score4) { double lowest = score; if (score1 &lt; lowest) lowest = score1; else if (score2 &lt; lowest) lowest = score2; else if (score3 &lt; lowest) lowest = score3; else if (score4 &lt; lowest) lowest = score4; return lowest; } 非常感谢您到目前为止帮助我并积极响应。
    【解决方案2】:

    或许解决方案应该围绕

    averageScore = (score1 + score2 + score3 + score4 + score5 - findLowest() - findHighest()) / 3;
    

    这将使您不必关心哪个分数最低和最高,只关心最高和最低分数的值。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-13
      • 2012-02-17
      • 2012-09-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多