設計性實驗
編程實現對學生成績表的相關信息排序。
實驗要求:
⑴ 建立一個由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; }