本题要求实现一个函数,使用数组指针作函数参数,进行学生成绩的输入和统计输出。要求如下:输入m个学生(最多30人)n门课程(最多5门)的成绩,然后计算并打印每个学生各门课的总分和平均分。 函数接口定义: void Array_InputCalculate(int *p, int m, int n); 其中:p为指向学生成绩的数组指针,m和n依次是学生人数、课程数,其值分别由用户从键盘输入。 裁判测试程序样例: #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; } /* 请在这里填写答案 */ 输入格式: 学生个数m 课程数n 学生1课程1分数 学生1课程2分数 ... 学生1课程n分数 学生2课程1分数 学生2课程2分数 ... 学生2课程n分数 ... 学生m课程1分数 学生m课程2分数 ... 学生m课程n分数 输出格式: 每个学生总分(整数) 平均分(实数,保留1位小数) 输入样例: 2 3 61 62 70 75 82 90 输出样例: 193 64.3 247 82.3
时间: 2024-04-04 07:35:51 浏览: 141
根据题目要求,我们需要实现一个函数 `Array_InputCalculate` 来输入学生成绩并计算总分和平均分。函数接收三个参数,分别为指向学生成绩的数组指针 `p`,学生人数 `m`,课程数 `n`。
以下是实现代码:
```c++
void Array_InputCalculate(int *p, int m, int n) {
int i, j, sum;
double avg;
for (i = 0; i < m; i++) {
sum = 0;
printf("%d ", i+1); // 输出学生编号
for (j = 0; j < n; j++) {
scanf("%d", p + i * n + j); // 输入学生成绩
sum += *(p + i * n + j); // 累加学生总分
}
avg = (double) sum / n; // 计算学生平均分
printf("%d %.1lf\n", sum, avg); // 输出学生总分和平均分
}
}
```
在函数中,我们使用两个循环分别循环每个学生和每门课程。在循环每门课程时,我们使用指针 `p + i * n + j` 来访问每个学生每门课的成绩,其中 `i` 表示当前学生的编号,`j` 表示当前课程的编号。
在每个学生循环结束后,我们计算该学生的总分和平均分,并将结果输出到屏幕上,其中平均分保留一位小数。
在主函数中,我们首先根据用户输入的学生人数和课程数,使用 `calloc` 函数申请相应的内存空间,然后将申请到的指针作为参数调用 `Array_InputCalculate` 函数。
最后,我们需要释放向系统申请的内存空间,使用 `free` 函数即可。
完整代码如下:
阅读全文