3 solutions

  • 1
    @ 2021-10-30 11:30:28

    P1152 学生成绩 题解

    题意分析

    这个题的题意已经很清晰的给出学生信息的读取,本来想出一道二维数组嵌套结构体的,但是出完才发现可以用一维AC。

    这里直接讲最初的思路。我们创建一个学生的结构体,包含题干上给出的所有信息(其中的学科成绩信息其实可以直接用总分或者平均分来记录,所以二维转一维)。

    我们创建一个学生的数组,依次存放学信息。之后,用一个死循环来查询学生信息。

    可行代码

    #include <stdio.h>
    
    const int MAX = 100;
    const int SUBJECT = 100;
    
    struct Stu { 
        int id;
        char name[10];           // 名字
        int score[SUBJECT][MAX]; // 学科数/学期数
        double ave[SUBJECT];
    };
    
    int main() {
        int stuNum, subject, yearMax;
        scanf("%d%d%d", &stuNum, &subject, &yearMax);
        Stu stu[stuNum];
        // 输入学生信息
        for (int i = 0; i < stuNum; i++) {
            scanf(" %s%d", stu[i].name, &stu[i].id);
            for (int j = 0; j < subject; j++) {
                double sum = 0;
                for (int k = 0; k < yearMax; k++) {
                    scanf("%d", &stu[i].score[j][k]);
                    sum += stu[i].score[j][k];
                }
                stu[i].ave[j] = sum / yearMax;
            }
        }
        // 查询
        while (1) {
            int checkId;
            scanf("%d", &checkId);
            if (checkId == 0)
                break;
            bool flag = false;
            for (int i = 0; i < stuNum; i++) {
                if (stu[i].id == checkId) {
                    flag = true;
                    printf("%s ", stu[i].name);
                    for (int j = 0; j < subject; j++)
                        printf("%.2lf%c", stu[i].ave[j],
                               j < subject - 1 ? ' ' : '\n');
                    break;
                }
            }
            if (!flag) {
                printf("No such Student!\n");
            }
        }
        return 0;
    }
    

    END 明明很简单,为什么不先做我的,eeeee

    Information

    ID
    148
    Time
    1000ms
    Memory
    256MiB
    Difficulty
    8
    Tags
    # Submissions
    154
    Accepted
    18
    Uploaded By