假设有若干学生,每个学生有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-10 17:44:59 浏览: 96
好的,让我解释一下这个问题的要求。这个问题要求你编写一个程序,可以从键盘上输入学生的学号、姓名和三门功课的成绩,然后计算每个学生的平均成绩,并将这些信息保存到一个文件中。具体的要求如下:
1. 定义一个结构体类型STU,用来存储一个学生的信息。这个结构体包含三个成员变量:学号、姓名和三门功课的成绩。
2. 编写一个函数Input_Info,用来从键盘上输入学生的信息。这个函数接受两个参数:一个是学生结构体数组a,另一个是需要输入的学生信息条数n。
3. 编写一个函数Write_Info,用来将学生的信息写入文件。这个函数接受两个参数:一个是保存有n个学生信息的学生结构体数组a,另一个是输入的学生信息条数n。你需要使用fwrite()函数将这些信息写入文件中。
4. 在主函数中,先调用Input_Info函数输入学生信息,然后计算每个学生的平均成绩,并将学生信息和平均成绩保存到一个结构体数组中。最后调用Write_Info函数将这些信息写入文件中。
下面是一个示例代码,你可以参考一下:
```
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define N 10
typedef struct {
char id[10];
char name[20];
float score[3];
float avg;
} STU;
void Input_Info(STU a[], int n);
void Write_Info(STU a[], int n);
int main() {
STU a[N];
int n, i, j;
printf("请输入学生信息数:");
scanf("%d", &n);
if (n > N) {
printf("学生信息数不能超过%d条!\n", N);
return 1;
}
Input_Info(a, n);
for (i = 0; i < n; i++) {
a[i].avg = 0;
for (j = 0; j < 3; j++) {
a[i].avg += a[i].score[j];
}
a[i].avg /= 3;
}
Write_Info(a, n);
printf("学生信息已保存到record文件中!\n");
return 0;
}
void Input_Info(STU a[], int n) {
int i, j;
for (i = 0; i < n; i++) {
printf("请输入第%d个学生的学号、姓名和三门功课的成绩:\n", i+1);
scanf("%s%s", a[i].id, a[i].name);
for (j = 0; j < 3; j++) {
scanf("%f", &a[i].score[j]);
}
}
}
void Write_Info(STU a[], int n) {
FILE *fp;
if ((fp = fopen("record", "wb")) == NULL) {
printf("无法打开文件!\n");
return;
}
fwrite(a, sizeof(STU), n, fp);
fclose(fp);
}
```
这个示例代码中,我们首先定义了一个STU结构体类型,用来存储一个学生的信息。然后编写了Input_Info函数和Write_Info函数,分别用来输入学生信息和将学生信息写入文件。在主函数中,我们先输入学生信息,然后计算每个学生的平均成绩,并将学生信息和平均成绩保存到一个结构体数组中。最后调用Write_Info函数将这些信息写入文件中。
阅读全文