用C语言编写程序,有3个班组,每组有10名学生,输入每位同学的英语成绩。设计一个函数,计算出各班组的平均英语成绩以及全体同学的平均英语成绩(用指针做参数,传递二维数组)。
时间: 2024-12-21 08:30:44 浏览: 13
在C语言中,你可以通过定义一个指向数组的指针,并结合嵌套循环来实现这个功能。首先,你需要定义一个结构体来存储每个学生的姓名和英语成绩,然后创建一个二维数组来存放所有学生的信息。接着,你可以编写一个函数`calculateAverages`来计算平均分。
```c
#include <stdio.h>
#include <string.h>
// 定义学生结构体
typedef struct {
char name[50];
int english_score;
} Student;
// 函数声明
void calculateAverages(Student** groups, int num_groups, int num_students_per_group, float* overall_average);
int main() {
// 初始化数据
const int NUM_GROUPS = 3;
const int NUM_STUDENTS_PER_GROUP = 10;
Student students[NUM_GROUPS][NUM_STUDENTS_PER_GROUP]; // 二维数组存放学生信息
float overall_average = 0.0; // 存放整体平均分
// 输入学生分数
for (int i = 0; i < NUM_GROUPS; i++) {
for (int j = 0; j < NUM_STUDENTS_PER_GROUP; j++) {
printf("请输入第%d组第%d位同学的英语成绩:", i + 1, j + 1);
scanf("%d", &students[i][j].english_score);
strcpy(students[i][j].name, "Student" + i * 10 + j); // 假设名字已给定
}
}
// 调用函数计算平均分
calculateAverages(students, NUM_GROUPS, NUM_STUDENTS_PER_GROUP, &overall_average);
// 输出结果
printf("各班组平均英语成绩:\n");
for (int i = 0; i < NUM_GROUPS; i++) {
float group_average = (float)sum(students[i], NUM_STUDENTS_PER_GROUP) / NUM_STUDENTS_PER_GROUP;
printf("班组 %d 的平均分: %.2f\n", i + 1, group_average);
}
printf("全体同学的平均英语成绩: %.2f\n", overall_average);
return 0;
}
// 求和函数(假设这里有一个辅助函数sum)
float sum(Student* arr, int size) {
float total = 0;
for (int i = 0; i < size; i++) {
total += arr[i].english_score;
}
return total;
}
void calculateAverages(Student** groups, int num_groups, int num_students_per_group, float* overall_average) {
*overall_average = 0.0;
for (int i = 0; i < num_groups; i++) {
*overall_average += sum(groups[i], num_students_per_group);
}
*overall_average /= num_groups * num_students_per_group;
}
```
在这个例子中,`calculateAverages`函数接收指向学生二维数组的指针、班组数、每班组的学生数,以及一个指向浮点数的指针(用于返回总体平均分)。`sum`函数是一个辅助函数,用于计算数组元素的总和。
阅读全文