你说的不对,输出的是三个人数学、语文、英语总体的平均分
时间: 2024-09-20 20:03:27 浏览: 12
抱歉,我理解错误了。如果你想计算所有输入学生的数学、语文、英语的总体平均分,而不针对单个学生,那么可以对整个数组求和后再除以学生总数。以下是修改后的代码:
```c
#include <stdio.h>
#include <stdlib.h> // 加入此头文件用于动态分配内存
// 增加函数,用于计算整体平均分
float overall_average(float total_math, float total_chinese, float total_english, int num_students) {
return (total_math + total_chinese + total_english) / num_students;
}
int main() {
struct Student *students = NULL; // 动态分配结构体数组
int num_students = 0, max_students = 10;
// 输入学生信息并动态分配内存
while (num_students < max_students) {
Student new_student;
scanf("%d %f %f %f %s", &new_student.id, &new_student.math_score, &new_student.chinese_score, &new_student.english_score, new_student.name);
if (students == NULL) {
students = (struct Student *)malloc(sizeof(struct Student));
} else {
students = (struct Student *)realloc(students, sizeof(struct Student) * (num_students + 1));
}
students[num_students++] = new_student;
}
// 计算每门科目的总分
float total_math = 0, total_chinese = 0, total_english = 0;
for (int i = 0; i < num_students; i++) {
total_math += students[i].math_score;
total_chinese += students[i].chinese_score;
total_english += students[i].english_score;
}
// 输出总体平均分
float average_math = overall_average(total_math, total_chinese, total_english, num_students);
printf("全体学生的数学、语文、英语的平均分为:\n数学 %.2f, 语文 %.2f, 英语 %.2f\n", average_math, total_chinese / num_students, total_english / num_students);
// 释放内存
free(students);
return 0;
}
```