根據結構體數組中某一數據項對結構體數組排序

/*
*copyright(c) 2018,HH
*All rights reserved.
*作 者:HH
*完成日期:2018年8月17日
*版本號:v1.0
*
*問題描述:輸入結構體數組,並根據結構體中的某一數據項對整個結構體數組進行排序
*輸入描述:;
*程序輸出:
*/


#include<stdio.h>
#include<string.h>

struct student
{
    int num;
    char name[20];
    int cpp;
    int math;
    int english;
    int grade;
    double average;
};
struct student per[6];
struct student test;

int main()
{
    int n,m;
    printf("請輸入需要統計信息的學生個數:\n");
    scanf("%d",&m);
    printf("請依次輸入該%d名學生的信息\n",m);
    for(n=0;n<m;n++)
    {
        printf("請輸入第%d個學生學號:\n",n+1);
        scanf("%d",&per[n].num);
        printf("請輸入第%d個學生姓名:\n",n+1);
        scanf("%s",&per[n].name);
        printf("請輸入第%d個學生C語言成績:\n",n+1);
        scanf("%d",&per[n].cpp);
        printf("請輸入第%d個學生數學成績:\n",n+1);
        scanf("%d",&per[n].math);
        printf("請輸入第%d個學生英語成績:\n",n+1);
        scanf("%d",&per[n].english);
        per[n].grade=per[n].math+per[n].cpp+per[n].english;
        printf("第%d個學生的總成績是%d:\n",n+1,per[n].grade);
        per[n].average=per[n].grade/3;
        printf("第%d個學生的平均成績是%f:\n",n+1,per[n].average);
    }
    int i,j;
    for(i=0;i<m;i++)
    {
       for(j=0;j<m-i-1;j++)//此處很重要
        {
            if(per[j].cpp<per[j+1].cpp)//根據單一數據項,對整個結構體進行排序
            {
                test=per[j+1];//結構體允許整體賦值
                per[j+1]=per[j];
                per[j]=test;
            }
        }
    }
    printf("該%d名學生按照C語言成績的排序分別是:\n",m);
    for(i=0;i<m;i++)
    {
        printf("c語言第%d名的信息如下:\n",i+1);
        printf("%d %s\n",per[i].num,per[i].name);
        printf("%d %d %d %d %f\n",per[i].cpp,per[i].math,per[i].english,per[i].grade,per[i].average);
    }
    return 0;
}





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章