文件“stu_info1.txt”包含学生的基本信息(姓名、学号、籍贯三项),现在需 要从该文件中读出信息,并依次为每位学生输入三门课程成绩,计算平均成绩,再将学生 完整信息(姓名、学号、籍贯、课程 1、课程 2、课程 3、平均分)写入文件 “stu_info2.txt”并保存于磁盘上。C语言
时间: 2023-12-22 08:12:13 浏览: 144
好的,这是一个文件读写和数据处理的问题,我会尽力回答。
首先,我们需要打开文件 "stu_info1.txt",读取其中的学生基本信息。假设该文件中每一行的格式为 "姓名 学号 籍贯",我们可以使用 fscanf 函数读取文件中的每一行,将数据存入结构体数组中:
```c
#include <stdio.h>
#define MAX_STUDENT 100
struct Student {
char name[20];
char id[10];
char hometown[20];
float score[3];
float avg_score;
};
int main() {
FILE *fp1, *fp2;
struct Student students[MAX_STUDENT];
int i, n;
// 打开文件 stu_info1.txt
fp1 = fopen("stu_info1.txt", "r");
if (fp1 == NULL) {
printf("Cannot open file stu_info1.txt!\n");
return 1;
}
// 读取学生基本信息
n = 0;
while (fscanf(fp1, "%s %s %s", students[n].name, students[n].id, students[n].hometown) == 3) {
n++;
if (n >= MAX_STUDENT) {
printf("Too many students!\n");
break;
}
}
// 关闭文件 stu_info1.txt
fclose(fp1);
// 依次为每个学生输入成绩并计算平均分
for (i = 0; i < n; i++) {
printf("Please input scores for student %s:\n", students[i].name);
scanf("%f %f %f", &students[i].score[0], &students[i].score[1], &students[i].score[2]);
students[i].avg_score = (students[i].score[0] + students[i].score[1] + students[i].score[2]) / 3;
}
// 打开文件 stu_info2.txt
fp2 = fopen("stu_info2.txt", "w");
if (fp2 == NULL) {
printf("Cannot open file stu_info2.txt!\n");
return 1;
}
// 将学生完整信息写入文件 stu_info2.txt
for (i = 0; i < n; i++) {
fprintf(fp2, "%s %s %s %.1f %.1f %.1f %.1f\n", students[i].name, students[i].id, students[i].hometown, students[i].score[0], students[i].score[1], students[i].score[2], students[i].avg_score);
}
// 关闭文件 stu_info2.txt
fclose(fp2);
return 0;
}
```
在上面的代码中,我们首先定义了一个结构体 Student,包含了学生的基本信息和三门课程成绩以及平均分。接着,我们打开文件 "stu_info1.txt",使用 fscanf 函数读取学生基本信息并存入结构体数组 students 中。然后,我们依次为每个学生输入三门课程成绩并计算平均分。最后,我们打开文件 "stu_info2.txt",使用 fprintf 函数将学生完整信息写入文件中,其中 %.1f 表示输出浮点数并保留一位小数。
注意,上面的代码中并没有进行输入数据的错误检查,实际应用中应该对用户的输入进行正确性检查,以避免程序崩溃或输出错误结果。
阅读全文