C语言多个学生多门成绩统计,求平均值、min、max案例代码

题目描述

输入10名学生的英语、 C 语言、计算机文化基础成绩,统计每名学生三科成绩的平均分,成绩的最大值、最小值等。分析三门课程的优秀率,85分以上为优秀。应运用选择、循环、数组、函数、等所学知识,完成的设计任务,并顺利调试通过并运行所编制的程序。
(一)设计主函数,在主函数中应该有正确输入或调用每个学生的学号及各科成绩。
(二)设计子函数,可以求每个学生的平均成绩,每门课的平均成绩、成绩的最大值、最小值等、并保存在数组中;
(三)最后结果输出。对所选题目对应程序的运行情况做详细分析,总结本次设计所取得的经验

案例代码

#include <stdio.h>

// 学生数量
#define STUDENT_NUM 10

// 成绩结构体
typedef struct {
    float english;
    float c_language;
    float computer_culture;
} Score;

// 统计信息结构体
typedef struct {
    float max_english;
    float min_english;
    float max_c_language;
    float min_c_language;
    float max_computer_culture;
    float min_computer_culture;
    float avg_english;
    float avg_c_language;
    float avg_computer_culture;
    float excellent_rate;
} Statistics;

// 函数声明
void inputScores(Score scores[], int n);
void calculateStatistics(const Score scores[], Statistics *stats, int n);
void outputStatistics(const Statistics *stats);

int main() {
    Score scores[STUDENT_NUM];
    Statistics stats;

    inputScores(scores, STUDENT_NUM);
    calculateStatistics(scores, &stats, STUDENT_NUM);
    outputStatistics(&stats);

    return 0;
}

// 输入学生成绩
void inputScores(Score scores[], int n) {
    for (int i = 0; i < n; i++) {
        printf("请输入第%d名学生的英语成绩:", i+1);
        scanf("%f", &(scores[i].english));
        printf("请输入第%d名学生的C语言成绩:", i+1);
        scanf("%f", &(scores[i].c_language));
        printf("请输入第%d名学生的计算机文化基础成绩:", i+1);
        scanf("%f", &(scores[i].computer_culture));
    }
}

// 计算统计信息
void calculateStatistics(const Score scores[], Statistics *stats, int n) {
    float total_english = 0;
    float total_c_language = 0;
    float total_computer_culture = 0;
    float max_english = scores[0].english;
    float min_english = scores[0].english;
    float max_c_language = scores[0].c_language;
    float min_c_language = scores[0].c_language;
    float max_computer_culture = scores[0].computer_culture;
    float min_computer_culture = scores[0].computer_culture;
    int excellent_count = 0;

    for (int i = 0; i < n; i++) {
        total_english += scores[i].english;
        total_c_language += scores[i].c_language;
        total_computer_culture += scores[i].computer_culture;

        if (scores[i].english > max_english) {
            max_english = scores[i].english;
        }
        if (scores[i].english < min_english) {
            min_english = scores[i].english;
        }

        if (scores[i].c_language > max_c_language) {
            max_c_language = scores[i].c_language;
        }
        if (scores[i].c_language < min_c_language) {
            min_c_language = scores[i].c_language;
        }

        if (scores[i].computer_culture > max_computer_culture) {
            max_computer_culture = scores[i].computer_culture;
        }
        if (scores[i].computer_culture < min_computer_culture) {
            min_computer_culture = scores[i].computer_culture;
        }

        if (scores[i].english > 85 && scores[i].c_language > 85 && scores[i].computer_culture > 85) {
            excellent_count++;
        }
    }

    stats->max_english = max_english;
    stats->min_english = min_english;
    stats->max_c_language = max_c_language;
    stats->min_c_language = min_c_language;
    stats->max_computer_culture = max_computer_culture;
    stats->min_computer_culture = min_computer_culture;
    stats->avg_english = total_english / n;
    stats->avg_c_language = total_c_language / n;
    stats->avg_computer_culture = total_computer_culture / n;
    stats->excellent_rate = (float) excellent_count / n;
}

// 输出统计信息
void outputStatistics(const Statistics *stats) {
    printf("英语成绩最高分:%.2f\n", stats->max_english);
    printf("英语成绩最低分:%.2f\n", stats->min_english);
    printf("C语言成绩最高分:%.2f\n", stats->max_c_language);
    printf("C语言成绩最低分:%.2f\n", stats->min_c_language);
    printf("计算机文化基础成绩最高分:%.2f\n", stats->max_computer_culture);
    printf("计算机文化基础成绩最低分:%.2f\n", stats->min_computer_culture);
    printf("英语成绩平均分:%.2f\n", stats->avg_english);
    printf("C语言成绩平均分:%.2f\n", stats->avg_c_language);
    printf("计算机文化基础成绩平均分:%.2f\n", stats->avg_computer_culture);
    printf("优秀率:%.2f%%\n", stats->excellent_rate * 100);
}

这个程序会先让用户输入每个学生的英语、C语言和计算机文化基础成绩,然后统计每门课程的最高分、最低分和平均分,以及整体的优秀率。最后输出统计信息。

这个程序使用了结构体来保存每个学生的成绩,使用了循环来遍历每个学生的成绩,使用了选择来判断最大值、最小值和优秀率。还使用了函数来模块化代码,使程序更易读、易维护。

© 版权声明
THE END
喜欢就支持一下吧
点赞11赞赏 分享