c語言結構體排序示例


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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM