【ZZULI】郑州轻工业大学oj 1194: 总成绩排序(结构体专题)

展示了如何在C语言中通过结构体和循环实现学生成绩表的排序,涉及输入验证、数据处理和输出展示。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题描述:

有一学生成绩表,包括学号、姓名、3门课程成绩。请按如下规则排序:按总成绩降序排序,若总成绩相同,则按姓名升序排序。


输入:

首先输入一个整数n(1<=n<=100),表示学生人数;
然后输入n行,每行包含一个学生的信息:学号(12位)、姓名(不含空格且不超过20位),以及3个整数,表示3门课成绩,数据之间用空格隔开。


输出:

输出排序后的成绩单,格式见输出样例。


样例输入:

3
541207010188 Zhangling 89 78 95
541207010189 Wangli 85 87 99
541207010190 Fangfang 89 88 85

样例输出:

541207010189 Wangli 85 87 99 271
541207010190 Fangfang 89 88 85 262
541207010188 Zhangling 89 78 95 262

参考代码:

#include<stdio.h>
#include<string.h>
typedef struct student{
    char ID[13];
    char name[20];
    int x,y,z,sum;
}S;
int main()
{
    int i,j,n;
  
### 如何使用结构体总成绩进行排序 在C/C++中,可以定义一个包含学生信息(如姓名、各科成绩以及总分)的结构体,并通过编写函数来实现基于总成绩对学生记录进行排序的功能。 #### 定义结构体 为了表示单个学生的数据,创建如下所示的一个`struct Student`: ```c++ #include <iostream> #include <string> using namespace std; // 定义学生信息结构体 struct Student { string name; int chinese_score; int math_score; int english_score; double total_score; // 总分数 void calculateTotalScore() { this->total_score = (double)(chinese_score + math_score + english_score); } }; ``` 此部分描述了如何构建用于保存学生成绩的数据容器[^1]。 #### 排序算法的选择与应用 对于简单的应用场景来说,可以选择经典的冒泡排序方法来进行升序排列;当然也可以采用更高效的快速排序或其他高级排序技术。这里给出利用标准库中的`sort()`函数配合自定义比较器的方式完成降序排序的例子[^2]。 ```cpp bool compareByTotal(const Student &a, const Student &b){ return a.total_score > b.total_score ; // 按照总分从高到低排序 } int main(){ vector<Student> students(3); // 初始化三个同学的成绩并计算其各自的总分 for(int i=0;i<students.size();i++){ cout << "请输入第" << i+1 << "位同学的信息:" << endl; cin >> students[i].name >> students[i].chinese_score >> students[i].math_score >> students[i].english_score ; students[i].calculateTotalScore(); } sort(students.begin(), students.end(), compareByTotal); // 输出排序后的结果 for(auto& s : students){ printf("%s 的总分为 %.2f\n", s.name.c_str(), s.total_score ); } return 0; } ``` 上述代码片段展示了怎样读取用户输入的学生资料,随后调用成员函数`calculateTotalScore()`更新每位学员的总计得分属性值,最后按照这些数值大小实施递减顺序整理列表项。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值