编写程序,从键盘输入5个学生的学生信息,包括学号、姓名、3门课程的成绩,计算3门课的平均成绩,将全部信息以二进制方式保存到文件中。用c++的程序编写
时间: 2023-09-05 13:05:22 浏览: 355
### 回答1:
以下是一个实现上述功能的C++程序,其中使用了结构体来存储学生信息和成绩:
```c++
#include <iostream>
#include <fstream>
using namespace std;
struct Student {
int id;
string name;
double score[3];
};
int main() {
Student stu[5];
// 从键盘输入5个学生信息
for (int i = 0; i < 5; i++) {
cout << "请输入第" << i+1 << "个学生的学号:";
cin >> stu[i].id;
cout << "请输入第" << i+1 << "个学生的姓名:";
cin >> stu[i].name;
cout << "请输入第" << i+1 << "个学生的3门课程成绩:" << endl;
for (int j = 0; j < 3; j++) {
cout << "第" << j+1 << "门课程成绩:";
cin >> stu[i].score[j];
}
}
// 计算每个学生的3门课程平均成绩
for (int i = 0; i < 5; i++) {
double sum = 0;
for (int j = 0; j < 3; j++) {
sum += stu[i].score[j];
}
double avg = sum / 3;
cout << "学生" << stu[i].name << "的平均成绩为:" << avg << endl;
}
// 将全部信息以二进制方式保存到文件中
ofstream outfile("student.dat", ios::binary);
if (!outfile) {
cout << "文件打开失败!" << endl;
return 0;
}
for (int i = 0; i < 5; i++) {
outfile.write((char*)&stu[i], sizeof(stu[i]));
}
outfile.close();
return 0;
}
```
该程序首先定义了一个结构体`Student`,其中包含了学号、姓名和3门课程的成绩。在主函数中,程序先从键盘输入5个学生的信息,并计算每个学生的3门课程平均成绩。接着,程序将全部信息以二进制方式保存到文件`student.dat`中。
在保存数据时,程序使用了`ofstream`流,并指定了`ios::binary`参数,表示以二进制方式写入数据。`outfile.write((char*)&stu[i], sizeof(stu[i]))`用于将第i个学生的信息以二进制方式写入文件中。在读取数据时,程序需要使用相应的`ifstream`流,并将数据读入到与结构体相同的变量中。
注意,在使用二进制方式读写数据时,需要考虑数据在内存中的存储方式和字节序等问题,否则可能导致数据读写出错。
### 回答2:
下面是一个用C语言编写的程序,可以实现从键盘输入5个学生的学生信息,包括学号、姓名和3门课程的成绩,并计算3门课的平均成绩。然后将全部信息以二进制方式保存到文件中。
```c
#include <stdio.h>
struct Student {
int id;
char name[20];
float scores[3];
};
int main() {
struct Student students[5];
FILE *fp;
// 从键盘输入学生信息
for (int i = 0; i < 5; i++) {
printf("请输入第%d个学生的学号:", i + 1);
scanf("%d", &students[i].id);
printf("请输入第%d个学生的姓名:", i + 1);
scanf("%s", students[i].name);
printf("请输入第%d个学生的3门课程成绩:", i + 1);
for (int j = 0; j < 3; j++) {
scanf("%f", &students[i].scores[j]);
}
}
// 计算平均成绩并保存到文件
fp = fopen("students_info.dat", "wb");
if (fp == NULL) {
printf("文件打开失败!");
return 1;
}
for (int i = 0; i < 5; i++) {
float average = 0.0;
for (int j = 0; j < 3; j++) {
average += students[i].scores[j];
}
average /= 3;
fwrite(&students[i], sizeof(struct Student), 1, fp);
fwrite(&average, sizeof(float), 1, fp);
}
fclose(fp);
return 0;
}
```
这个程序使用了一个结构体`Student`,它包含学号、姓名和3门课程的成绩。程序先从键盘输入5个学生的信息,然后计算每个学生的平均成绩,并将所有学生的信息以二进制方式保存到名为`students_info.dat`的文件中。
请注意,这只是一个简单的实现示例,实际应用中可能需要更多的错误处理和数据验证逻辑。
### 回答3:
下面是一个用C语言编写的程序,用于从键盘输入5个学生的学生信息,包括学号、姓名、3门课程的成绩,计算3门课的平均成绩,并将全部信息以二进制方式保存到文件中。
```c
#include <stdio.h>
struct Student {
int id;
char name[50];
float score1;
float score2;
float score3;
};
int main() {
struct Student students[5];
FILE *file;
int i;
// 输入学生信息
printf("请输入5个学生的信息:\n");
for (i = 0; i < 5; i++) {
printf("学生 %d 的学号:", i + 1);
scanf("%d", &students[i].id);
printf("学生 %d 的姓名:", i + 1);
scanf("%s", students[i].name);
printf("学生 %d 的三门课程成绩:\n", i + 1);
printf("第一门课程成绩:");
scanf("%f", &students[i].score1);
printf("第二门课程成绩:");
scanf("%f", &students[i].score2);
printf("第三门课程成绩:");
scanf("%f", &students[i].score3);
}
// 计算平均成绩并保存到文件
file = fopen("students.dat", "wb");
for (i = 0; i < 5; i++) {
float average = (students[i].score1 + students[i].score2 + students[i].score3) / 3;
fwrite(&students[i], sizeof(struct Student), 1, file);
fwrite(&average, sizeof(float), 1, file);
}
fclose(file);
return 0;
}
```
这个程序首先定义了一个`Student`结构体,用于保存学生的学号、姓名和三门课程的成绩。然后创建一个`students`数组,用于保存5个学生的信息。程序使用循环从键盘输入学生的信息,并使用`scanf`函数将输入的数据存储到相应的结构体成员中。
接下来,程序打开一个二进制文件`students.dat`,使用循环计算每个学生的平均成绩,并将学生信息和平均成绩一起使用`fwrite`函数以二进制方式写入文件。最后,程序关闭文件并结束运行。
你可以运行这个程序并查看生成的`students.dat`文件,它将以二进制方式保存所有学生的信息。
阅读全文