c语言文件“stu_info1.txt”包含学生的基本信息(姓名、学号、籍贯三项),现在需 要从该文件中读出信息,并依次为每位学生输入三门课程成绩,计算平均成绩,再将学生 完整信息(姓名、学号、籍贯、课程 1、课程 2、课程 3、平均分)写入文件 “stu_info2.txt”并保存于磁盘上。
时间: 2023-08-19 18:04:48 浏览: 63
下面是一个可能的解决方案:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_NAME_LEN 20
#define MAX_ID_LEN 10
#define MAX_NATIVE_LEN 20
typedef struct {
char name[MAX_NAME_LEN];
char id[MAX_ID_LEN];
char native[MAX_NATIVE_LEN];
float score1;
float score2;
float score3;
float avg_score;
} Student;
int main() {
FILE *fp1, *fp2;
if ((fp1 = fopen("stu_info1.txt", "r")) == NULL) {
printf("Cannot open file stu_info1.txt\n");
exit(1);
}
if ((fp2 = fopen("stu_info2.txt", "w")) == NULL) {
printf("Cannot open file stu_info2.txt\n");
exit(1);
}
Student s;
while (fscanf(fp1, "%s %s %s", s.name, s.id, s.native) == 3) {
printf("Enter scores for student %s (id:%s native:%s):\n", s.name, s.id, s.native);
scanf("%f %f %f", &s.score1, &s.score2, &s.score3);
s.avg_score = (s.score1 + s.score2 + s.score3) / 3;
fprintf(fp2, "%s %s %s %.2f %.2f %.2f %.2f\n", s.name, s.id, s.native, s.score1, s.score2, s.score3, s.avg_score);
}
fclose(fp1);
fclose(fp2);
printf("Done.\n");
return 0;
}
```
该程序首先打开两个文件:一个是输入文件 `stu_info1.txt`,一个是输出文件 `stu_info2.txt`。然后每次读取一行,解析出学生的姓名、学号和籍贯,并提示用户输入该学生的三门课程成绩。计算平均成绩后,将学生完整信息写入输出文件。
请注意,该程序没有对输入的成绩进行任何校验,比如是否在合理范围内,是否是数字等等。在实际应用中,这些检查应该是必要的。
阅读全文