c语言某班级有M位学生,每位学生有N门课程成绩,求每门课程的平均分和每位学生的平均成绩
时间: 2024-12-29 16:30:02 浏览: 22
在C语言中,你可以使用数组或者结构体来存储学生信息和他们的成绩。首先,创建一个结构体`Student`来表示学生,包含姓名和一个用于存储所有课程成绩的数组。然后,可以定义另一个数组`Course`来存储所有课程的名称及其对应的总分数。
```c
#include <stdio.h>
#include <string.h>
// 定义学生结构体
typedef struct {
char name[50]; // 学生姓名
int scores[N]; // N门课程的成绩数组
} Student;
// 定义课程结构体(这里简化只考虑一门课程)
typedef struct {
char course_name[50];
int total_score;
} Course;
// 函数声明
void calculate_average(Student* students, int student_count, Course* courses);
int main() {
int M, N; // 分别表示学生数和课程数
printf("请输入学生数(M)和每名学生课程数(N): ");
scanf("%d %d", &M, &N);
// 初始化学生和课程数组
Student students[M];
Course courses[N];
// 输入学生信息和成绩
for (int i = 0; i < M; i++) {
printf("输入学生 %d 的姓名: ", i+1);
fgets(students[i].name, sizeof(students[i].name), stdin); // 去掉换行符
for (int j = 0; j < N; j++) {
printf("输入第%d门课程的成绩: ", j+1);
scanf("%d", &students[i].scores[j]);
}
}
// 输入课程信息
for (int i = 0; i < N; i++) {
printf("输入第%d门课程名称: ", i+1);
fgets(courses[i].course_name, sizeof(courses[i].course_name), stdin); // 去掉换行符
}
// 计算平均分
calculate_average(students, M, courses);
return 0;
}
// 函数实现
void calculate_average(Student* students, int student_count, Course* courses) {
for (int i = 0; i < N; i++) {
int sum = 0;
for (int j = 0; j < student_count; j++) {
sum += students[j].scores[i];
}
double average = static_cast<double>(sum) / student_count;
printf("课程 '%s' 的平均分是: %.2f\n", courses[i].course_name, average);
}
for (int i = 0; i < student_count; i++) {
double total = 0;
for (int j = 0; j < N; j++) {
total += students[i].scores[j];
}
double avg_student_score = static_cast<double>(total) / N;
printf("学生 '%s' 的平均成绩是: %.2f\n", students[i].name, avg_student_score);
}
}
```
在这个示例中,我们首先获取学生和课程的数量,然后分别读取学生的姓名、成绩以及课程的名称。接着,通过`calculate_average`函数计算每门课程的平均分和每位学生的平均成绩,并将结果打印出来。
阅读全文