假设有若干学生,每个学生有3门功课,从键盘上输入学生有关信息(学号、姓名、成绩),并计算其平均成绩,将原有数据和平均分保存在磁盘文件record中。具体要求如下: 学生有关信息采用结构体类型存储。 fwrite()函数实现数据块输出到文件record。 结合循环结构实现数据输入和输出。
时间: 2024-02-15 22:03:47 浏览: 11
好的,这是一个关于文件操作和结构体的问题,我来给您解答。
首先,我们需要定义一个结构体类型来存储学生信息,包括学号、姓名、成绩和平均分:
```c
typedef struct {
int id; // 学号
char name[20]; // 姓名
float grade[3]; // 三门功课成绩
float avg; // 平均分
} Student;
```
接下来,我们需要实现数据的输入和计算平均分,然后将结果输出到文件中。代码如下:
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct {
int id;
char name[20];
float grade[3];
float avg;
} Student;
int main()
{
FILE *fp;
Student stu;
int n, i, j;
// 打开文件
fp = fopen("record", "wb");
if (fp == NULL) {
printf("打开文件失败!");
exit(1);
}
// 输入学生信息
printf("请输入学生人数:");
scanf("%d", &n);
for (i = 0; i < n; i++) {
printf("请输入第%d个学生的信息:\n", i + 1);
printf("学号:");
scanf("%d", &stu.id);
printf("姓名:");
scanf("%s", stu.name);
printf("成绩:");
for (j = 0; j < 3; j++) {
scanf("%f", &stu.grade[j]);
stu.avg += stu.grade[j];
}
stu.avg /= 3.0;
fwrite(&stu, sizeof(Student), 1, fp); // 将学生信息写入文件
}
// 关闭文件
fclose(fp);
return 0;
}
```
这段代码中,我们首先打开文件,然后输入学生信息,并计算平均分,将结果写入文件中。最后关闭文件,程序结束。
需要注意的是,我们使用了 fwrite() 函数将学生信息写入文件中,这个函数的第一个参数是要输出的数据的指针,第二个参数是数据块的大小,第三个参数是要输出的数据块的数量,第四个参数是文件指针。这个函数会将数据块输出到文件中,返回实际输出的数据块数量。
如果您需要读取文件中的学生信息,可以使用 fread() 函数,具体用法与 fwrite() 函数类似。