解题思路:
注意事项:
参考代码:
#include <iostream>
#include<algorithm>
using namespace std;
// 定义学生结构体,包含姓名(字符数组形式,最多容纳20个字符)和成绩(整数类型)两个成员
typedef struct student
{
char name[20];
int cj;
} stu;
// 比较函数,用于定义排序规则
// 该函数接受两个学生结构体类型的参数x1和x2
bool compare(stu x1, stu x2)
{
// 首先判断成绩是否相等
if (x1.cj == x2.cj)
{
// 如果成绩相等,按姓名字典序比较
// 逐个字符比较姓名的ASCII码大小来确定先后顺序
for (int i = 0; i < 20; i++)
{
// 如果x1的当前字符大于x2的当前字符,说明x2的姓名字典序在前,返回false
if (x1.name[i] > x2.name[i])
return false;
// 如果x1的当前字符小于x2的当前字符,说明x1的姓名字典序在前,返回true
else if (x1.name[i] < x2.name[i])
return true;
}
}
// 如果成绩不相等,按成绩从高到低排序,成绩高的排在前面,所以返回x1的成绩大于x2的成绩的比较结果
return x1.cj > x2.cj;
}
int main()
{
// n用于存储学生的数量
int n, i;
// 从标准输入读取学生的数量
cin >> n;
// 定义一个可以容纳21个学生结构体的数组,用于存储学生信息(实际最多使用n个元素)
stu s[21];
// 循环读取每个学生的姓名和成绩
for (i = 0; i < n; i++)
{
cin >> s[i].name >> s[i].cj;
}
// 使用自定义的比较函数compare对学生数组s进行排序,范围是从s[0]到s[n - 1]
sort(s, s + n, compare);
// 循环输出排序后的每个学生的姓名和成绩
for (i = 0; i < n; i++)
{
cout << s[i].name << " " << s[i].cj << endl;
}
return 0;
}
0.0分
0 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复