PAT 乙级题目讲解:1004《成绩排名》 ✅ PAT 乙级题目讲解1004《成绩排名》摘要本文讲解 PAT 乙级 1004 题《成绩排名》通过结构体封装学生信息结合自定义排序函数sort实现成绩最高与最低学生的快速查找。内容涵盖题目分析、样例解读、分步解题思路、完整 C 代码以及常见错误提醒和思维拓展。 题目简介本题要求读入若干名学生的信息姓名、学号、成绩输出其中成绩最高和成绩最低的学生的姓名和学号。核心任务是使用结构体封装每个学生的数据并通过自定义排序函数来查找分数最高和最低的学生。 样例分析输入3 Joe Math990112 89 Mike CS991301 100 Mary EE990830 95分析过程三位学生成绩依次为 89、100、95成绩最高的是 Mike最低的是 Joe因此输出为Mike CS991301 Joe Math990112 解题思路 变量说明变量名含义n学生人数stu学生结构体数组nm学生姓名id学号s成绩cmp自定义排序函数按成绩升序排序本题的解决流程可以分为以下几个步骤✅ Step 1定义结构体封装每个学生的信息使用结构体Stu表示structStu{string nm,id;ints;}stu[100005];✅ Step 2定义自定义排序规则按成绩从小到大排序分数小的排前面boolcmp(Stu x,Stu y){returnx.sy.s;}✅ Step 3输入数据使用cin读入每个学生的姓名、学号和成绩for(inti1;in;i){cinstu[i].nmstu[i].idstu[i].s;}✅ Step 4排序并输出结果使用sort对学生数组按成绩升序排序然后输出最高最后一位和最低第一位sort(stu1,stu1n,cmp);coutstu[n].nm stu[n].id ;coutstu[1].nm stu[1].id;完整代码#includebits/stdc.husingnamespacestd;intn;structStu{string nm,id;ints;}stu[100005];boolcmp(Stu x,Stu y){returnx.sy.s;}intmain(){scanf(%d,n);for(inti1;in;i){cinstu[i].nmstu[i].idstu[i].s;}sort(stu1,stu1n,cmp);coutstu[n].nm stu[n].id\n;coutstu[1].nm stu[1].id;return0;} 常见错误提醒错误类型具体表现数组越界忘记结构体数组从 1 开始存储排序区间错误sort的区间传参不正确如写成stu, stun而非stu1, stu1n输入输出格式错误忘记换行或多输出空格compare函数错误没写return x.s y.s或逻辑反了✅ 总结归纳熟练掌握结构体的定义与数组存储掌握sort函数的基本用法特别是传参细节和自定义排序函数的写法学会抽象封装数据对象如学生这是更复杂数据建模的基础 思维拓展如果要查找成绩前 k 高或前 k 低的学生可以结合priority_queue或partial_sort实现。当排序规则复杂如多重条件可扩展为多关键字排序。