输入n(4<=n<=20)个学生m(2<=m<=5)门课程的成绩,分别求每个学生的平均成绩和每门课程的平均成绩。
时间: 2024-09-28 10:04:54 浏览: 111
为了实现这个功能,我们可以定义一个结构体来表示学生和他们的课程成绩,以及两个辅助函数来计算单个学生的平均成绩和所有课程的平均成绩。这里是一个简单的C语言解决方案:
```c
#include <stdio.h>
// 定义结构体,存储学生ID、课程名和对应成绩
typedef struct {
int id;
char course_name[50];
float scores[5]; // 存储最多5门课程的成绩
} Student;
// 计算单个学生的所有课程平均成绩
float calculate_student_average(Student student) {
float sum = 0.0;
for (int i = 0; i < 5; i++) {
if (student.scores[i] != 0) {
sum += student.scores[i];
}
}
return sum / (5.0f * (student.scores[0] != 0 ? 1 : 0)); // 处理未选修课程的情况
}
// 计算某门课程的所有学生的平均成绩
float calculate_course_average(char course_name[]) {
Student students[20];
int n, m;
float total_score = 0.0, num_students = 0;
printf("请输入学生数量(n, 4 <= n <= 20):");
scanf("%d", &n);
printf("请输入学生选修课程的数量(m, 2 <= m <= 5):");
scanf("%d", &m);
for (int i = 0; i < n; i++) {
printf("请输入学生%d的学号:", i + 1);
scanf("%d", &students[i].id);
for (int j = 0; j < m; j++) {
printf("请输入学生%d在%s的成绩:", i + 1, course_name[j]);
scanf("%f", &students[i].scores[j]);
}
}
for (int i = 0; i < n; i++) {
if (students[i].scores[0] != 0) {
total_score += students[i].scores[0];
num_students++;
}
}
return total_score / num_students;
}
int main() {
char course_names[] = {"数学", "英语", "物理", "化学", "生物"}; // 假设这是5门课程
for (int i = 0; i < 5; i++) {
printf("学生在%s的平均成绩是:%.2f\n", course_names[i], calculate_course_average(course_names[i]));
}
for (int i = 0; i < 20; i++) {
if (calculate_student_average(students[i]) != 0) {
printf("学生%d的平均成绩是:%.2f\n", students[i].id, calculate_student_average(students[i]));
} else {
printf("学生%d未选择任何课程。\n", students[i].id);
}
}
return 0;
}
```
在这个程序中,我们首先询问用户输入学生数量和选修课程数量,然后输入每个学生各个课程的成绩。接着,我们遍历每个课程,计算该课程所有学生的平均成绩;对于每个学生,我们也计算其平均成绩。注意,这里假设了每个学生都至少选择了一门课程,如果需要处理部分学生没有选修某些课程的情况,请添加适当的检查。
阅读全文