建立一个cpp程序,利用指针的知识,完成输入N个学生的M门课程成绩,然后统计各门课的最高分、平均分。
时间: 2024-06-10 12:09:54 浏览: 12
以下是一个实现该功能的C++程序:
```cpp
#include <iostream>
using namespace std;
int main() {
int n, m;
cout << "请输入学生数和课程数:";
cin >> n >> m;
int** scores = new int*[n];
for (int i = 0; i < n; i++) {
scores[i] = new int[m];
}
for (int i = 0; i < n; i++) {
cout << "请输入第" << i+1 << "个学生的" << m << "门课程成绩:";
for (int j = 0; j < m; j++) {
cin >> *(scores[i]+j);
}
}
int* max_scores = new int[m];
for (int j = 0; j < m; j++) {
int max_score = *(*(scores)+j);
for (int i = 1; i < n; i++) {
if (*(*(scores+i)+j) > max_score) {
max_score = *(*(scores+i)+j);
}
}
*(max_scores+j) = max_score;
}
double* avg_scores = new double[m];
for (int j = 0; j < m; j++) {
int sum_score = 0;
for (int i = 0; i < n; i++) {
sum_score += *(*(scores+i)+j);
}
*(avg_scores+j) = (double)sum_score / n;
}
cout << "各门课的最高分和平均分如下:" << endl;
for (int j = 0; j < m; j++) {
cout << "第" << j+1 << "门课的最高分为:" << *(max_scores+j) << endl;
cout << "第" << j+1 << "门课的平均分为:" << *(avg_scores+j) << endl;
}
for (int i = 0; i < n; i++) {
delete[] scores[i];
}
delete[] scores;
delete[] max_scores;
delete[] avg_scores;
return 0;
}
```
程序首先读取学生数和课程数,然后动态分配二维数组来存储每个学生的每门课的成绩。接着,程序使用另外两个一维数组来逐一统计各门课的最高分和平均分。最后,程序输出最高分和平均分的统计结果,并释放动态分配的内存。
在程序中,我们使用了双重指针来表示二维数组,并使用指针算术运算来访问数组元素。这种方法可以避免在函数调用中传递大量的数组拷贝,从而提高程序的效率。