某班需要从磁盘文件1.txt中读入若干同学的《面向对象程序设计》成绩求平均值,并把平均值输出到屏幕上。现在要求用c++设计一个File类完成此项工作。
时间: 2024-03-22 20:41:20 浏览: 76
【面向对象的程序设计c++】对给定的两名学生的各三门成绩,输出所有成绩的最高分和最低分,并输出每个学生的平均分。
5星 · 资源好评率100%
好的,根据您的要求,可以设计如下的File类:
```c++
#include <iostream>
#include <fstream>
#include <vector>
#include <string>
#include <iomanip>
using namespace std;
class File {
public:
File(string filename): filename_(filename) {}
vector<double> read_scores() {
vector<double> scores;
ifstream infile(filename_);
if (infile.fail()) {
cerr << "Error: Cannot open file " << filename_ << endl;
return scores;
}
double score;
while (infile >> score) {
scores.push_back(score);
}
infile.close();
return scores;
}
double calculate_average() {
vector<double> scores = read_scores();
if (scores.empty()) {
return 0;
}
double sum = 0;
for (double score : scores) {
sum += score;
}
double avg = sum / scores.size();
return avg;
}
private:
string filename_;
};
int main() {
File f("1.txt");
double avg = f.calculate_average();
cout << "The average score is: " << fixed << setprecision(2) << avg << endl;
return 0;
}
```
其中,构造函数`File(string filename)`接受一个文件名参数,并将其保存在类的私有成员变量`filename_`中。`read_scores()`方法用于从文件中读入成绩,处理过程中可能会出现文件打开失败的情况,因此在函数中进行了异常处理。`calculate_average()`方法利用`read_scores()`方法获取成绩,计算平均值并返回。在`main()`函数中,创建一个`File`对象,并调用`calculate_average()`方法计算平均值,最后输出到屏幕上。
使用示例:
假设成绩文件`1.txt`中的内容如下:
```
90.5
85.0
92.5
88.0
```
则程序的输出结果为:
```
The average score is: 89.50
```
其中,最后输出的平均值保留两位小数,可以根据需要进行修改。
阅读全文