假设有若干学生,每个学生有3门功课,从键盘上输入学生有关信息(学号、姓名、成绩),并计算其平均成绩,将原有数据和平均分保存在磁盘文件record中。具体要求如下: 学生有关信息采用结构体类型存储。 fwrite()函数实现数据块输出到文件record。 结合循环结构实现数据输入和输出。
时间: 2024-03-20 08:40:11 浏览: 82
好的,这是一个关于学生成绩管理的问题,下面是代码实现:
```c
#include <stdio.h>
#include <stdlib.h>
#define N 3 // 学科数
typedef struct {
int id; // 学号
char name[20]; // 姓名
float score[N]; // 成绩
} Student;
int main() {
FILE *fp; // 文件指针
Student stu;
int i, j;
float sum, avg;
fp = fopen("record", "wb"); // 以二进制方式打开文件
if (fp == NULL) {
printf("无法打开文件\n");
exit(1);
}
printf("请输入每个学生的信息:\n");
for (i = 0; i < N; i++) {
printf("学生 %d 的信息:\n", i + 1);
printf("学号:");
scanf("%d", &stu.id);
printf("姓名:");
scanf("%s", stu.name);
sum = 0;
for (j = 0; j < N; j++) {
printf("第 %d 门课成绩:", j + 1);
scanf("%f", &stu.score[j]);
sum += stu.score[j];
}
avg = sum / N;
fwrite(&stu, sizeof(stu), 1, fp); // 将结构体写入文件
fwrite(&avg, sizeof(avg), 1, fp); // 将平均分写入文件
}
fclose(fp); // 关闭文件
fp = fopen("record", "rb"); // 以二进制方式打开文件
if (fp == NULL) {
printf("无法打开文件\n");
exit(1);
}
printf("\n学生的信息和平均分如下:\n");
for (i = 0; i < N; i++) {
fread(&stu, sizeof(stu), 1, fp); // 从文件读取结构体
fread(&avg, sizeof(avg), 1, fp); // 从文件读取平均分
printf("学生 %d 的信息:\n", i + 1);
printf("学号:%d\n", stu.id);
printf("姓名:%s\n", stu.name);
for (j = 0; j < N; j++) {
printf("第 %d 门课成绩:%g\n", j + 1, stu.score[j]);
}
printf("平均分:%g\n", avg);
}
fclose(fp); // 关闭文件
return 0;
}
```
该程序使用结构体类型存储每个学生的信息,并使用 fwrite() 函数将其写入文件。同时,该程序也使用 fread() 函数从文件中读取数据。程序使用循环结构实现数据的输入和输出。
阅读全文