用C语言完成本关任务:假设有若干学生,每个学生有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。
时间: 2024-03-17 18:40:53 浏览: 166
好的,下面是代码实现:
```c
#include <stdio.h>
#define N 10 // 学生信息最大存储条数
typedef struct {
int id; // 学号
char name[20]; // 姓名
float score[3]; // 3门功课成绩
float avg_score; // 平均成绩
} STU;
// 函数声明
void Input_Info(STU a[], int n);
void Write_Info(STU a[], int n);
int main() {
STU students[N];
int n; // 需要输入的学生信息条数
printf("请输入学生信息条数(不超过%d):", N);
scanf("%d", &n);
// 输入学生信息
Input_Info(students, n);
// 将学生信息写入文件
Write_Info(students, n);
return 0;
}
// 输入学生信息函数
void Input_Info(STU a[], int n) {
int i, j;
printf("请输入%d个学生信息:\n", n);
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 < 3; j++) {
printf("第%d门课成绩:", j+1);
scanf("%f", &a[i].score[j]);
a[i].avg_score += a[i].score[j];
}
a[i].avg_score /= 3;
}
}
// 将学生信息写入文件函数
void Write_Info(STU a[], int n) {
int i;
FILE *fp;
if ((fp = fopen("record", "wb")) == NULL) {
printf("打开文件失败!\n");
return;
}
for (i = 0; i < n; i++) {
fwrite(&a[i], sizeof(STU), 1, fp);
}
fclose(fp);
}
```
输入完毕后,程序会将学生信息写入到文件 record 中,每个学生信息大小为 sizeof(STU),写入次数为学生信息条数 n。
阅读全文