osososi 2023-12-03 18:03 采纳率: 0%
浏览 3

C语言这个问题,不知道

学生成绩统计
从键盘输入一个班(全班最多不超过30人)学生某门课的成绩,当输入成绩为负值时,
输入结束,分别实现下列功能:
(1)统计不及格人数并打印不及格学生名单;
(2)统计成绩在全班平均分及平均分之上的学生人数,并打印这些学生的名单;
(3)统计各分数段的学生人数及所占的百分比。
(4)用一维数组和指针变量作为函数参数,编程打印某班一门课成绩的最高分及其学号。

  • 写回答

3条回答 默认 最新

  • 梦回阑珊 2023-12-03 19:35
    关注

    回复不易,麻烦关注下博主,后面还有问题直接私信我,谢谢!!!

    #include <stdio.h>
    #include <stdlib.h>
    
    #define MAX_STUDENTS 30
    
    // 函数声明
    void printFailList(int grades[], int n);
    void printAboveAverageList(int grades[], int n, float avg);
    void printScoreDistribution(int grades[], int n);
    void printHighestScore(int grades[], int n, int *maxScore, int *maxStudent);
    
    int main() {
        int grades[MAX_STUDENTS];
        int n = 0; // 学生人数
        int sum = 0; // 总成绩
        float avg; // 平均成绩
    
        // 输入成绩,当输入为负值时结束
        printf("请输入学生的成绩(负值表示输入结束):\n");
        while (1) {
            int score;
            scanf("%d", &score);
    
            if (score < 0) {
                break;
            }
    
            if (n >= MAX_STUDENTS) {
                printf("学生人数超过最大限制\n");
                return 1;
            }
    
            grades[n++] = score;
            sum += score;
        }
    
        if (n == 0) {
            printf("没有输入成绩\n");
            return 1;
        }
    
        // 计算平均成绩
        avg = (float)sum / n;
    
        // (1) 统计不及格人数并打印不及格学生名单
        printFailList(grades, n);
    
        // (2) 统计成绩在全班平均分及平均分之上的学生人数,并打印这些学生的名单
        printAboveAverageList(grades, n, avg);
    
        // (3) 统计各分数段的学生人数及所占的百分比
        printScoreDistribution(grades, n);
    
        // (4) 打印某班一门课成绩的最高分及其学号
        int maxScore, maxStudent;
        printHighestScore(grades, n, &maxScore, &maxStudent);
        printf("最高分是 %d,学号是 %d\n", maxScore, maxStudent);
    
        return 0;
    }
    
    // (1) 统计不及格人数并打印不及格学生名单
    void printFailList(int grades[], int n) {
        int failCount = 0;
    
        printf("不及格学生名单:\n");
        for (int i = 0; i < n; ++i) {
            if (grades[i] < 60) {
                printf("学号%d\n", i + 1);
                failCount++;
            }
        }
    
        printf("不及格人数:%d\n", failCount);
    }
    
    // (2) 统计成绩在全班平均分及平均分之上的学生人数,并打印这些学生的名单
    void printAboveAverageList(int grades[], int n, float avg) {
        int aboveAvgCount = 0;
    
        printf("成绩在平均分及平均分之上的学生名单:\n");
        for (int i = 0; i < n; ++i) {
            if (grades[i] >= avg) {
                printf("学号%d\n", i + 1);
                aboveAvgCount++;
            }
        }
    
        printf("成绩在平均分及平均分之上的人数:%d\n", aboveAvgCount);
    }
    
    // (3) 统计各分数段的学生人数及所占的百分比
    void printScoreDistribution(int grades[], int n) {
        int scoreDistribution[6] = {0}; // 0-59, 60-69, 70-79, 80-89, 90-99, 100
        float percentage;
    
        // 统计各分数段的学生人数
        for (int i = 0; i < n; ++i) {
            if (grades[i] < 60) {
                scoreDistribution[0]++;
            } else if (grades[i] < 70) {
                scoreDistribution[1]++;
            } else if (grades[i] < 80) {
                scoreDistribution[2]++;
            } else if (grades[i] < 90) {
                scoreDistribution[3]++;
            } else if (grades[i] < 100) {
                scoreDistribution[4]++;
            } else {
                scoreDistribution[5]++;
            }
        }
    
        // 打印各分数段的学生人数及百分比
        printf("各分数段的学生人数及百分比:\n");
        for (int i = 0; i < 6; ++i) {
            percentage = (float)scoreDistribution[i] / n * 100;
            printf("%d-%d 分的学生人数:%d,百分比:%.2f%%\n", i * 10, i * 10 + 9, scoreDistribution[i], percentage);
        }
    }
    
    // (4) 打印某班一门课成绩的最高分及其学号
    void printHighestScore(int grades[], int n, int *maxScore, int *maxStudent) {
        *maxScore = grades[0];
        *maxStudent = 1;
    
        for (int i = 1; i < n; ++i) {
            if (grades[i] > *maxScore) {
                *maxScore = grades[i];
                *maxStudent = i + 1;
            }
        }
    }
    
    
    
    评论

报告相同问题?

问题事件

  • 创建了问题 12月3日

悬赏问题

  • ¥15 关于树的路径求解问题
  • ¥15 yolo在训练时候出现File "D:\yolo\yolov5-7.0\train.py"line 638,in <module>
  • ¥30 戴尔inspiron独显直连
  • ¥15 进行一项代码设计遇到问题
  • ¥15 Mutisim中关于74LS192N计数器芯片设计(计数器)
  • ¥50 fastadmin后台无法删除文件
  • ¥15 oracle查询Socket read timed out错误
  • ¥15 matlab支持向量机使用错误
  • ¥99 利用C/C++语言,使用TCP/IP协议,编一个简易聊天程序
  • ¥15 如何使用python 实现对串口/dev/ttyUSB0进行上锁,使得该串口只能在一个python脚本中使用,其他脚本不能操作这个串口