C++ 动态数组排序学生信息:按总分降序排列

本程序使用 C++ 动态数组存储学生信息,并根据三门课程的总分对学生进行降序排序,最终输出排序后的学生信息。

输入形式: 学生人数 n 及每位学生信息已存放在文件 'stu.txt' 中,通过读取文件得到数据。

输出形式: 按照三门课程总分降序排序后的学生信息内容:,每行输出一位学生的信息,包括姓名和三门课程成绩,用空格隔开。

样例输入:

5
张三 80 90 70
李四 90 80 70
王五 70 80 90
赵六 60 70 80
田七 80 70 60

样例输出:

李四 90 80 70
张三 80 90 70
王五 70 80 90
田七 80 70 60
赵六 60 70 80

样例说明: 样例中有 5 个学生,每个学生的信息包括姓名和三门课程成绩,存放在文件 'stu.txt' 中。程序将读取文件中的数据,并按照三门课程总分降序排序后输出学生信息。

代码实现:

#include <iostream>
#include <fstream>
#include <string>
#include <vector>
#include <algorithm>

using namespace std;

struct Student {
    string name;
    int score1;
    int score2;
    int score3;
};

bool compareStudent(const Student& s1, const Student& s2) {
    return s1.score1 + s1.score2 + s1.score3 > s2.score1 + s2.score2 + s2.score3;
}

int main() {
    ifstream fin('stu.txt');
    int n;
    fin >> n;
    vector<Student> students(n);
    for (int i = 0; i < n; i++) {
        fin >> students[i].name >> students[i].score1 >> students[i].score2 >> students[i].score3;
    }
    fin.close();

    sort(students.begin(), students.end(), compareStudent);

    for (int i = 0; i < n; i++) {
        cout << students[i].name << ' ' << students[i].score1 << ' ' << students[i].score2 << ' ' << students[i].score3 << endl;
    }

    return 0;
}

代码说明:

  1. 使用 ifstream 类读取文件 'stu.txt' 中的数据,包括学生人数 n 和每个学生的姓名和成绩。
  2. 使用 vector 类存储学生信息,并使用 struct Student 结构体定义每个学生的信息,包括姓名和三门课程成绩。
  3. 定义比较函数 compareStudent,用于按照总分进行降序比较。
  4. 使用 sort 函数对学生信息进行排序,并传入比较函数 compareStudent
  5. 使用循环遍历排序后的学生信息,并输出每个学生的姓名和成绩。

注意:

  • 该程序假设 'stu.txt' 文件存在于程序所在目录下,并且文件内容格式正确。
  • 该程序使用 C++11 标准,需要使用支持 C++11 的编译器进行编译。

本程序示例了使用动态数组和排序算法对学生信息进行排序,可以帮助理解数据结构和算法的概念。


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

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