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