3.文件“stu_info1.txt”包含学生的基本信息(姓名、学号、籍贯三项),现在需 要从该文件中读出信息,并依次为每位学生输入三门课程成绩,计算平均成绩,再将学生 完整信息(姓名、学号、籍贯、课程1、课程2、课程3、平均分)写入文件 “stu_info2.txt”并保存于磁盘上。C语言
时间: 2023-11-27 22:55:15 浏览: 105
实现该功能的C语言代码如下:
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct student {
char name[20];
char id[15];
char hometown[20];
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[100];
int count = 0;
float total_score = 0;
// 打开文件1
fp1 = fopen(filename1, "r");
if (fp1 == NULL) {
printf("Failed to open %s\n", filename1);
exit(1);
}
// 打开文件2
fp2 = fopen(filename2, "w");
if (fp2 == NULL) {
printf("Failed to open %s\n", filename2);
exit(1);
}
// 读取文件1中的学生信息并计算平均分
while (fgets(line, sizeof(line), fp1) != NULL) {
Student s;
sscanf(line, "%s %s %s", s.name, s.id, s.hometown);
printf("Please input the scores of %s:\n", s.name);
scanf("%f%f%f", &s.score1, &s.score2, &s.score3);
s.avg_score = (s.score1 + s.score2 + s.score3) / 3;
total_score += s.avg_score;
count++;
// 将学生信息写入文件2
fprintf(fp2, "%s %s %s %.1f %.1f %.1f %.1f\n", s.name, s.id, s.hometown,
s.score1, s.score2, s.score3, s.avg_score);
}
// 计算全班平均分
float class_avg_score = total_score / count;
printf("The average score of the class is: %.1f\n", class_avg_score);
// 关闭文件
fclose(fp1);
fclose(fp2);
return 0;
}
```
该程序中,定义了一个名为`Student`的结构体,包含了学生的基本信息(姓名、学号、籍贯)和三门课程的成绩。程序首先打开文件1(“stu_info1.txt”),读取学生的基本信息,并依次输入三门课程的成绩,计算平均成绩,然后将学生的完整信息(姓名、学号、籍贯、课程1、课程2、课程3、平均分)写入文件2(“stu_info2.txt”)中。
在读取文件1的过程中,程序还计算了全班学生的平均分,并输出到屏幕上。
最后,程序关闭了文件1和文件2,结束运行。
阅读全文