解题思路:
注意事项:
参考代码:
#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 人评分
点我有惊喜!你懂得!浏览:1415 |
C语言程序设计教程(第三版)课后习题5.7 (C语言代码)浏览:600 |
数组输出 (C语言代码)--此题的题目描述有问题浏览:1843 |
A+B for Input-Output Practice (V) (C语言代码)浏览:640 |
C语言程序设计教程(第三版)课后习题3.7 (C语言代码)浏览:863 |
Hello, world! (C++代码)浏览:1778 |
1013题解浏览:596 |
出圈】指针malloc版浏览:377 |
蚂蚁感冒 (C语言代码)浏览:816 |
C二级辅导-等差数列 (C语言代码)浏览:806 |