m0_74135038 2023-06-09 17:03 采纳率: 100%
浏览 145
已结题

关于#c语言#的问题:要求:输出格式要界面直观、清晰大方、格式规范

设计主函数,在主函中应该有正确输入或调用每个学生的学号及各科成绩(输入可以根据不同的情况采用不同的输入方法)。
要求:输入时有必要的提示信息。
设计子函数,可以求每个学生的平均成绩,每门课的平均成绩等、并保存在数组中;
要求:每个学生至少设计两个子函数。
最后结果输出。要求:输出格式要界面直观、清晰大方、格式规范。

  • 写回答

11条回答 默认 最新

  • 语言-逆行者 2023-06-09 22:05
    关注

    基于new bing的编写修改:

    img

    img

    img

    
    #include <stdio.h>
    #include <stdlib.h>
    
    #define MAX_STUDENT_NUM 20
    #define MAX_SUBJECT_NUM 10
    
    // 学生结构体定义
    typedef struct student {
        int id;
        char name[20];
        float score[MAX_SUBJECT_NUM];
        float average; // 平均成绩
    } student;
    
    void print_menu() {
        printf("\n            欢迎使用学生成绩管理系统,请输入数字执行相应操作:\n");
        printf("              ---------------1. 录入学生信息----------------\n");
        printf("              ---------------2. 输出所有学生信息------------\n");
        printf("              ---------------3. 计算每个学生的平均分数-------\n");
        printf("              ---------------4. 计算每门课程的平均分数-------\n");
        printf("              ---------------5. 退出系统--------------------\n\n");
    }
    
    int get_input(int min, int max) {
        int input;
        do {
            printf("请输入数字(%d-%d): ", min, max);
            scanf("%d", &input);
        } while (input < min || input > max);
        return input;
    }
    
    int input_student_info(student *students, int num_students, int num_subjects) {
        int i, j;
        for (i = 0; i < num_students; i++) {
            printf("录入第%d个学生的信息:\n", i + 1);
            printf("请输入学号:");
            scanf("%d", &students[i].id);
            printf("请输入姓名:");
            scanf("%s", students[i].name);
            for (j = 0; j < num_subjects; j++) {
                printf("请输入第%d门课的成绩:", j + 1);
                scanf("%f", &students[i].score[j]);
            }
        }
        return num_students;
    }
    
    void output_student_info(student *students, int num_students, int num_subjects) {
        int i, j;
        printf("\n所有学生的信息如下:\n");
        printf("| 学号 | 姓名 | ");
        for (j = 0; j < num_subjects; j++) {
            printf("第%d门课程 | ", j + 1);
        }
        printf("\n|------|------|");
        for (j = 0; j < num_subjects; j++) {
            printf("-----------|");
        }
        printf("\n");
        for (i = 0; i < num_students; i++) {
            printf("| %4d | %4s | ", students[i].id, students[i].name);
            for (j = 0; j < num_subjects; j++) {
                printf("%9.2f | ", students[i].score[j]);
            }
            printf("\n");
        }
    }
    
    void calculate_student_average(student *students, int num_students, int num_subjects) {
        int i, j;
        for (i = 0; i < num_students; i++) {
            float sum = 0;
            for (j = 0; j < num_subjects; j++) {
                sum += students[i].score[j];
            }
            students[i].average = sum / num_subjects;
        }
    }
    
    void output_student_average(student *students, int num_students) {
        int i;
        printf("\n每个学生的平均分数如下:\n");
        for (i = 0; i < num_students; i++) {
            printf("%s 的平均成绩为 %.2f\n", students[i].name, students[i].average);
        }
    }
    
    void calculate_subject_average(student *students, int num_students, int num_subjects) {
        int i, j;
        float subject_total[MAX_SUBJECT_NUM] = {0};
        for (j = 0; j < num_subjects; j++) {
            for (i = 0; i < num_students; i++) {
                subject_total[j] += students[i].score[j];
            }
        }
        printf("\n每门课程的平均分如下:\n");
        for (j = 0; j < num_subjects; j++) {
            printf("第%d门课程: %.2f\n", j + 1, subject_total[j] / num_students);
        }
    }
    
    int main() {
        int num_students = 0, num_subjects = 0;
        student students[MAX_STUDENT_NUM];
    
        print_menu();
        int option = get_input(1, 5);
        while (option != 5) {
            switch(option) {
                case 1:
                    printf("请输入要录入的学生数量:");
                    scanf("%d", &num_students);
                    printf("请输入要录入的课程数量:");
                    scanf("%d", &num_subjects);
                    if (num_students > MAX_STUDENT_NUM || num_subjects > MAX_SUBJECT_NUM) {
                        printf("输入数量超过最大限制。\n");
                        break;
                    }
                    input_student_info(students, num_students, num_subjects);
                    break;
                case 2:
                    output_student_info(students, num_students, num_subjects);
                    break;
                case 3:
                    calculate_student_average(students, num_students, num_subjects);
                    output_student_average(students, num_students);
                    break;
                case 4:
                    calculate_subject_average(students, num_students, num_subjects);
                    break;
                default:
                    printf("无效的选择,请重新输入。\n");
                    break;
            }
            print_menu();
            option = get_input(1, 5);
        }
    
        printf("已退出学生成绩管理系统。\n");
        return 0;
    }
    
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(10条)

报告相同问题?

问题事件

  • 系统已结题 6月22日
  • 已采纳回答 6月14日
  • 请采纳用户回复 6月13日
  • 创建了问题 6月9日

悬赏问题

  • ¥15 HFSS 中的 H 场图与 MATLAB 中绘制的 B1 场 部分对应不上
  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?