编写一个C++程序:某小学最近得到了一笔赞助,打算拿出其中一部分为学习成绩优秀的前5名学生发奖学金。期末,每个学生都有3门课的成绩:语文、数学、英语。先按总分从高到低排序,如果两个同学总分相同,再按语文成绩从高到低排序,如果两个同学总分和语文成绩都相同,那么规定学号小的同学 排在前面,这样,每个学生的排序是唯一确定的。 任务:先根据输入的3门课的成绩计算总分,然后按上述规则排序,最后按排名顺序输出前五名名学生的学号和总分。注意,在前5名同学中,每个人的奖学金都不相同,因此,你必须严格按上述规则排序。(不可用函数)
时间: 2024-01-05 18:02:12 浏览: 168
题目描述:编写一个C++程序,实现对学生成绩的排序和输出前五名学生的学号和总分。
解题思路:
1. 定义一个结构体Student,包含学号、语文成绩、数学成绩、英语成绩和总分五个成员变量。
2. 声明一个长度为5的数组,用于存储前五名学生的信息。
3. 使用循环语句,依次输入每个学生的成绩,并计算总分。
4. 使用冒泡排序法对学生进行排序,按照总分从高到低、语文成绩从高到低、学号从小到大的顺序排序。
5. 输出前五名学生的学号和总分。
代码示例:
#include <iostream>
using namespace std;
struct Student {
int id;
int chinese;
int math;
int english;
int total;
};
int main() {
Student students[5];
for (int i = 0; i < 5; i++) {
cin >> students[i].id >> students[i].chinese >> students[i].math >> students[i].english;
students[i].total = students[i].chinese + students[i].math + students[i].english;
}
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4 - i; j++) {
if (students[j].total < students[j + 1].total ||
(students[j].total == students[j + 1].total && students[j].chinese < students[j + 1].chinese) ||
(students[j].total == students[j + 1].total && students[j].chinese == students[j + 1].chinese && students[j].id > students[j + 1].id)) {
swap(students[j], students[j + 1]);
}
}
}
for (int i = 0; i < 5; i++) {
cout << students[i].id << " " << students[i].total << endl;
}
return 0;
}
阅读全文