根据结构体数组中某一数据项对结构体数组排序

/*
*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;
}





猜你喜欢

转载自blog.csdn.net/pl0020/article/details/81781259