C++实现学生成绩排名:分数排序与排名输出
C++实现学生成绩排名:分数排序与排名输出
本代码使用C++语言实现了学生成绩排名功能,按照分数从高到低排序,分数相同则编号小的更靠前,并输出每个学生的排名。代码简洁易懂,并附有详细注释。
#include <iostream>
#include <vector>
#include <algorithm>
struct Student {
int id;
int score;
};
bool compare(const Student& s1, const Student& s2) {
if (s1.score == s2.score) {
return s1.id < s2.id;
}
return s1.score > s2.score;
}
int main() {
int n;
std::cin >> n;
std::vector<Student> students(n);
for (int i = 0; i < n; ++i) {
std::cin >> students[i].score;
students[i].id = i + 1;
}
std::sort(students.begin(), students.end(), compare);
std::vector<int> ranks(n);
for (int i = 0; i < n; ++i) {
ranks[students[i].id - 1] = i + 1;
}
for (const auto& rank : ranks) {
std::cout << rank << std::endl;
}
return 0;
}
代码说明:
- 结构体 Student: 定义了一个名为 Student 的结构体,包含两个成员变量:
id表示学生编号,score表示学生分数。 - 比较函数 compare: 定义了一个名为 compare 的比较函数,用于比较两个学生对象的成绩和编号,用于排序。分数高的排前面,分数相同的编号小的排前面。
- 输入学生信息: 程序首先从标准输入获取学生人数 n,然后使用循环输入每个学生的成绩,并根据循环次数自动生成学生编号。
- 排序: 使用
std::sort函数对学生列表进行排序,使用 compare 函数作为比较函数。 - 计算排名: 遍历排序后的学生列表,根据学生编号计算每个学生的排名,并存储到 ranks 向量中。
- 输出排名: 遍历 ranks 向量,输出每个学生的排名。
使用方法:
在控制台中输入同学人数和每个同学的分数,程序会输出每个同学的排名。
例如,输入以下数据:
3
80
90
80
程序会输出以下结果:
2
1
2
总结:
这段代码简洁易懂,展示了如何使用 C++ 实现学生成绩排名功能。通过使用排序算法和结构体,代码实现了对学生信息进行有效的管理和排名输出。你可以根据需要对代码进行扩展和修改,例如添加学生姓名等信息。
原文地址: https://www.cveoy.top/t/topic/o6oy 著作权归作者所有。请勿转载和采集!