排序与查找实验: 已知,每个学生需要管理的信息包括:学号、姓名和四科考试成绩(语文、数学、外语、历史)、总分。完成以下编程: 1、为四科成绩定义一个结构体,再为学生定义一个结构体。 2、先输入一个学生数量,然后根据数量创建结构体数组,输入每个同学的学号、姓名和成绩。 3、按学生总分排序; 4、输入一个总分,在排好序的数组中查找对应总分学生;如果找到有对应总分的同学,输出其信息及其排名,如果找不到对应成绩,输出最接近且比该分数小的同学的排名;注意:为便于程序运行,最好输入和输出都先有提示信息输出。
时间: 2024-03-23 15:42:33 浏览: 59
好的,我可以帮你完成这个任务。以下是示例代码:
```c++
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
// 四科成绩结构体
struct Scores {
int Chinese;
int Math;
int English;
int History;
};
// 学生结构体
struct Student {
int ID;
string Name;
Scores Scores;
int TotalScore;
};
// 按总分排序的比较函数
bool CompareByScore(const Student& a, const Student& b) {
return a.TotalScore > b.TotalScore;
}
int main() {
int n;
cout << "请输入学生数量:";
cin >> n;
// 创建学生结构体数组
Student* students = new Student[n];
// 输入每个学生的信息
for (int i = 0; i < n; i++) {
cout << "请输入第" << i + 1 << "个学生的学号、姓名、语文、数学、外语、历史成绩:";
cin >> students[i].ID >> students[i].Name >> students[i].Scores.Chinese >> students[i].Scores.Math >> students[i].Scores.English >> students[i].Scores.History;
students[i].TotalScore = students[i].Scores.Chinese + students[i].Scores.Math + students[i].Scores.English + students[i].Scores.History;
}
// 按总分排序
sort(students, students + n, CompareByScore);
// 输入总分并查找
int scoreToFind;
cout << "请输入要查找的总分:";
cin >> scoreToFind;
int rank = -1;
for (int i = 0; i < n; i++) {
if (students[i].TotalScore == scoreToFind) {
rank = i;
break;
} else if (students[i].TotalScore < scoreToFind) {
rank = i;
break;
}
}
if (rank == -1) {
cout << "没有找到对应成绩的学生。" << endl;
} else {
cout << "排名\t学号\t姓名\t总分" << endl;
cout << rank + 1 << "\t" << students[rank].ID << "\t" << students[rank].Name << "\t" << students[rank].TotalScore << endl;
}
delete[] students;
return 0;
}
```
注意,为了简化代码,此处使用了动态内存分配。在实际开发中,最好使用 std::vector 或其他容器类型来管理动态数组。
阅读全文