仅声明student类(包含学生学号,姓名,3门成绩信息),对若干名学生进行信息输入、输出、按总分排序、查询每门课程最高分的学生姓名和成绩的操作。
要求:建立student类的对象数组。
要求:排序和查询操作为应用函数,是非成员函数!
以下是我写了“输入,输出”的代码,接着的“按总分排序,查询每门课程最高分的学生姓名和成绩”的代码就没思路了。
//student.h#pragma once
#include
#include
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();
//这部分也不知道该怎么按照题目要求输入“若干名”学生。
}
我想知道该怎么“按总分排序,查询每门课程最高分的学生姓名和成绩”以及“输入若干名学生的信息”,非常感谢!谢谢!
基于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;
}