#include <stdio.h> void Array_InputCalculate(int *p, int m, int n); int main() { int *p = NULL, m, n; double aver; scanf("%d", &m); //输入学生数 scanf("%d", &n); //输入课程数 p = (int *)calloc(m*n, sizeof(int)); //向系统申请内存 if (p == NULL) /*确保指针使用前是非空指针,当p为空指针时结束程序运行*/ { printf("No enough memory!\n"); exit(1); } Array_InputCalculate(p, m, n); //学生成绩输入及统计输出 free(p); // 释放向系统申请的内存 return 0; } /* 请在这里填写答案 */
时间: 2024-03-20 21:39:34 浏览: 48
#include <stdio.h>
题目描述:
编写一个函数 `Array_InputCalculate`,用于输入学生的成绩,并统计每个学生的平均分和每门课程的平均分。
函数原型如下:
```
void Array_InputCalculate(int *p, int m, int n);
```
其中,`p` 是一个长度为 `m*n` 的一维数组,表示每个学生的每门课程的成绩,`m` 表示学生的数量,`n` 表示课程的数量。
函数实现:
```
void Array_InputCalculate(int *p, int m, int n) {
int sum_student[m]; // 每个学生的总分数
int sum_course[n]; // 每门课程的总分数
memset(sum_student, 0, sizeof(sum_student)); // 初始化为0
memset(sum_course, 0, sizeof(sum_course));
for (int i = 0; i < m; i++) { // 遍历每个学生
printf("Please input student %d's %d scores: ", i+1, n);
for (int j = 0; j < n; j++) { // 遍历每门课程
scanf("%d", p + i*n + j); // 输入成绩
sum_student[i] += *(p + i*n + j); // 累加每个学生的总分数
sum_course[j] += *(p + i*n + j); // 累加每门课程的总分数
}
}
printf("Each student's average score:\n");
for (int i = 0; i < m; i++) { // 遍历每个学生
double average = (double)sum_student[i] / n; // 计算每个学生的平均分
printf("Student %d's average score: %.2lf\n", i+1, average);
}
printf("Each course's average score:\n");
for (int j = 0; j < n; j++) { // 遍历每门课程
double average = (double)sum_course[j] / m; // 计算每门课程的平均分
printf("Course %d's average score: %.2lf\n", j+1, average);
}
}
```
使用方法:
1. 定义数组指针 `int *p = NULL;`;
2. 输入学生数 `m` 和课程数 `n`;
3. 分配数组内存 `p = (int *)calloc(m*n, sizeof(int));`;
4. 调用函数 `Array_InputCalculate(p, m, n);` 进行学生成绩输入和统计输出;
5. 释放数组内存 `free(p);`。
注意事项:
1. 由于内存申请使用了 `calloc`,所以无需手动将数组元素初始化为0;
2. 在统计每个学生的总分数和每门课程的总分数时,需要根据数组的一维索引进行计算,需要注意数组指针的使用;
3. 输出平均分时,需要注意使用 `double` 类型进行计算,保留2位小数可以使用格式化字符串 `"%.2lf"`。
阅读全文