248125886 2023-12-07 22:16 采纳率: 60%
浏览 15
已结题

codeblock,C语言,某班期末考试科目为物理(PH)、数学(MT)、英语(EN),最多不超过30人参加考试,分别实现下列功能(要求用多个函数实现)

codeblock
C语言
某班期末考试科目为物理(PH)、数学(MT)、英语(EN),最多不超过30人参加考试,分别实现下列功能(要求用多个函数实现):
(1)函数Total_1:输入n个学生的学号num,计算每个学生的总分sum和平均分ave,并按照:(学号 总分 平均分)的格式分行打印;
(2)函数Sort:按照总分成绩由高到低排出成绩的名次,并按照:(学号 总分)的格式分行打印;
(3)函数Total_2:分别统计各学科的平均分,并按照:(科目 平均分)的格式分行打印;

  • 写回答

2条回答 默认 最新

  • 一个风轻云淡 优质创作者: 后端开发技术领域 2023-12-08 08:05
    关注
    
    
    #include <stdio.h>
    #include <stdlib.h>
    
    #define MAX_STUDENTS 30
    #define SUBJECTS 3
    
    typedef struct {
        int num;
        int scores[SUBJECTS];
        int sum;
        double ave;
    } Student;
    
    void Total_1(Student students[], int n) {
        printf("学号\t总分\t平均分\n");
        for (int i = 0; i < n; i++) {
            int sum = 0;
            for (int j = 0; j < SUBJECTS; j++) {
                sum += students[i].scores[j];
            }
            students[i].sum = sum;
            students[i].ave = (double) sum / SUBJECTS;
            printf("%d\t%d\t%.2f\n", students[i].num, students[i].sum, students[i].ave);
        }
        printf("\n");
    }
    
    int compare(const void *a, const void *b) {
        return ((Student *) b)->sum - ((Student *) a)->sum;
    }
    
    void Sort(Student students[], int n) {
        qsort(students, n, sizeof(Student), compare);
    
        printf("名次\t学号\t总分\n");
        for (int i = 0; i < n; i++) {
            printf("%d\t%d\t%d\n", i + 1, students[i].num, students[i].sum);
        }
        printf("\n");
    }
    
    void Total_2(Student students[], int n) {
        int subjectSum[SUBJECTS] = {0};
        double subjectAve[SUBJECTS] = {0};
    
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < SUBJECTS; j++) {
                subjectSum[j] += students[i].scores[j];
            }
        }
    
        for (int i = 0; i < SUBJECTS; i++) {
            subjectAve[i] = (double) subjectSum[i] / n;
        }
    
        const char *subjects[SUBJECTS] = {"物理", "数学", "英语"};
    
        printf("科目\t平均分\n");
        for (int i = 0; i < SUBJECTS; i++) {
            printf("%s\t%.2f\n", subjects[i], subjectAve[i]);
        }
        printf("\n");
    }
    
    int main() {
        int n;
        Student students[MAX_STUDENTS];
    
        printf("请输入学生人数(不超过30人):");
        scanf("%d", &n);
    
        if (n > MAX_STUDENTS) {
            printf("输入的人数超过最大限制!\n");
            return 0;
        }
    
        for (int i = 0; i < n; i++) {
            printf("请输入第 %d 个学生的学号:", i + 1);
            scanf("%d", &students[i].num);
    
            printf("请输入第 %d 个学生的物理、数学和英语成绩(以空格分隔):", i + 1);
            for (int j = 0; j < SUBJECTS; j++) {
                scanf("%d", &students[i].scores[j]);
            }
            printf("\n");
        }
    
        Total_1(students, n);
        Sort(students, n);
        Total_2(students, n);
    
        return 0;
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 1月9日
  • 已采纳回答 1月1日
  • 创建了问题 12月7日