C语言优先使用指针,学生成绩统计,某班有N(N<=30)个学生,共开设5门课程,按要求完成以下三个功能。输入要求如下:第一行为一个整数N,表示本班共N个人,接下来的N行中每行包含一个学生的信息,包括学号、课程1成绩、课程2成绩、课程3成绩、课程4成绩、课程5成绩,要求成绩保存在成绩数组,学号保存在学号数组。 (1)实现函数float AverCourse(int *pscore,int n,int m),求第m门课程的平均分,参数说明:pscore 是指向二维数组的列指针,参数m 表示该函数需要计算第n门课程的均分,参数m表示学生的人数,该函数的返回值为第m门课程的均分,要求保留2位小数。
时间: 2024-03-12 17:50:21 浏览: 128
好的,我可以帮您解答这个问题。
首先,根据输入要求,我们需要定义两个数组:一个是存储学号的数组,一个是存储成绩的二维数组。我们可以使用以下代码进行定义:
```c
#define MAXN 30
#define MAXM 5
int score[MAXN][MAXM]; // 存储成绩的二维数组
int stu_num[MAXN]; // 存储学号的数组
```
接下来,我们需要编写一个函数 `AverCourse` 来求第 `m` 门课程的平均分。该函数的参数包括一个指向二维数组的列指针 `pscore`,参数 `n` 表示该函数需要计算第 `n` 门课程的均分,参数 `m` 表示学生的人数。该函数的返回值为第 `n` 门课程的均分,要求保留2位小数。
函数的实现如下:
```c
float AverCourse(int *pscore,int n,int m)
{
float sum = 0; // 用于存储成绩总和
for(int i = 0; i < m; i++) {
sum += *(pscore + i * MAXM + n - 1); // 求和
}
return sum / m; // 求平均分并返回
}
```
在这个函数中,我们首先定义了一个变量 `sum` 来存储成绩总和。接着,我们使用一个循环来遍历整个成绩数组,计算每个学生在第 `n` 门课程上的成绩,并将其加入到 `sum` 中。最后,我们将 `sum` 除以学生人数 `m`,求得第 `n` 门课程的平均分,并返回该值。
接下来,我们可以在主函数中调用 `AverCourse` 函数来计算每门课程的平均分。例如,要计算第2门课程的平均分,可以使用以下代码:
```c
float avg = AverCourse((int*)score, 2, n);
printf("第2门课程的平均分为:%.2f\n", avg);
```
在这个代码中,我们将 `score` 数组强制转换成一个 `int` 类型的指针,并将其作为参数传递给 `AverCourse` 函数。参数 `2` 表示我们需要计算第2门课程的平均分,参数 `n` 表示学生人数。最后,我们打印出计算结果。
完整的代码如下:
阅读全文