(C语言用指针做参数,传递二维数组)编写程序,有3个班组,每组有10名学生,输入每位同学的英语成绩。设计一个函数,计算出各班组的平均英语成绩以及全体同学的平均英语成绩。
时间: 2024-12-20 10:31:46 浏览: 16
在C语言中,我们可以使用指针来处理二维数组作为函数参数,因为指针可以指向数组的首地址,这样可以在函数内部访问整个数组。假设我们有一个结构体`Student`表示学生信息,包含姓名和英语成绩,然后有一个二维数组`students`存储所有学生的数据。下面是一个简单的示例:
```c
#include <stdio.h>
typedef struct {
char name[20];
float english_score;
} Student;
void calculate_average(int (*students)[10], int num_groups, int students_per_group) {
float total_scores = 0.0;
for (int i = 0; i < num_groups * students_per_group; ++i) {
total_scores += students[i].english_score;
}
// 计算每个班组的平均分数
printf("Average English score per group:\n");
for (int group = 0; group < num_groups; ++group) {
printf("%s group: %.2f\n", "Group " + group, total_scores / students_per_group);
total_scores -= students[group * students_per_group].english_score; // 更新总分
}
// 计算全体学生的平均分数
float overall_avg = total_scores / (num_groups * students_per_group);
printf("Overall average English score: %.2f\n", overall_avg);
}
int main() {
const int num_groups = 3;
const int students_per_group = 10;
Student** student_matrix = (Student**)malloc(num_groups * sizeof(Student*));
// 分配内存并初始化学生数据
for (int i = 0; i < num_groups; ++i) {
student_matrix[i] = (Student*)malloc(students_per_group * sizeof(Student));
for (int j = 0; j < students_per_group; ++j) {
scanf("%s %f", student_matrix[i][j].name, &student_matrix[i][j].english_score);
}
}
// 调用函数计算平均值
calculate_average(student_matrix, num_groups, students_per_group);
// 释放内存
for (int i = 0; i < num_groups; ++i)
free(student_matrix[i]);
free(student_matrix);
return 0;
}
```
在这个示例中,`calculate_average`函数接受一个二维指针`students`,代表整个学生矩阵。在`main`函数中,首先创建了二维数组,并读取了每位学生的成绩。注意要记得在结束后释放分配的内存。
阅读全文