您的位置:首页 > 编程语言 > C语言/C++

c语言结构体排序示例

2016-02-29 22:54 337 查看
设计性实验
编程实现对学生成绩表的相关信息排序。
实验要求:
⑴ 建立一个由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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: