山甘 2023-03-27 18:04 采纳率: 77.8%
浏览 60
已结题

c++ 声明学生类,按总分排序,查询最高分的姓名和成绩

仅声明student类(包含学生学号,姓名,3门成绩信息),对若干名学生进行信息输入、输出、按总分排序、查询每门课程最高分的学生姓名和成绩的操作。
要求:建立student类的对象数组。
要求:排序和查询操作为应用函数,是非成员函数!

以下是我写了“输入,输出”的代码,接着的“按总分排序,查询每门课程最高分的学生姓名和成绩”的代码就没思路了。

//student.h#pragma once
#include<iostream>
#include<string>
using namespace std;
class student
{
private:
    int number;
    string name;
    int mark1, mark2,mark3;
public:
    student();
    void get();
    void show();
    friend void paixu(student&);
};
student::student()
{
    number = 0;
    name = "无";
    mark1 = 0;
    mark2 = 0;
    mark3 = 0;
}
void student::get()
{
    cin >> number >> name >> mark1 >> mark2 >> mark3;
}
void student::show()
{
    cout << number << " " << name << " " << mark1 << " " << mark2 << " " << mark3 << endl;
}
void paixu(student& s)
{
    //这个部分是打算写“按总分排序”的,但是我不知道该怎么写
}
//main.cpp
#include"student.h"
int main()
{
    student s;
    s.get();
    s.show();
        //这部分也不知道该怎么按照题目要求输入“若干名”学生。
}

我想知道该怎么“按总分排序,查询每门课程最高分的学生姓名和成绩”以及“输入若干名学生的信息”,非常感谢!谢谢!

  • 写回答

2条回答 默认 最新

  • 社区专家-Monster-XH 2023-03-27 18:15
    关注

    基于Monster 组和GPT的调写:

    
    //student.h
    #pragma once
    #include<iostream>
    #include<string>
    using namespace std;
    
    class student
    {
    private:
        int number;
        string name;
        int mark1, mark2, mark3;
    public:
        student();
        void get();
        void show();
        int total() const;  // 计算总分
        friend bool compare(const student& s1, const student& s2); // 总分比较
        friend void paixu(student* students, int n);  // 按总分排序
        friend void query_max(const student* students, int n);  // 查询每门课程最高分的学生姓名和成绩
    };
    
    student::student()
    {
        number = 0;
        name = "无";
        mark1 = 0;
        mark2 = 0;
        mark3 = 0;
    }
    
    void student::get()
    {
        cin >> number >> name >> mark1 >> mark2 >> mark3;
    }
    
    void student::show()
    {
        cout << number << " " << name << " " << mark1 << " " << mark2 << " " << mark3 << endl;
    }
    
    int student::total() const
    {
        return mark1 + mark2 + mark3;
    }
    
    bool compare(const student& s1, const student& s2)
    {
        return s1.total() > s2.total();
    }
    
    void paixu(student* students, int n)
    {
        sort(students, students + n, compare);
    }
    
    void query_max(const student* students, int n)
    {
        int max_mark1 = -1, max_mark2 = -1, max_mark3 = -1;  // 分别记录每门课程的最高分
        string max_name1, max_name2, max_name3;  // 分别记录每门课程最高分的学生姓名
        for (int i = 0; i < n; i++) {
            if (students[i].mark1 > max_mark1) {
                max_mark1 = students[i].mark1;
                max_name1 = students[i].name;
            }
            if (students[i].mark2 > max_mark2) {
                max_mark2 = students[i].mark2;
                max_name2 = students[i].name;
            }
            if (students[i].mark3 > max_mark3) {
                max_mark3 = students[i].mark3;
                max_name3 = students[i].name;
            }
        }
        cout << "语文最高分的学生是:" << max_name1 << ",成绩是:" << max_mark1 << endl;
        cout << "数学最高分的学生是:" << max_name2 << ",成绩是:" << max_mark2 << endl;
        cout << "英语最高分的学生是:" << max_name3 << ",成绩是:" << max_mark3 << endl;
    }
    int main()
    {
        const int n = 3;  // 学生数量,这里假设为3
        student students[n];  // 学生对象数组
    
        // 输入学生信息
        for (int i = 0; i < n; i++) {
            cout << "请输入第" << i+1 << "名学生的信息:";
            students[i].get();
        }
    
        // 输出学生信息
        cout << "学生信息如下:" << endl;
        for (int i = 0; i < n; i++) {
            students[i].show();
        }
    
        // 按总分排序
        paixu(students, n);
    
        // 输出按总分排序后的学生信息
        cout << "按总分排序后的学生信息如下:" << endl;
        for (int i = 0; i < n; i++) {
            students[i].show();
        }
    
        // 查询每门课程最高分的学生姓名和成绩
        query_max(students, n);
    
        return 0;
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 4月4日
  • 已采纳回答 3月27日
  • 创建了问题 3月27日

悬赏问题

  • ¥20 求个正点原子stm32f407开发版的贪吃蛇游戏
  • ¥15 正弦信号发生器串并联电路电阻无法保持同步怎么办
  • ¥15 划分vlan后,链路不通了?
  • ¥20 求各位懂行的人,注册表能不能看到usb使用得具体信息,干了什么,传输了什么数据
  • ¥15 个人网站被恶意大量访问,怎么办
  • ¥15 Vue3 大型图片数据拖动排序
  • ¥15 Centos / PETGEM
  • ¥15 划分vlan后不通了
  • ¥20 用雷电模拟器安装百达屋apk一直闪退
  • ¥15 算能科技20240506咨询(拒绝大模型回答)