PTA 7-6 学生平均成绩排序

假设学生的基本信息包括学号、姓名、三门课程成绩以及个人平均成绩,定义一个能够表示学生信息的结构类型。输入n(n<50)个学生的成绩信息,按照学生的个人平均分从高到低输出他们的信息。

注意: 1)平均分出现相同的分数时按学号从小到大进行排序输出。 2)平均分以四舍五入取整数保存。

输入格式: 输入一个正整数n(n<50),下面n行输入n个学生的信息,包括:学号、姓名、三门课程成绩(整数)。

输出格式: 输出从高到低排序后的学生信息,包括:学号、姓名、三门课程成绩、平均分(整数) 输入样例:

4 101 Zhang 78 87 85 102 Wang 91 88 90 104 chen 86 90 75 103 Li 75 90 86

输出样例:

102 Wang 91 88 90 90 103 Li 75 90 86 84 104 chen 86 90 75 84 101 Zhang 78 87 85 83
#include<stdio.h>
struct student{
          
   
    int num ,a,b,c;//a,b,c为三门学生成绩,num为学号
    char name[10];
    double average;
}stu[10],temp;//运用结构体
int main(){
          
   
    int n,i,j;
    scanf("%d",&n);
    for(i = 0;i < n;i++){
          
   
        scanf("%d %s %d %d %d",&stu[i].num,stu[i].name,&stu[i].a,&stu[i].b,&stu[i].c);
        stu[i].average = (stu[i].a+stu[i].b+stu[i].c)/3.0;
}
    for(i = 0;i < n;i++){
          
   
        for(j=0;j<n-i;j++){
          
   
            if(stu[j].average<stu[j+1].average){
          
   
                temp = stu[j];
                stu[j] = stu[j+1];
                stu[j+1] = temp;
            }else if(stu[j].average==stu[j+1].average){
          
   
                if (stu[j+1].num<stu[j].num){
          
   
                    temp = stu[j+1];
                    stu[j+1] = stu[j];
                    stu[j] = temp;
                }
            }
        }
    }
    for(i=0;i<n;i++){
          
   
        printf("%d %s %d %d %d %.0f
",stu[i].num,stu[i].name,stu[i].a,stu[i].b,stu[i].c,stu[i].average);
    }
    return 0;
}
经验分享 程序员 微信小程序 职场和发展