假设有若干学生,每个学生有3门功课,从键盘上输入学生有关信息(学号、姓名、成),并计算其平均成绩,将原有数据和平均分保存在磁盘文件record中。具体要求如下: ●学生有关信息采用结构体类型存储。 · fwrite()函数实现数据块输出到文件record。 •结合循环结构实现数据输入和输出。 丙个函数的作用如下: ·函数Input Info(STUa[], int n)对学生信息使用键盘进行输入。其中的参数为: • STU a[]:学生结构体数组,大小为N ,代表最大存储学生信息条数,这里给定N =10。 · int n:需要输入的学生信息条数,且n<=N。 ·函数Write Info(STUa[], int n)将读到学生信息结构体数组使用 fwrite( )函数写入到文件中。其中参数为: · STU a[]:已经保存有n个学生信息的学生结构体数组。 int n:输入的学生信息条数,且n<=N。
时间: 2024-01-21 16:16:59 浏览: 62
下面是一个实现上述要求的 C 代码:
```c
#include <stdio.h>
#define N 10
// 定义学生结构体类型
typedef struct {
int id;
char name[20];
float score[3];
float avg_score;
} STU;
// 从键盘输入学生信息
void InputInfo(STU a[], int n) {
for (int i = 0; i < n; i++) {
printf("请输入第%d个学生的学号、姓名、成绩(3门):\n", i+1);
scanf("%d %s %f %f %f", &(a[i].id), a[i].name, &(a[i].score[0]), &(a[i].score[1]), &(a[i].score[2]));
a[i].avg_score = (a[i].score[0] + a[i].score[1] + a[i].score[2]) / 3.0;
}
}
// 将学生信息写入文件
void WriteInfo(STU a[], int n) {
FILE *fp;
fp = fopen("record", "wb");
if (fp == NULL) {
printf("文件打开失败!\n");
return;
}
fwrite(a, sizeof(STU), n, fp);
fclose(fp);
}
int main() {
STU a[N];
int n;
printf("请输入学生信息条数:\n");
scanf("%d", &n);
InputInfo(a, n);
WriteInfo(a, n);
return 0;
}
```
该代码定义了一个 `STU` 结构体类型,其中包括学号、姓名、3门成绩和平均成绩。通过 `InputInfo` 函数从键盘输入学生信息,并计算平均成绩存储在结构体中。接着,通过 `WriteInfo` 函数将学生信息结构体数组写入文件 `record` 中。最后,在 `main` 函数中调用上述两个函数完成程序的功能。
阅读全文