大学一年级c语言课的小测试

输入3个学生5门课程的成绩,分别用函数实现下列功能:
(1)在主函数main中实现3位同学5门课成绩的输入;
(2)编写子函数Average_score,计算每一位学生的平均分;
(3)编写子函数Average_course,计算每一门课的平均分;
(4)子函数Average_score和Average_course在主函数main中调用。

  • 以下回答由chatgpt基于相关博客总结生成:

    首先,我们需要编写一个函数来输入学生的成绩,并计算平均分。然后再编写一个函数来计算每门课程的平均分。最后在主函数中将这些函数结合起来,并在主函数中调用菜单函数来进行操作。

    具体步骤: 1. 定义一个结构体来保存学生信息,包括学号、姓名和五门成绩。 2. 编写一个函数来读入三个学生的成绩,并计算平均分,将这些信息填入结构体中。 3. 编写一个函数来计算每门课程的平均分。 4. 在主函数中编写菜单函数,并实现录入信息、输出信息、计算每个学生平均分、计算每门课程平均分四个功能选项。 5. 分别实现功能选项对应的函数,完成相应的操作。

    具体实现:

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    // 定义学生结构体
    struct Student
    {
        int id;           // 学号
        char name[20];    // 姓名
        int scores[5];    // 五门成绩
        float avgScore;   // 平均成绩
    };
    
    #define STUDENT_NUM 3
    
    // 读入学生成绩并计算平均分
    void inputScores(struct Student *pStu)
    {
        for (int i = 0; i < STUDENT_NUM; i++)
        {
            printf("请输入第 %d 个学生的信息(学号 姓名 成绩1 成绩2 成绩3 成绩4 成绩5):", i+1);
            scanf("%d%s%d%d%d%d%d", &(pStu+i)->id, (pStu+i)->name, (pStu+i)->scores, (pStu+i)->scores+1, (pStu+i)->scores+2, (pStu+i)->scores+3, (pStu+i)->scores+4);
            int sum = 0;
            for (int j = 0; j < 5; j++)
            {
                sum += (pStu+i)->scores[j];
            }
            (pStu+i)->avgScore = sum / 5.0;
        }
    }
    
    // 计算每门课程的平均分
    void calcCourseAvg(struct Student *pStu)
    {
        float courseAvg[5] = {0};
        for (int i = 0; i < STUDENT_NUM; i++)
        {
            for (int j = 0; j < 5; j++)
            {
                courseAvg[j] += (pStu+i)->scores[j];
            }
        }
        for (int i = 0; i < 5; i++)
        {
            courseAvg[i] /= STUDENT_NUM;
            printf("第 %d 门课程的平均分为:%.2f\n", i+1, courseAvg[i]);
        }
    }
    
    // 输出学生信息
    void outputStuInfo(struct Student *pStu)
    {
        for (int i = 0; i < STUDENT_NUM; i++)
        {
            printf("学生%d,学号:%d,姓名:%s,成绩1:%d,成绩2:%d,成绩3:%d,成绩4:%d,成绩5:%d,平均成绩:%.2f。\n", i+1, (pStu+i)->id, (pStu+i)->name, (pStu+i)->scores[0], (pStu+i)->scores[1], (pStu+i)->scores[2], (pStu+i)->scores[3], (pStu+i)->scores[4], (pStu+i)->avgScore);
        }
    }
    
    // 主菜单函数
    void mainMenu(struct Student *pStu)
    {
        int select = -1;
        while (select != 0)
        {
            printf("请选择功能:\n");
            printf("1. 录入学生信息\n");
            printf("2. 输出学生信息\n");
            printf("3. 计算每个学生平均成绩\n");
            printf("4. 计算每门课程平均成绩\n");
            printf("0. 退出系统\n");
            scanf("%d", &select);
            switch (select)
            {
            case 1:
                inputScores(pStu);
                printf("录入成功!\n");
                break;
            case 2:
                outputStuInfo(pStu);
                break;
            case 3:
                for (int i = 0; i < STUDENT_NUM; i++)
                {
                    printf("%s的平均成绩为:%.2f\n", (pStu+i)->name, (pStu+i)->avgScore);
                }
                break;
            case 4:
                calcCourseAvg(pStu);
                break;
            case 0:
                printf("谢谢使用,再见!\n");
                break;
            default:
                printf("输入有误,请重新输入!\n");
                break;
            }
        }
    }
    
    int main()
    {
        struct Student stu[STUDENT_NUM];
        memset(stu, 0, sizeof(stu));
    
        mainMenu(stu);
    
        return 0;
    }
    

    在主函数中,我们定义了一个学生结构体数组,用来保存学生信息。首先在主函数中调用了菜单函数mainMenu,并将学生数组stu作为参数传入。

    在menu函数中,我们定义了一个变量select,当select不等于0时,主循环就会一直执行。而主循环就是一个菜单选择器,通过不同的功能选项来执行不同的操作。具体的功能选项,分别执行inputScores函数、outputStuInfo函数、calcCourseAvg函数等。而calcCourseAvg函数就是计算每门课程平均成绩的函数,其余函数的作用通过函数名即可理解。