测评会员优惠活动进行中 · 开通 VIP,有效期内测评不限次 VIP 优惠中 · 测评不限次 立即查看

A18892. 学生数据筛选

填空题 较难

题目描述

学生数据筛选

题目描述

现有多名学生信息,每位学生包含姓名、班级、考试分数三项信息。

要求先对所有学生数据进行条件筛选,再对筛选后的合格学生进行排序,最后按规定格式输出结果。

原始学生数据

共有 6 名学生的原始信息如下:

姓名班级分数
Tom185
Jack276
Lily190
Lucy285
Bob170
Ann290

解题要求

定义结构体 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; }
上一题 下一题