有个学生,每个学生有3门课的成绩,从键盘输入 学生的信息(包括学号,姓名,三门课成绩),计算出平均成绩,将原有数据和计算出的平均分数存放在磁盘文件“studdat(二进制文件)中;再读盘并以表格形式在显示器上输出。
时间: 2024-01-03 17:04:02 浏览: 28
好的,这是一个稍微复杂一些的 C 语言编程问题。下面是实现代码:
```c
#include <stdio.h>
#include <string.h>
struct Student {
int id; // 学号
char name[20]; // 姓名
float scores[3]; // 三门课的成绩
float avgScore; // 平均成绩
};
int main() {
struct Student stu;
printf("请输入学生的信息:\n");
printf("学号:");
scanf("%d", &stu.id);
getchar(); // 读取输入缓冲区中的回车符
printf("姓名:");
fgets(stu.name, 20, stdin);
for (int i = 0; i < 3; i++) {
printf("第%d门课的成绩:", i + 1);
scanf("%f", &stu.scores[i]);
}
stu.avgScore = (stu.scores[0] + stu.scores[1] + stu.scores[2]) / 3.0; // 计算平均成绩
FILE *fp = fopen("studdat", "wb"); // 打开文件studdat以进行二进制写操作
if (fp == NULL) {
printf("无法打开文件!\n");
return 1;
}
fwrite(&stu, sizeof(stu), 1, fp); // 将结构体写入文件
fclose(fp); // 关闭文件
printf("学生信息已保存到文件studdat中。\n");
// 从文件中读取结构体并以表格形式输出
printf("\n学生信息表格:\n");
printf("学号\t姓名\t\t成绩1\t成绩2\t成绩3\t平均分\n");
fp = fopen("studdat", "rb"); // 以二进制读模式打开文件
if (fp == NULL) {
printf("无法打开文件!\n");
return 1;
}
while (fread(&stu, sizeof(stu), 1, fp)) { // 读取文件中的结构体
printf("%d\t%s", stu.id, stu.name);
for (int i = 0; i < 3; i++) {
printf("\t%.2f", stu.scores[i]);
}
printf("\t%.2f\n", stu.avgScore);
}
fclose(fp); // 关闭文件
return 0;
}
```
运行程序后,按照提示输入学生的信息,程序会将原有数据和计算出的平均分数存放在磁盘文件“studdat”中。然后程序会从文件中读取学生信息,并以表格形式在显示器上输出。