设计一个学生结构体类型student,包括学生学号no,姓名name,成绩cj(三门课),求5个学生每个学生的平均成绩,输出原有数据和计算出的平均分数,同时存放到磁盘文件stud.dat中。
时间: 2024-01-02 15:02:33 浏览: 40
好的,以下是代码实现:
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct {
int no;
char name[20];
float cj[3];
float avg;
} student;
int main() {
student s[5];
FILE *fp;
fp = fopen("stud.dat", "wb");
if (fp == NULL) {
printf("Failed to open file!\n");
exit(1);
}
for (int i = 0; i < 5; i++) {
printf("请输入第 %d 个学生的学号、姓名和成绩(3门):", i + 1);
scanf("%d %s %f %f %f", &s[i].no, s[i].name, &s[i].cj[0], &s[i].cj[1], &s[i].cj[2]);
s[i].avg = (s[i].cj[0] + s[i].cj[1] + s[i].cj[2]) / 3;
fwrite(&s[i], sizeof(student), 1, fp);
}
fclose(fp);
fp = fopen("stud.dat", "rb");
if (fp == NULL) {
printf("Failed to open file!\n");
exit(1);
}
printf("\n学号\t姓名\t成绩1\t成绩2\t成绩3\t平均成绩\n");
for (int i = 0; i < 5; i++) {
fread(&s[i], sizeof(student), 1, fp);
printf("%d\t%s\t%.1f\t%.1f\t%.1f\t%.1f\n", s[i].no, s[i].name, s[i].cj[0], s[i].cj[1], s[i].cj[2], s[i].avg);
}
fclose(fp);
return 0;
}
```
这段代码定义了一个结构体类型 `student`,包括学生学号 `no`、姓名 `name`、成绩 `cj`(三门课)和平均成绩 `avg`。程序首先打开一个二进制文件 `stud.dat`,然后让用户输入5个学生的信息,并将每个学生的信息写入文件。接着程序重新打开文件,读取文件中的学生信息,并计算每个学生的平均成绩,最后输出每个学生的信息和平均成绩。