c语言结构体排序示例
2016-02-29 22:54
337 查看
设计性实验
编程实现对学生成绩表的相关信息排序。
实验要求:
⑴ 建立一个由n个学生的考试成绩表,每条信息由学号、姓名和分数组成。
⑵ 按学号排序,并输出排序结果。
⑶ 按分数排序,分数相同的则按学号有序,并输出排序结果。
⑷ 排序方法及学生成绩表的存储结构不作限制,学生选择性能较好的即可。
代码如下:
View Code
编程实现对学生成绩表的相关信息排序。
实验要求:
⑴ 建立一个由n个学生的考试成绩表,每条信息由学号、姓名和分数组成。
⑵ 按学号排序,并输出排序结果。
⑶ 按分数排序,分数相同的则按学号有序,并输出排序结果。
⑷ 排序方法及学生成绩表的存储结构不作限制,学生选择性能较好的即可。
代码如下:
#include <stdio.h> #include <stdlib.h> #define MaxSize 50 struct Stu{ char *name; int id; int grade; }; //按照学号排序 void sortById(struct Stu arr[5]){ int i; int cmp(const void *a, const void *b){ return (*(struct Stu *)a).id > (*(struct Stu *)b).id ? 1:-1; } qsort(arr,5,sizeof(arr[0]),cmp); printf("按学号排序:\n"); for(i = 0; i < 5; i++){ printf("%s %d %d\n",arr[i].name,arr[i].id,arr[i].grade); } printf("\n"); } //先按成绩后按学号 void sortByGradeAndId(struct Stu arr[5]){ int i; int Comp(const void *p1,const void *p2) { struct Stu *c=(struct Stu *)p1; struct Stu *d=(struct Stu *)p2; if(c->grade!=d->grade) return c->grade-d->grade; else return d->id - c->id; } qsort(arr,5,sizeof(arr[0]),Comp); printf("先按成绩后按学号:\n"); for(i = 0; i < 5; i++){ printf("%s %d %d\n",arr[i].name,arr[i].id,arr[i].grade); } } int main() { struct Stu arrOfStudent[5] = { {"郭佳乐", 20140356, 50}, {"张三", 20140376, 53}, {"李四", 20140279, 33}, {"网二麻子", 20140367, 53}, {"隔壁老王", 20140255, 89} }; sortById(arrOfStudent); sortByGradeAndId(arrOfStudent); return 0; }
View Code
相关文章推荐
- C++ builder XE8下安装QuickReport
- 2015年第六届蓝桥杯省赛(C/C++ B组)第七题
- C语言 Static关键字
- Singly Linked List & Destructor - C++ for C Programmers 3.4
- C语言回顾与再学习——基本概念
- 【C++】C++发展和特性
- C++学习笔记52——继承情况下类的作用域
- 算法代码实现之三向切分快速排序,C/C++实现
- POJ2362:Square
- 【C++探索之旅】第一部分第九课:数组威武,动静合一
- 【C++探索之旅】第一部分第九课:数组威武,动静合一
- Cpp_I/O流
- Cpp_异常处理
- 顺序表(C++实现)
- Cpp_多态
- Cpp_继承
- c语言编程规范和范例及写给自己的C++编程规范
- String类的实现与深浅拷贝问题
- 一起talk C栗子吧(第一百二十四回:C语言实例--内置宏)
- 2015年第六届蓝桥杯C/C++程序设计本科B组省赛 牌型种数(结果填空)