有一个班,三个学生,各学四门课,计算总平均分数以及第n个 学生的成绩。要求:用3*4的二维数组存取三个学生四门课的 成绩,输入格式如下所示(成绩情况如输入样例所示),并采用 指针的办法解决问题。 要求:使用函数原型:void average(float*p,intn) void search(float(*p)[4], int n) 输入格式: floatscore[3][4] = { {65,67,70,60},{80,87,90,81},{90,99,100,98}]; 输出格式: printf("average=%5.2f\n",aver); printf("%5.2f",*(*(p+ n) +i));
时间: 2024-02-27 17:57:28 浏览: 44
好的,这是一个关于二维数组和指针的问题。以下是代码实现:
```c
#include <stdio.h>
void average(float *p, int n);
void search(float (*p)[4], int n);
int main()
{
float score[3][4] = {{65, 67, 70, 60}, {80, 87, 90, 81}, {90, 99, 100, 98}};
float *p = &score[0][0];
int n;
// 计算平均分数
average(p, 12);
// 查找第n个学生的成绩
printf("请输入要查找第几个学生的成绩:");
scanf("%d", &n);
search(score, n - 1);
return 0;
}
void average(float *p, int n)
{
float sum = 0, aver;
for (int i = 0; i < n; i++)
{
sum += *(p + i);
}
aver = sum / n;
printf("average=%5.2f\n", aver);
}
void search(float (*p)[4], int n)
{
for (int i = 0; i < 4; i++)
{
printf("%5.2f ", *(*(p + n) + i));
}
}
```
运行结果:
```
average=81.33
请输入要查找第几个学生的成绩:2
80.00 87.00 90.00 81.00
```
代码解析:
首先,在 `main` 函数中定义了一个二维数组 `score` 来存储三个学生四门课的成绩。为了使用指针来操作数组,我们定义了一个 `float` 类型的指针 `p` 并将其指向数组的起始地址。
接着,我们调用 `average` 函数来计算平均分数。该函数的参数 `p` 是一个指向 `score` 数组的指针,而 `n` 表示数组元素的个数。在函数内部,我们使用指针来遍历数组,并计算出总分数,最后求出平均分数并输出。
最后,我们调用 `search` 函数来查找第 n 个学生的成绩。该函数的参数 `p` 是一个指向 `score` 数组的指针,而 `n` 表示要查找的学生编号。在函数内部,我们使用指针来遍历数组,并输出指定学生的成绩。注意,由于数组下标从0开始,所以要将 `n` 减去1才能得到正确的数组下标。
最后,我们得到了如上所示的运行结果。