模拟一个裁判给比赛选手打分。 1.要求如下: ⑴ 裁判人数为UMPIRE; ⑵ 参赛选手为任意人; ⑶ 裁判给选手打分; ⑷ 去掉一个最高分,一个最低分,取其平均分为选手得分; ⑸ 按参赛选手的序号显示选手得分; ⑹ 按名次显示参赛选手得分(用插入法排序)。 2.提示: ⑴ 定义一个类名为Result的记分类为选手记分,数据成员至少包括选手编号(用整型)、姓名(用字符数组)、裁判为选手的打分及得分(用实型数组)等,成员函数自定(必须有构造函数),将类的定义保存在“result.h”中; ⑵ 测试程序(保存在exp_206.cpp中)采用交互方式: ① 提示输入参赛选手人数; ② 提示输入所有参赛选手的编号及姓名; ③ 显示“比赛开始,请为选手打分:”; ④ 显示:去掉的最高分、最低分,选手得分; ⑤ 比赛结束,按编号显示选手的得分; ⑥ 按名次显示选手得分。
时间: 2024-02-13 21:04:02 浏览: 131
C++ 模拟打分及求平均分的过程
好的,我来帮你模拟一个裁判给比赛选手打分的程序,具体实现如下:
首先,我们定义一个Result类,用来记录每个选手的编号、姓名、裁判打分和得分。
result.h文件代码如下:
```c++
#ifndef RESULT_H
#define RESULT_H
const int UMPIRE = 5; // 裁判人数
class Result {
public:
Result(int id, const char* name); // 构造函数
int getId() const { return id_; }
const char* getName() const { return name_; }
void setScore(int index, double score); // 设置裁判分数
double getScore() const; // 计算平均分
private:
int id_; // 编号
char name_[20]; // 姓名
double scores_[UMPIRE]; // 裁判分数
double totalScore_; // 总分数
};
#endif // RESULT_H
```
然后,我们在result.cpp文件中实现Result类的构造函数和成员函数:
```c++
#include "result.h"
Result::Result(int id, const char* name) : id_(id), totalScore_(0) {
strcpy(name_, name);
}
void Result::setScore(int index, double score) {
scores_[index] = score;
}
double Result::getScore() const {
double maxScore = scores_[0], minScore = scores_[0];
double sumScore = 0;
for (int i = 0; i < UMPIRE; ++i) {
if (scores_[i] > maxScore) {
maxScore = scores_[i];
}
if (scores_[i] < minScore) {
minScore = scores_[i];
}
sumScore += scores_[i];
}
totalScore_ = (sumScore - maxScore - minScore) / (UMPIRE - 2);
return totalScore_;
}
```
接下来,我们在main.cpp文件中编写测试程序:
```c++
#include <iostream>
#include <iomanip>
#include <algorithm>
#include "result.h"
using namespace std;
bool compare(const Result& r1, const Result& r2) {
return r1.getScore() > r2.getScore();
}
int main() {
int num;
cout << "请输入参赛选手人数:";
cin >> num;
Result* results = new Result[num];
// 输入选手编号和姓名
for (int i = 0; i < num; ++i) {
int id;
char name[20];
cout << "请输入第" << i + 1 << "个选手的编号和姓名:";
cin >> id >> name;
results[i] = Result(id, name);
}
cout << "比赛开始,请为选手打分:" << endl;
// 输入每个选手的裁判分数
for (int i = 0; i < num; ++i) {
cout << "请输入第" << i + 1 << "个选手的裁判分数:" << endl;
for (int j = 0; j < UMPIRE; ++j) {
double score;
cin >> score;
results[i].setScore(j, score);
}
}
// 计算每个选手的得分
for (int i = 0; i < num; ++i) {
cout << "第" << i + 1 << "个选手的得分为:";
cout << fixed << setprecision(2) << results[i].getScore() << endl;
}
// 按编号显示每个选手的得分
cout << "按编号显示每个选手的得分:" << endl;
for (int i = 0; i < num; ++i) {
cout << "第" << results[i].getId() << "个选手的得分为:";
cout << fixed << setprecision(2) << results[i].getScore() << endl;
}
// 按名次显示每个选手的得分
sort(results, results + num, compare);
cout << "按名次显示每个选手的得分:" << endl;
for (int i = 0; i < num; ++i) {
cout << "第" << i + 1 << "名选手的编号为:" << results[i].getId();
cout << ",得分为:" << fixed << setprecision(2) << results[i].getScore() << endl;
}
delete[] results;
return 0;
}
```
测试程序运行时,先输入参赛选手的人数,然后输入每个选手的编号和姓名,接着输入每个选手的裁判分数,程序会依次输出每个选手的得分,按编号显示每个选手的得分,按名次显示每个选手的得分。
阅读全文