模拟裁判给比赛选手打分

本程序模拟裁判给比赛选手打分,去除最高最低分,取其平均分为选手最终得分。程序使用面向对象编程实现,定义了Result类,包含选手编号、姓名、裁判打分以及最终得分等信息。

代码实现

result.h

#ifndef RESULT_H
#define RESULT_H

#include <iostream>
#include <cstring>
using namespace std;

const int UMPIRE = 5;  // 裁判人数

class Result {
private:
    int number;  // 选手编号
    char name[20];  // 选手姓名
    float score[UMPIRE];  // 裁判打分
    float finalScore;  // 最终得分
public:
    Result(int n, char *na);  // 构造函数
    void inputScore();  // 输入裁判打分
    void getFinalScore();  // 计算最终得分
    void display();  // 显示选手得分
};

#endif

exp_105.cpp

#include "result.h"

int main() {
    int n;  // 参赛选手人数
    cout << "请输入参赛选手人数:";
    cin >> n;

    Result *players[n];  // 动态创建选手对象数组

    // 输入选手编号和姓名
    int num;
    char name[20];
    for (int i = 0; i < n; i++) {
        cout << "请输入第" << i+1 << "位选手的编号和姓名:";
        cin >> num >> name;
        players[i] = new Result(num, name);
    }

    // 裁判打分
    cout << "比赛开始,请为选手打分:" << endl;
    for (int i = 0; i < n; i++) {
        cout << "请输入第" << i+1 << "位选手的裁判打分:" << endl;
        players[i]->inputScore();
        players[i]->getFinalScore();
    }

    // 按得分排序
    for (int i = 0; i < n-1; i++) {
        for (int j = i+1; j < n; j++) {
            if (players[i]->finalScore < players[j]->finalScore) {
                Result *temp = players[i];
                players[i] = players[j];
                players[j] = temp;
            }
        }
    }

    // 显示选手得分
    cout << "比赛结束,按编号显示选手得分:" << endl;
    for (int i = 0; i < n; i++) {
        players[i]->display();
    }

    // 释放动态分配的空间
    for (int i = 0; i < n; i++) {
        delete players[i];
    }
    return 0;
}

Result 类成员函数实现

#include "result.h"

Result::Result(int n, char *na) {
    number = n;
    strcpy(name, na);
    for (int i = 0; i < UMPIRE; i++) {
        score[i] = 0;
    }
    finalScore = 0;
}

void Result::inputScore() {
    for (int i = 0; i < UMPIRE; i++) {
        cin >> score[i];
    }
}

void Result::getFinalScore() {
    float maxScore = score[0];
    float minScore = score[0];
    float sum = score[0];
    for (int i = 1; i < UMPIRE; i++) {
        if (score[i] > maxScore) {
            maxScore = score[i];
        }
        if (score[i] < minScore) {
            minScore = score[i];
        }
        sum += score[i];
    }
    finalScore = (sum - maxScore - minScore) / 3;
}

void Result::display() {
    cout << number << " " << name << " " << finalScore << endl;
}

程序运行流程

  1. 输入参赛选手人数。
  2. 输入每个选手的编号和姓名。
  3. 输入每个选手的裁判打分。
  4. 计算每个选手的最终得分,并按得分排序。
  5. 显示每个选手的编号、姓名和最终得分。

代码说明

  1. UMPIRE 常量代表裁判人数,可以根据实际情况进行调整。
  2. Result 类包含选手编号、姓名、裁判打分和最终得分等信息。
  3. getFinalScore() 函数用于计算每个选手的最终得分,先找出最高分和最低分,然后将所有得分相加减去最高分和最低分,再除以裁判人数减 2(去掉最高分和最低分)得到最终得分。
  4. display() 函数用于显示每个选手的编号、姓名和最终得分。
  5. 程序中使用动态数组来存储选手对象,方便根据选手人数动态分配内存。

扩展功能

可以根据需求对程序进行扩展,例如:

  1. 添加比赛项目信息,方便记录不同项目选手的得分。
  2. 添加选手信息保存功能,方便查看历史比赛记录。
  3. 增加图形界面,提高程序的易用性。
模拟裁判打分系统:去除最高最低分,计算平均得分

原文地址: https://www.cveoy.top/t/topic/nfGu 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录