假设有若干学生,每个学生有3门功课,从键盘上输入学生有关信息(学号、姓名、成绩),并计算其平均成绩,将原有数据和平均分保存在磁盘文件record中。具体要求如下: 学生有关信息采用结构体类型存储。 fwrite()函数实现数据块输出到文件record。 结合循环结构实现数据输入和输出。 两个函数的作用如下: 函数Input_Info(STU a[], int n)对学生信息使用键盘进行输入。其中的参数为: STU a[]: 学生结构体数组,大小为N,代表最大存储学生信息条数,这里给定N = 10。 int n: 需要输入的学生信息条数,且n<=N。 函数Write_Info(STU a[], int n)将读到学生信息结构体数组使用fwrite()函数写入到文件中。其中参数为: STU a[]: 已经保存有n个学生信息的学生结构体数组。 int n: 输入的学生信息条数,且n<=N。 输入: 第一行为一个整数n,代表需要写入的学生信息条数。 第二行开始每一行输入一条学生信息。 输出: 平台会测试输出的文件,将写入的学生信息输出。
时间: 2024-03-20 10:40:13 浏览: 123
好的,这里是代码实现:
```c
#include <stdio.h>
#include <stdlib.h>
#define N 10 // 最大存储学生信息条数
#define M 3 // 学科数
typedef struct {
int id; // 学号
char name[20]; // 姓名
float score[M]; // 成绩
} STU;
void Input_Info(STU a[], int n) {
int i, j;
for (i = 0; i < n; i++) {
printf("请输入第 %d 个学生的信息:\n", i + 1);
printf("学号:");
scanf("%d", &a[i].id);
printf("姓名:");
scanf("%s", a[i].name);
for (j = 0; j < M; j++) {
printf("第 %d 门课成绩:", j + 1);
scanf("%f", &a[i].score[j]);
}
}
}
void Write_Info(STU a[], int n) {
FILE *fp = fopen("record", "wb"); // 以二进制方式打开文件
if (fp == NULL) {
printf("无法打开文件\n");
exit(1);
}
int i, j;
float sum, avg;
for (i = 0; i < n; i++) {
sum = 0;
for (j = 0; j < M; j++) {
sum += a[i].score[j];
}
avg = sum / M;
fwrite(&a[i], sizeof(STU), 1, fp); // 将结构体写入文件
fwrite(&avg, sizeof(avg), 1, fp); // 将平均分写入文件
}
fclose(fp); // 关闭文件
}
int main() {
int n, i, j;
printf("请输入需要输入的学生信息条数(不超过 %d):", N);
scanf("%d", &n);
STU a[n];
Input_Info(a, n); // 输入学生信息
Write_Info(a, n); // 将学生信息写入文件
FILE *fp = fopen("record", "rb"); // 以二进制方式打开文件
if (fp == NULL) {
printf("无法打开文件\n");
exit(1);
}
printf("\n学生的信息和平均分如下:\n");
for (i = 0; i < n; i++) {
STU stu;
float avg;
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 < M; j++) {
printf("第 %d 门课成绩:%g\n", j + 1, stu.score[j]);
}
printf("平均分:%g\n", avg);
}
fclose(fp); // 关闭文件
return 0;
}
```
该程序使用结构体类型存储每个学生的信息,并使用 fwrite() 函数将其写入文件。程序使用函数 Input_Info() 实现从键盘输入学生信息,使用函数 Write_Info() 实现将学生信息写入文件。同时,该程序也使用 fread() 函数从文件中读取数据。
阅读全文