要求在编程过程中用指针的方法引用数组元素 有一个班级的一次考试,5个学生,3门课程。编程完成以下功能: ① 求每个学生的各科的平均分; ② 输出学生各科平均分在90分以上的学生的学号。 ③ 将每个学生平均分按从高到低输出
时间: 2024-02-03 21:14:12 浏览: 54
下面是一个使用指针引用数组元素的示例代码,实现上述功能:
```c
#include <stdio.h>
#define N 5 // 学生数
#define M 3 // 课程数
void average(float *p, int n, float *ave) {
// 计算一个学生的平均分
float sum = 0;
for (int i = 0; i < n; i++) {
sum += *(p + i);
}
*ave = sum / n;
}
int main() {
float score[N][M]; // 分数数组
float ave[N]; // 平均分数组
float *p; // 指向分数数组的指针
// 输入分数
printf("请输入%d个学生的%d门课的分数:\n", N, M);
for (int i = 0; i < N; i++) {
p = *(score + i);
printf("第%d个学生:", i + 1);
for (int j = 0; j < M; j++) {
scanf("%f", p + j);
}
average(p, M, ave + i); // 计算平均分
}
// 输出平均分
printf("各学生的平均分:\n");
for (int i = 0; i < N; i++) {
printf("第%d个学生的平均分:%.2f\n", i + 1, *(ave + i));
}
// 输出平均分在90分以上的学生的学号
printf("平均分在90分以上的学生的学号:\n");
for (int i = 0; i < N; i++) {
if (*(ave + i) >= 90) {
printf("%d ", i + 1);
}
}
printf("\n");
// 将平均分按从高到低输出
for (int i = 0; i < N; i++) {
for (int j = i + 1; j < N; j++) {
if (*(ave + i) < *(ave + j)) {
// 交换平均分和分数数组中的元素
float temp = *(ave + i);
*(ave + i) = *(ave + j);
*(ave + j) = temp;
p = *(score + i);
*(score + i) = *(score + j);
*(score + j) = p;
}
}
}
printf("按平均分从高到低排序后的学生信息:\n");
for (int i = 0; i < N; i++) {
printf("第%d个学生:平均分=%.2f,各科分数:", i + 1, *(ave + i));
p = *(score + i);
for (int j = 0; j < M; j++) {
printf("%.2f ", *(p + j));
}
printf("\n");
}
return 0;
}
```
这里使用了一个 `average` 函数来计算一个学生的平均分,它接受一个指向分数数组的指针和一个指向平均分数组中对应元素的指针,并将计算结果写入后者。在 `main` 函数中,首先输入分数并计算每个学生的平均分,然后输出平均分和平均分在90分以上的学生的学号,最后按平均分从高到低排序并输出。
阅读全文