c语言成绩排序pta

img

img


我的代码只能实验一组的排序
像该题中有两组输入就没法处理
不知道怎么解决 求解答 谢谢

你可以试试while 直到n为空时

供参考:

#include <stdio.h>
#include <string.h>
typedef struct student {
    char  name[11];
    int   score1, score2, score3;
    float avg;
}Stu;
void input(Stu*, int);
void sort(Stu*, int);
void print(Stu*, int);
int main()
{
    Stu stu[100];
    int n;
    while (scanf("%d", &n) == 1 && n != 0) {   // 输入 0 ,结束
        input(stu, n);
        sort(stu, n);
        print(stu, n);
    }
    return 0;
}

void input(Stu* a, int n)
{
    int  i;
    for (i = 0; i < n; i++)
    {
        scanf("%s%d%d%d", a[i].name, &a[i].score1, &a[i].score2, &a[i].score3);
        a[i].avg = (a[i].score1 + a[i].score2 + a[i].score3) / 3.0;
    }
}

void sort(Stu* a, int n)
{
    int i, j;
    Stu tmp;
    for (i = n - 1; i > 0; i--) {
        for (j = 0; j < i; j++) {
            if (a[j].avg < a[j + 1].avg ||
                a[j].avg == a[j + 1].avg && strcmp(a[j].name, a[j + 1].name)>0)
                tmp = a[j], a[j] = a[j + 1], a[j + 1] = tmp;
        }
    }
}

void print(Stu* a, int n)
{
    int i;
    for (i = 0; i < n; i++)
        printf(i ? "\n%s %d %d %d %.2f" : "%s %d %d %d %.2f", 
            a[i].name, a[i].score1, a[i].score2, a[i].score3, a[i].avg);
}