C语言3.文件“stu_info1.txt”包含学生的基本信息(姓名、学号、籍贯三项),现在需 要从该文件中读出信息,并依次为每位学生输入三门课程成绩,计算平均成绩,再将学生 完整信息(姓名、学号、籍贯、课程 1、课程 2、课程 3、平均分)写入文件 “stu_info2.txt”并保存于磁盘上。
时间: 2023-07-15 21:13:23 浏览: 102
以下是实现该功能的 C 代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_LEN 100
typedef struct {
char name[MAX_LEN];
char id[MAX_LEN];
char hometown[MAX_LEN];
float score1;
float score2;
float score3;
float avg_score;
} Student;
int main() {
FILE *fp1, *fp2;
char filename1[] = "stu_info1.txt";
char filename2[] = "stu_info2.txt";
char line[MAX_LEN];
Student stu;
// 打开文件1
if ((fp1 = fopen(filename1, "r")) == NULL) {
printf("Error opening file %s!\n", filename1);
exit(1);
}
// 创建文件2
if ((fp2 = fopen(filename2, "w")) == NULL) {
printf("Error creating file %s!\n", filename2);
exit(1);
}
// 逐行读取学生信息,并输入课程成绩,计算平均成绩,写入文件2
while (fgets(line, MAX_LEN, fp1) != NULL) {
sscanf(line, "%s %s %s", stu.name, stu.id, stu.hometown);
printf("Enter scores for student %s (id: %s):\n", stu.name, stu.id);
scanf("%f %f %f", &stu.score1, &stu.score2, &stu.score3);
stu.avg_score = (stu.score1 + stu.score2 + stu.score3) / 3.0;
fprintf(fp2, "%s %s %s %.2f %.2f %.2f %.2f\n", stu.name, stu.id, stu.hometown, stu.score1, stu.score2, stu.score3, stu.avg_score);
}
// 关闭文件
fclose(fp1);
fclose(fp2);
printf("Student information has been written to file %s.\n", filename2);
return 0;
}
```
该程序首先打开文件 `stu_info1.txt`,逐行读取学生信息,包括姓名、学号和籍贯,并提示用户输入该学生的三门课程成绩。然后计算平均成绩,并将完整信息(包括平均成绩)写入文件 `stu_info2.txt` 中。最后关闭文件并输出提示信息。
需要注意的是,本程序假设文件 `stu_info1.txt` 中每行只包含一个学生的信息(即姓名、学号和籍贯之间用空格隔开),且输入的成绩都为浮点数。如果文件格式不符合要求或者输入的成绩格式不正确,程序可能会出错。
阅读全文