程序设计实训第一次作业---第二题、数组与排序A

【问题描述】
从标准输入连续读入n(n<10)个学生的学号(不超过int类型表示范围)、姓名(由不超过10个英文字母组成)以及数学、英语、语文三门课的成绩,计算个人的平均成绩,并且按个人的总成绩由高到低排序(如果总成绩相同,按学号由低到高排序,但前面的排序序号不变,即两人排名相同),将排名结果在屏幕上显示出来(要求同一列右对齐,其中排名占4个字符、学号占10个字符,姓名占10个字符,数学、英语、语文各占5个字符)。如输入的学生人数n大于等于10,则打印输出“Please input 1-9.“, 然后,退出程序。
【输入形式】
从控制台输入一个小于10的正整数,表示学生人数;然后分行输入学号、姓名以及数学、英语、语文三门课的成绩,中间用空格分隔。
【输出形式】
1、控制台输出排序结果,要求输出:排名结果、学号、姓名、数学成绩、英语成绩、语文成绩。
2、要求同一列右对齐,其中排名占4个字符、学号占10个字符,姓名占10个字符,数学、英语、语文各占5个字符。
3、如两人成绩相同,总成绩相同,按学号由低到高排序输出,但前面的排序序号不变,即两人排名相同。
【样例输入1】
8
39060415 zf 98 88 85
39060427 lzw 87 92 88
39060413 wr 95 86 90
39060412 wp 95 85 91
39060405 syj 78 82 69
39060425 yef 85 78 93
39060419 sw 75 89 88
39060421 rr 89 88 75

【样例输出1】
1 39060412 wp 95 85 91
1 39060413 wr 95 86 90
1 39060415 zf 98 88 85
4 39060427 lzw 87 92 88
5 39060425 yef 85 78 93
6 39060419 sw 75 89 88
6 39060421 rr 89 88 75
8 39060405 syj 78 82 69

【样例输入2】
10
【样例输出2】
Please input 1-9.

【样例说明】
相同分数,相同排名的原则。在样例1中:“1 39060412 wp 95 85 91”、“1 39060413 wr 95 86 90”、“1 39060415 zf 98 88 85”总分相同,因此排名相同;同时,由于有三个第1名,因此要跳开2和3,因此,下一位同学的排名从4开始计算,为“4 39060427 lzw 87 92 88”。其中“6 39060419 sw 75 89 88”和“6 39060421 rr 89 88 75”也是一样的道理。

本题评分分为两个部分,完成第一层按成绩由高到低排序,并且给出正确的输入输出,得60%;完成第一层按成绩排序,且在相同总分的情况下,能够正确的按照学号由低到高排序,并且给出正确的输入输出,得100%。
【评分标准】
该题要求输出上述排序结果,共5个测试点。完成第一层按成绩排序,并且给出正确的输入输出,得60%;完成第一层按成绩排序,且在相同总分的情况下,能够正确的按照学号由低到高排序,并且给出正确的输入输出,得100%。上传C语言文件名为sortA.c。

#include 
#include 
#include 
#define N 10

typedef struct Students {
    int id;
    char name[10];
    int math;
    int en;
    int ch;

}STU;

STU stu[N];

void sortInfo(STU stu[], int n);
void swapInfo(STU *p, STU *q);

int main() {
    int n = 10, m = 0, w = 1;

        scanf("%d", &n);
        if (n>9||n<1) {
            printf("Please input 1-9.");
            return 0;
            }

    for (int i = 0; i"%d%s%d%d%d", &stu[i].id, &stu[i].name, &stu[i].math, &stu[i].en, &stu[i].ch);

    }
    sortInfo(stu, n);
    for (int i = 0; i < n; i++) {

        if (i >0) {
            if ((stu[i].en + stu[i].ch + stu[i].math) == (stu[i - 1].en + stu[i - 1].ch + stu[i - 1].math)) {
                m++;
                printf("%4d", w - m);
            }
            else {
                printf("%4d", w);
                m = 0;
            }
        }
        else {
            printf("%d", w);
        }
        printf("%10d%10s%5d%5d%5d\n", stu[i].id, stu[i].name, stu[i].math, stu[i].en, stu[i].ch);

        w++;
    }
    return 0;
}

void sortInfo(STU stu[], int n) {
    int i, j;
    for (i = 0; i < n - 1; i++) {
        for (j = 0; j < n - 1 - i; j++) {
            int a = stu[j].en + stu[j].ch + stu[j].math, b = stu[j + 1].en + stu[j + 1].ch + stu[j + 1].math;
            if (a1]);
            }
            else if ((a == b) && (stu[j].id >stu[j + 1].id)) {
                swapInfo(&stu[j], &stu[j + 1]);
            }
        }
    }

}
void swapInfo(STU *p, STU *q) {
    STU trmp;
    trmp = *p; *p = *q; *q = trmp;
}

程序设计实训第一次作业---第二题、数组与排序A_第1张图片

你可能感兴趣的:(C)