公式随便要能够算出每一位学生的平均绩点,最高分,最低分和平均分,还能够统计平均绩点在各成绩段在优良中差的人数和百分比。
详细实现如下,往采纳
#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;
}