我在编程课上分配了作业。我理解它的要点,但我觉得有点失落。我想要一些帮助和反馈。
我的问题: 一个特定的人才组成有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()并理解这一切。我觉得我并不完全理解它。就像我明白我正在使用函数来查找每个案例中的评分并将分数发送回主要评分。 BUt,我只是觉得我不明白我在做什么。我想要一些指导。提前谢谢。
修改的 好的,我已经在我的代码上工作了一些,并且到了这里。
#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部分。
答案 0 :(得分:0)
我会在矢量中收集5个分数。然后计算分数将迭代它们,对它们求和,跟踪最低/最高,然后从总和中减去两者。
不打算为你编写代码,但这似乎是一种很好的方法。
对评论的回应:
然后你的min / max必须是这样的某种愚蠢:
double min(double a0, double a1, double a2, ...)
{
double min = a0;
if (a1 < min) min = a1;
if (a2 < min) min = a2;
...
return min;
}
如果前者中的任何一个小于a0,则忽略if或者你不会得到尾端参数。
答案 1 :(得分:0)
解决方案可能应围绕
averageScore = (score1 + score2 + score3 + score4 + score5 - findLowest() - findHighest()) / 3;
这将使您不必关心哪个分数最低和最高,只关注最高分和最低分的值。