C语言--用动态数组编程输入任意m个班学生(每班n个学生)的某门课的成绩,输出每个班的平均分。
时间: 2025-04-04 20:05:50 浏览: 29
要用C语言实现这个功能,可以利用动态内存分配技术(如`malloc()` 和 `free()`),先创建一个二维动态数组用于存储各班级学生的成绩数据,并计算出各个班级的平均分。
以下是解决步骤及示例代码:
### 解决思路
1. **输入班级数 (m)**:通过用户输入获取总共有多少个班级。
2. **输入每班的学生人数 (n)**:对于每一个班级分别获取学生的人数。
3. **动态分配空间**:基于上述两个变量值构建动态的二维数组来保存所有学生成绩。
4. **录入成绩**:从标准输入读取每个学生的分数并填充到对应的数组元素位置上。
5. **求平均分**:遍历每个班级的所有成员成绩,累加求和再除以该班级内实际存在的学生总数得到平均分。
6. **释放资源**:操作完成后记得释放申请过的堆内存区域避免泄漏。
```c
#include <stdio.h>
#include <stdlib.h>
int main() {
int m; // 班级数量
printf("请输入班级数目(m): ");
scanf("%d", &m);
float **scores = malloc(sizeof(float *) * m); // 动态建立指向指针的一维数组
if (!scores) return -1;
for(int i=0;i<m;i++) { // 对于每个班级...
int n;
printf("\n请输入第%d个班级的学生人数(n): ",i+1);
scanf("%d",&n);
scores[i] = malloc(sizeof(float)*n); // 给当前班级分配足够的空间存放成绩
if(!scores[i]) return -1;
printf("请输入这%d位同学的成绩:\n",n);
for(int j=0;j<n;j++)
scanf("%f",(scores[i]+j));
}
// 计算并打印每个班级平均分
printf("\n各个班级平均分为:");
for(int k=0;k<m;k++) {
int count = 0;
double sum = 0.0;
while(*(scores[k]+count)!=NULL){
sum += *(scores[k]+count++);
}
printf("\n 第 %d 班 : %.2lf",k+1,sum/count);
}
// 清理动态分配的空间
for(int l=0;l<m;l++) free(scores[l]);
free(scores);
return 0;
}
```
注意此程序假设了合理范围内有效的非负整型输入以及浮点类型的正确数值作为成绩,未做额外的数据验证处理。
阅读全文
相关推荐


















