C语言有N个学生,每个学生有3门课的成绩,从键盘输入学生的信息(包括学号,姓名,三门课成绩),计算出平均成绩,将原有数据和计算出的平均分数存放在磁盘文件“stud.dat”(二进制文件)中;再读盘并以表格形式在显示器上输出。
时间: 2024-01-02 11:02:48 浏览: 103
好的,这是一道关于文件操作和数据处理的C语言编程题目。我可以给你提供一种解决方案,你可以参考一下:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define N 3
#define M 10
typedef struct student {
int id;
char name[M];
float score[N];
float avg;
} Student;
int main() {
FILE *fp;
Student stu;
int i, j;
float sum;
// 从键盘输入学生信息
for (i = 0; i < 3; i++) {
printf("Please input student's id, name and %d scores:\n", N);
scanf("%d%s", &stu.id, stu.name);
sum = 0;
for (j = 0; j < N; j++) {
scanf("%f", &stu.score[j]);
sum += stu.score[j];
}
stu.avg = sum / N;
// 写入文件
fp = fopen("stud.dat", "ab");
if (fp == NULL) {
printf("Cannot open file!\n");
exit(1);
}
fwrite(&stu, sizeof(Student), 1, fp);
fclose(fp);
}
// 从文件中读取数据并输出
printf("\n%-10s%-10s%-10s%-10s%-10s%-10s\n", "ID", "Name", "Score1", "Score2", "Score3", "Average");
fp = fopen("stud.dat", "rb");
if (fp == NULL) {
printf("Cannot open file!\n");
exit(1);
}
while (fread(&stu, sizeof(Student), 1, fp) == 1) {
printf("%-10d%-10s", stu.id, stu.name);
for (i = 0; i < N; i++) {
printf("%-10.2f", stu.score[i]);
}
printf("%-10.2f\n", stu.avg);
}
fclose(fp);
return 0;
}
```
这个程序首先定义了一个结构体`Student`来存储学生信息,包括学号、姓名、三门成绩和平均分数。然后从键盘输入学生信息,计算平均分数,再将数据写入到文件“stud.dat”中。接着从文件中读取数据,并以表格形式输出到屏幕上。
需要注意的是,写入文件时应以二进制方式打开文件,使用`fwrite`函数写入数据;读取文件时也应以二进制方式打开文件,使用`fread`函数读取数据。
希望这个程序能够帮到你,如果你还有问题可以继续问我。
阅读全文