本关任务:利用动态内存分配重新编写课堂练习8-1(习题6.5修改版),要求能处理任意人数的成绩,总人数由用户输入,然后对应数量的成绩,最后根据根据输入的号码(注意最小号码是1)输出对应学生的成绩,当输入号码不合法时,输出Error。 例如:输入人数10,再输入十个成绩78 86.5 65 99 91 77.5 56 72 84 88,再输入号码4,输出99。 注意:记得释放动态分配的内存。
时间: 2024-03-25 19:41:27 浏览: 29
好的,这是一道比较典型的动态内存分配的练习题。以下是一种可能的实现方式:
```c++
#include <iostream>
using namespace std;
int main() {
int n; // 总人数
cout << "请输入总人数:";
cin >> n;
// 动态分配内存
double *scores = new double[n];
// 输入成绩
cout << "请输入" << n << "个成绩:";
for (int i = 0; i < n; i++) {
cin >> scores[i];
}
// 输入要查询的学生号码
int id;
cout << "请输入要查询的学生号码:";
cin >> id;
// 输出对应学生的成绩
if (id >= 1 && id <= n) {
cout << scores[id - 1] << endl;
} else {
cout << "Error" << endl;
}
// 释放动态分配的内存
delete[] scores;
return 0;
}
```
这段代码首先读入总人数,然后利用 `new` 运算符动态分配一个长度为 `n` 的双精度浮点数数组 `scores`,用来存储成绩。然后利用 `for` 循环读入每个学生的成绩。之后读入要查询的学生号码,如果号码合法,则输出对应学生的成绩,否则输出 `Error`。最后,记得用 `delete[]` 运算符释放动态分配的内存。
需要注意的一些细节:
- 动态分配内存后要记得释放,否则会造成内存泄漏。
- 数组下标从0开始,但题目中要求从1开始编号,需要做一些转换。
- 输入输出时需要注意空格和换行符的处理。