(1)从键盘输入3个学生的学号、姓名和三门课成绩,然后计算每个学生的平均成绩。之后,将每个学生的结构体数据存放在二进制磁盘文件“ex805.dat”(与源文件“ex805.c”存放于同一个文件夹)中。 (2)读取二进制磁盘文件“ex805.dat”,然后输出到显示器。
时间: 2024-01-01 08:07:03 浏览: 39
好的,这是一个关于文件操作和结构体的问题,我会尽力解答。以下是代码示例:
```c
#include <stdio.h>
#include <stdlib.h>
#define NUM_STUDENTS 3
typedef struct {
int id;
char name[20];
int scores[3];
float average;
} Student;
int main() {
Student students[NUM_STUDENTS];
// 输入学生信息并计算平均成绩
for (int i = 0; i < NUM_STUDENTS; i++) {
printf("请输入第%d个学生的学号、姓名和三门课成绩(用空格隔开):", i+1);
scanf("%d %s %d %d %d", &students[i].id, students[i].name, &students[i].scores[0], &students[i].scores[1], &students[i].scores[2]);
// 计算平均成绩
students[i].average = (students[i].scores[0] + students[i].scores[1] + students[i].scores[2]) / 3.0;
}
// 将学生信息保存到二进制文件
FILE *fp;
if ((fp = fopen("ex805.dat", "wb")) == NULL) {
printf("无法创建文件!\n");
exit(1);
}
fwrite(students, sizeof(Student), NUM_STUDENTS, fp);
fclose(fp);
// 从二进制文件中读取学生信息并输出到屏幕上
if ((fp = fopen("ex805.dat", "rb")) == NULL) {
printf("无法打开文件!\n");
exit(1);
}
fread(students, sizeof(Student), NUM_STUDENTS, fp);
fclose(fp);
printf("\n学号\t姓名\t成绩1\t成绩2\t成绩3\t平均成绩\n");
for (int i = 0; i < NUM_STUDENTS; i++) {
printf("%d\t%s\t%d\t%d\t%d\t%.2f\n", students[i].id, students[i].name, students[i].scores[0], students[i].scores[1], students[i].scores[2], students[i].average);
}
return 0;
}
```
这个程序首先定义了一个结构体`Student`,包括学号、姓名、三门课成绩和平均成绩。然后在`main()`函数中,先输入学生信息并计算平均成绩,然后将学生信息保存到二进制文件`ex805.dat`中。
接下来,程序从二进制文件中读取学生信息,并输出到屏幕上。其中,`fread()`函数用于从二进制文件中读取数据,`fwrite()`函数用于将数据写入二进制文件中。
需要注意的是,二进制文件的读写方式应该分别为`rb`和`wb`,以保证正确的读写操作。同时,结构体的大小应该使用`sizeof(Student)`,而不是手动计算每个成员的大小。
希望这个程序可以帮到你,如有任何疑问,请随时提出。