编写程序,从键盘输入5个学生的学生信息,包括学号、姓名、3门课程的成绩,计算3门课的平均成绩,将全部信息以二进制方式保存到文件中。c++
时间: 2023-06-13 21:07:43 浏览: 141
c代码-输入5名学生的分数,并显示出他们的总分和平均分。
以下是一个示例程序,可以实现你所需的功能:
```c++
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
struct Student {
int id;
string name;
double score[3];
double avgScore;
};
int main() {
Student students[5];
for (int i = 0; i < 5; i++) {
cout << "请输入第" << i + 1 << "个学生的信息:" << endl;
cout << "学号:";
cin >> students[i].id;
cout << "姓名:";
cin >> students[i].name;
cout << "成绩1:";
cin >> students[i].score[0];
cout << "成绩2:";
cin >> students[i].score[1];
cout << "成绩3:";
cin >> students[i].score[2];
students[i].avgScore = (students[i].score[0] + students[i].score[1] + students[i].score[2]) / 3.0;
}
ofstream ofs("students.bin", ios::binary);
for (int i = 0; i < 5; i++) {
ofs.write(reinterpret_cast<char*>(&students[i]), sizeof(Student));
}
ofs.close();
return 0;
}
```
上述程序首先定义了一个 `Student` 结构体,包含学号、姓名、3门课程的成绩和平均成绩等信息。接下来在 `main` 函数中,定义了一个长度为5的 `Student` 数组,循环读取每个学生的信息,计算其平均成绩,然后将全部信息以二进制方式保存到文件 `students.bin` 中。
注意到文件输出流的类型是 `ofstream`,并且在打开文件时指定了 `ios::binary` 标志,这样就可以以二进制方式写入文件了。在循环中,使用 `ofs.write` 函数将每个学生的信息写入文件中。
如果需要读取保存的学生信息,可以使用类似以下的程序:
```c++
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
struct Student {
int id;
string name;
double score[3];
double avgScore;
};
int main() {
Student students[5];
ifstream ifs("students.bin", ios::binary);
for (int i = 0; i < 5; i++) {
ifs.read(reinterpret_cast<char*>(&students[i]), sizeof(Student));
}
ifs.close();
for (int i = 0; i < 5; i++) {
cout << "学号:" << students[i].id << endl;
cout << "姓名:" << students[i].name << endl;
cout << "成绩1:" << students[i].score[0] << endl;
cout << "成绩2:" << students[i].score[1] << endl;
cout << "成绩3:" << students[i].score[2] << endl;
cout << "平均成绩:" << students[i].avgScore << endl;
}
return 0;
}
```
这里定义了与写入程序相同的结构体 `Student`,然后使用 `ifstream` 从文件 `students.bin` 中读取每个学生的信息,并将其存储到 `students` 数组中。最后循环输出每个学生的信息。
需要注意的是,这里同样需要使用 `ios::binary` 标志来指定以二进制方式读入文件。同时,读取文件时使用的函数是 `ifs.read`,它与写入时使用的 `ofs.write` 相对应。
阅读全文