用顺序表写根据学生姓名进行字典排序,根据成绩进行由高到低排序,根据学号或姓名查找学生成绩,统计各分数段(≥90分、80-89分、70-79分、60-69分、60分以下)的学生人数及其所占比例,并打印统计的结果。并手动输入学生信息
时间: 2024-04-01 21:38:39 浏览: 84
好的,我来为您解答。首先,我们需要定义一个学生结构体,包含学生姓名、学号、成绩等信息。代码如下:
```c++
#include <iostream>
#include <string>
using namespace std;
const int MAXSIZE = 100; // 顺序表最大容量
struct Student {
string name; // 学生姓名
string id; // 学生学号
int score; // 学生成绩
};
struct SeqList {
Student data[MAXSIZE]; // 存放学生信息的数组
int length; // 当前顺序表长度
};
```
接下来,我们需要实现字典排序和成绩排序的函数。字典排序可以使用字符串的比较函数,成绩排序可以使用冒泡排序。代码如下:
```c++
// 字典排序
void sortByDict(SeqList &L) {
for (int i = 0; i < L.length - 1; i++) {
for (int j = i + 1; j < L.length; j++) {
if (L.data[i].name > L.data[j].name) {
swap(L.data[i], L.data[j]);
}
}
}
}
// 成绩排序
void sortByScore(SeqList &L) {
for (int i = 0; i < L.length - 1; i++) {
for (int j = 0; j < L.length - i - 1; j++) {
if (L.data[j].score < L.data[j + 1].score) {
swap(L.data[j], L.data[j + 1]);
}
}
}
}
```
接下来,我们需要实现根据学号或姓名查找学生成绩的函数。可以使用顺序查找,代码如下:
```c++
// 根据学号或姓名查找学生成绩
void search(SeqList L, string key) {
for (int i = 0; i < L.length; i++) {
if (L.data[i].name == key || L.data[i].id == key) {
cout << "姓名:" << L.data[i].name << " 学号:" << L.data[i].id << " 成绩:" << L.data[i].score << endl;
return;
}
}
cout << "未找到该学生信息!" << endl;
}
```
最后,我们需要统计各分数段的学生人数及其所占比例,并打印统计的结果。代码如下:
```c++
// 统计各分数段的学生人数及其所占比例
void statistics(SeqList L) {
int count[5] = {0}; // 各分数段的学生人数
double percent[5] = {0}; // 各分数段的学生所占比例
for (int i = 0; i < L.length; i++) {
if (L.data[i].score >= 90) {
count[0]++;
} else if (L.data[i].score >= 80) {
count[1]++;
} else if (L.data[i].score >= 70) {
count[2]++;
} else if (L.data[i].score >= 60) {
count[3]++;
} else {
count[4]++;
}
}
for (int i = 0; i < 5; i++) {
percent[i] = (double)count[i] / L.length * 100;
}
cout << "90分及以上:" << count[0] << " 人,占比 " << percent[0] << "%" << endl;
cout << "80-89分:" << count[1] << " 人,占比 " << percent[1] << "%" << endl;
cout << "70-79分:" << count[2] << " 人,占比 " << percent[2] << "%" << endl;
cout << "60-69分:" << count[3] << " 人,占比 " << percent[3] << "%" << endl;
cout << "60分以下:" << count[4] << " 人,占比 " << percent[4] << "%" << endl;
}
```
最后,我们可以编写一个主函数,手动输入学生信息,调用以上函数进行操作。代码如下:
```c++
int main() {
SeqList L;
cout << "请输入学生信息,依次输入姓名、学号、成绩,输入0结束输入:" << endl;
int i = 0;
while (true) {
string name, id;
int score;
cin >> name;
if (name == "0") {
break;
}
cin >> id >> score;
L.data[i].name = name;
L.data[i].id = id;
L.data[i].score = score;
i++;
L.length++;
}
cout << "按照姓名进行字典排序:" << endl;
sortByDict(L);
for (int i = 0; i < L.length; i++) {
cout << "姓名:" << L.data[i].name << " 学号:" << L.data[i].id << " 成绩:" << L.data[i].score << endl;
}
cout << "按照成绩进行由高到低排序:" << endl;
sortByScore(L);
for (int i = 0; i < L.length; i++) {
cout << "姓名:" << L.data[i].name << " 学号:" << L.data[i].id << " 成绩:" << L.data[i].score << endl;
}
cout << "请输入要查找的学生姓名或学号:" << endl;
string key;
cin >> key;
search(L, key);
statistics(L);
return 0;
}
```
阅读全文