A18892. 学生数据筛选
填空题
较难
知识点
题目描述
学生数据筛选
题目描述
现有多名学生信息,每位学生包含姓名、班级、考试分数三项信息。
要求先对所有学生数据进行条件筛选,再对筛选后的合格学生进行排序,最后按规定格式输出结果。
原始学生数据
共有 6 名学生的原始信息如下:
| 姓名 | 班级 | 分数 |
|---|---|---|
| Tom | 1 | 85 |
| Jack | 2 | 76 |
| Lily | 1 | 90 |
| Lucy | 2 | 85 |
| Bob | 1 | 70 |
| Ann | 2 | 90 |
解题要求
定义结构体 Stu,包含成员:姓名(字符串)、班级(整型)、分数(整型);
初始化结构体数组,存入上面 6 名学生的原始数据;
筛选规则:只保留分数大于或等于 80 分的学生,剔除不及格学生;
排序规则:对筛选后的学生进行排序
第一优先级:按分数从高到低排序;
第二优先级:若两名学生分数相同,按姓名字典序从小到大排序;
使用 C++ 标准库 sort 函数完成排序;
按指定格式输出最终结果,每行依次输出:姓名、班级、分数,中间用空格分隔。
参考答案
#include <iostream>
#include <string>
#include <algorithm> // 使用sort函数必须包含此头文件
using namespace std;
// 定义学生结构体
struct Stu
{
string name; // 姓名
int cls; // 班级
int score; // 分数
};
// 自定义排序比较函数
bool cmp(Stu a, Stu b)
{
// 分数不同:分数高的在前
if (a.score != b.score)
{
return a.score > b.score;
}
// 分数相同:姓名按字典序升序
else
{
return a.name < b.name;
}
}
int main()
{
// 原始结构体数组:存储全部6名学生
Stu oldArr[6] = {
{"Tom", 1, 85},
{"Jack", 2, 76},
{"Lily", 1, 90},
{"Lucy", 2, 85},
{"Bob", 1, 70},
{"Ann", 2, 90}
};
Stu newArr[6]; // 存放筛选后的合格学生
int count = 0; // 记录合格学生人数
// 第一步:数据筛选
for (int i = 0; i < 6; i++)
{
// 筛选条件:分数 ≥ 80
if (oldArr[i].score >= 80)
{
newArr[count] = oldArr[i];
count++;
}
}
// 第二步:对筛选后的数组排序
sort(newArr, newArr + count, cmp);
// 第三步:遍历输出结果
for (int i = 0; i < count; i++)
{
cout << newArr[i].name << " "
<< newArr[i].cls << " "
<< newArr[i].score << endl;
}
return 0;
}
上一题
下一题