result.h

#ifndef RESULT_H
#define RESULT_H

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

class Result {
private:
    int id; // 选手编号
    char name[20]; // 选手姓名
    double score[UMPIRE]; // 裁判打分
    double final_score; // 选手最终得分
public:
    Result(int i, char n[20]); // 构造函数
    void input_score(); // 输入裁判打分
    void calc_score(); // 计算选手得分
    void display(); // 显示选手得分
    int get_id(); // 获取选手编号
};

#endif

result.cpp

#include <iostream>
#include "result.h"
using namespace std;

Result::Result(int i, char n[20]) {
    id = i;
    strcpy(name, n);
}

void Result::input_score() {
    cout << '请输入裁判的打分:' << endl;
    for (int i = 0; i < UMPIRE; i++) {
        cin >> score[i];
    }
}

void Result::calc_score() {
    double max_score = score[0];
    double min_score = score[0];
    double total_score = score[0];
    for (int i = 1; i < UMPIRE; i++) {
        if (score[i] > max_score) max_score = score[i];
        if (score[i] < min_score) min_score = score[i];
        total_score += score[i];
    }
    final_score = (total_score - max_score - min_score) / (UMPIRE - 2);
}

void Result::display() {
    cout << '选手' << id << ' ' << name << ' 的得分为:' << final_score << endl;
}

int Result::get_id() {
    return id;
}

exp_105.cpp

#include <iostream>
#include <cstring>
#include <algorithm>
#include "result.h"
using namespace std;

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

    Result **players = new Result*[num]; // 动态数组,存储所有选手

    // 输入所有选手信息
    for (int i = 0; i < num; i++) {
        int id;
        char name[20];
        cout << '请输入选手' << i+1 << '的编号和姓名:';
        cin >> id >> name;
        players[i] = new Result(id, name);
    }

    // 为所有选手打分
    cout << '比赛开始,请为选手打分:' << endl;
    for (int i = 0; i < num; i++) {
        cout << '选手' << players[i]->get_id() << ' ' << players[i]->name << endl;
        players[i]->input_score();
        players[i]->calc_score();
    }

    // 按得分从高到低排序
    sort(players, players+num, [](Result* a, Result* b){ return a->final_score > b->final_score; });

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

    // 释放内存
    for (int i = 0; i < num; i++) {
        delete players[i];
    }
    delete[] players;

    cout << '胡灿' << endl; // 输出水印

    return 0;
}
C++ 模拟裁判打分系统:去掉最高最低分求平均分

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

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