C语言:本题要求使用数组指针作函数参数,进行学生成绩统计。要求如下: 输入m个学生(最多30人)n门课程(最多5门)的成绩,然后计算并打印每个学生各门课的总分和平均分。其中,m和n的值由用户从键盘输入。 输入格式: 学生个数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
时间: 2023-07-12 14:59:57 浏览: 324
好的,这是一道关于C语言数组指针的题目。下面是代码实现:
```c
#include <stdio.h>
void calc(int m, int n, int (*score)[5]) {
int i, j, sum;
for (i = 0; i < m; i++) {
sum = 0;
for (j = 0; j < n; j++) {
sum += score[i][j];
}
printf("%d %.1f\n", sum, (float)sum / n);
}
}
int main() {
int m, n, i, j;
int score[30][5];
scanf("%d%d", &m, &n);
for (i = 0; i < m; i++) {
for (j = 0; j < n; j++) {
scanf("%d", &score[i][j]);
}
}
calc(m, n, score);
return 0;
}
```
首先,在 `main` 函数中,我们定义了一个二维数组 `score` 来存储学生成绩,数组的第一维表示学生的编号,第二维表示课程的编号,即 `score[i][j]` 表示第 `i` 个学生的第 `j` 门课的成绩。
然后,我们通过 `scanf` 语句从标准输入中读入学生个数 `m` 和课程数 `n`,再通过两个嵌套的 `for` 循环读入所有学生的成绩。
最后,我们调用 `calc` 函数,将 `score` 数组的地址作为参数传递给它。在 `calc` 函数中,我们使用两个嵌套的 `for` 循环,计算每个学生的总分和平均分,并使用 `printf` 函数输出结果。
需要注意的是,在 `calc` 函数中,我们使用了数组指针 `int (*score)[5]` 作为参数。这里的 `(*score)` 表示一个指向整型数组的指针,而 `(*score)[5]` 则表示一个有 5 个元素的整型数组。因此,`int (*score)[5]` 表示一个指向由 5 个整型数组成的数组的指针,即一个二维数组的指针。这样定义的数组指针可以方便地访问二维数组中的元素。
阅读全文