假设有若干学生,每个学生有3门功课,从键盘上输入学生有关信息(学号、姓名、成绩),并计算其平均成绩,将原有数据和平均分保存在磁盘文件record中。具体要求如下: 学生有关信息采用结构体类型存储。 fwrite()函数实现数据块输出到文件record。 结合循环结构实现数据输入和输出。
时间: 2024-01-21 11:17:52 浏览: 15
代码如下:
```c
#include <stdio.h>
struct student {
int id; // 学号
char name[20]; // 姓名
float score[3]; // 成绩数组
float avg_score; // 平均成绩
};
int main() {
struct student stu[100]; // 最多存储100个学生信息
int n; // 学生数量
printf("请输入学生数量:");
scanf("%d", &n);
for (int i = 0; i < n; i++) {
printf("请输入第%d个学生的学号、姓名和3门功课成绩:\n", i + 1);
scanf("%d %s %f %f %f", &stu[i].id, stu[i].name, &stu[i].score[0], &stu[i].score[1], &stu[i].score[2]);
stu[i].avg_score = (stu[i].score[0] + stu[i].score[1] + stu[i].score[2]) / 3.0;
}
FILE *fp;
fp = fopen("record", "wb");
if (fp == NULL) {
printf("文件打开失败!\n");
return 0;
}
fwrite(stu, sizeof(struct student), n, fp);
fclose(fp);
printf("学生信息已保存至文件record中!\n");
return 0;
}
```
这段代码首先定义了一个结构体类型`student`,包含学号、姓名、成绩和平均分。然后通过循环结构输入每个学生的信息,并计算平均分。最后通过`fwrite()`函数将所有学生的信息写入文件中。注意,写入文件时使用了二进制模式("wb"),并且写入的数据块大小为结构体大小,写入的数量为学生数量。