C++考试正在进行。请设计一个学生类student,学号、本次考试成绩是其私有数据成员,同时有一个计算本次考试平均成绩的友元函数 double average(student *p,int count) 以上类名和友元函数的形式,均须按照题目要求,不得修改。 输入是 学号([00001,99999])和成绩,以0结束。(不超过100个学生) 输出是平均成绩。 输入样例: 10001 90 10002 93 0 输出样例: 91.5
时间: 2023-11-27 13:51:57 浏览: 144
根据题目要求,可以设计如下的 C++ 代码实现:
```cpp
#include <iostream>
using namespace std;
class student {
private:
int id; // 学号
double score; // 本次考试成绩
public:
student(int i = 0, double s = 0) : id(i), score(s) {}
friend double average(student *p, int count); // 友元函数:计算平均成绩
};
double average(student *p, int count) {
double sum = 0;
for (int i = 0; i < count; i++) {
sum += (p + i)->score;
}
return sum / count;
}
int main() {
student s[100];
int id, i = 0;
double score;
while (cin >> id >> score && id != 0 && i < 100) {
s[i++] = student(id, score);
}
cout << average(s, i) << endl;
return 0;
}
```
代码分析:
- 首先定义了 `student` 类,包含学号和成绩两个私有数据成员,以及一个构造函数;
- 然后定义了友元函数 `average`,用于计算给定学生数组的平均成绩;
- 在 `main` 函数中,首先定义一个 `student` 类型的数组 `s`,用于保存输入的学生信息;
- 然后通过 `cin` 逐个读入学生的学号和成绩,直到读入的学号为 0 或数组已满为止;
- 最后调用 `average` 函数计算平均成绩,并输出结果。
需要注意的是,题目要求输入的学号在区间 `[00001,99999]` 内,而 C++ 中默认的整型数据类型是 `int`,不能存储前导零。因此,我们需要将学号设计为 `int` 类型,但输出时需要加上前导零。
阅读全文