编写一个绩点管理程序。

公式随便要能够算出每一位学生的平均绩点,最高分,最低分和平均分,还能够统计平均绩点在各成绩段在优良中差的人数和百分比。

详细实现如下,往采纳

#include <stdio.h>
#include <string.h>

#define NUM_STUDENTS 10  // 学生人数
#define NUM_COURSES 5    // 课程数

// 定义结构体存储学生的信息
typedef struct {
    char name[30];  // 姓名
    char id[10];    // 学号
    char course[20];  // 课程名
    int grade;      // 成绩
    float point;    // 绩点
} Student;

// 定义数组存储所有学生的信息
Student students[NUM_STUDENTS];

// 定义函数计算每个学生的平均绩点,最高分,最低分和平均分
void calc_stats(float* avg_point, int* max_grade, int* min_grade, float* avg_grade) {
    *avg_point = 0;
    *max_grade = 0;
    *min_grade = 100;
    *avg_grade = 0;

    for (int i = 0; i < NUM_STUDENTS; i++) {
        *avg_point += students[i].point;
        if (students[i].grade > *max_grade) {
            *max_grade = students[i].grade;
        }
        if (students[i].grade < *min_grade) {
            *min_grade = students[i].grade;
        }
        *avg_grade += students[i].grade;
    }
    *avg_point /= NUM_STUDENTS;
    *avg_grade /= NUM_STUDENTS;
}

void calc_percentages(int* excellent, int* good, int* average, int* poor) {
    *excellent = 0;
    *good = 0;
    *average = 0;
    *poor = 0;

    for (int i = 0; i < NUM_STUDENTS; i++) {
        if (students[i].point >= 3.5) {
            (*excellent)++;
        } else if (students[i].point >= 2.5) {
            (*good)++;
        } else if (students[i].point >= 1.5) {
            (*average)++;
        } else {
            (*poor)++;
        }
    }
}

int main(void) {
    // 读入学生信息
    for (int i = 0; i < NUM_STUDENTS; i++) {
        printf("请输入第 %d 位学生的信息(姓名 学号 课程名 成绩 绩点):", i + 1);
        scanf("%s %s %s %d %f", students[i].name, students[i].id, students[i].course,
              &students[i].grade, &students[i].point);
    }

    // 调用计算函数和统计函数
    float avg_point, avg_grade;
    int max_grade, min_grade;
    calc_stats(&avg_point, &max_grade, &min_grade, &avg_grade);

    int excellent, good, average, poor;
    calc_percentages(&excellent, &good, &average, &poor);

    // 输出统计结果
    printf("平均绩点:%.2f\n", avg_point);
    printf("最高分:%d\n", max_grade);
    printf("最低分:%d\n", min_grade);
    printf("平均分:%.2f\n", avg_grade);
    printf("优秀人数:%d(%.2f%%)\n", excellent, excellent * 100.0 / NUM_STUDENTS);
    printf("良好人数:%d(%.2f%%)\n", good, good * 100.0 / NUM_STUDENTS);
    printf("中等人数:%d(%.2f%%)\n", average, average * 100.0 / NUM_STUDENTS);
    printf("差劣人数:%d(%.2f%%)\n", poor, poor * 100.0 / NUM_STUDENTS);

    return 0;
}