写一段C语言文件“stu_info1.txt”包含学生的基本信息(姓名、学号、籍贯三项),现在需 要从该文件中读出信息,并依次为每位学生输入三门课程成绩,计算平均成绩,再将学生 完整信息(姓名、学号、籍贯、课程 1、课程 2、课程 3、平均分)写入文件 “stu_info2.txt”并保存于磁盘上。
时间: 2023-12-19 07:04:05 浏览: 111
好的,以下是C语言代码:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_STUDENT_NUM 100 // 最大学生数量
#define MAX_NAME_LEN 20 // 最大姓名长度
#define MAX_LOCATION_LEN 20 // 最大籍贯长度
struct Student {
char name[MAX_NAME_LEN];
char id[MAX_NAME_LEN];
char location[MAX_LOCATION_LEN];
float score_1;
float score_2;
float score_3;
float average_score;
};
int main() {
FILE *file_in = fopen("stu_info1.txt", "r"); // 打开输入文件
if (file_in == NULL) {
printf("Failed to open file stu_info1.txt\n");
return 1;
}
struct Student students[MAX_STUDENT_NUM];
int student_num = 0;
// 从文件中读取学生信息
while (fscanf(file_in, "%s %s %s", students[student_num].name, students[student_num].id, students[student_num].location) != EOF) {
student_num++;
}
fclose(file_in); // 关闭输入文件
// 计算每个学生的平均成绩
for (int i = 0; i < student_num; i++) {
printf("Input scores for student %s (id: %s, location: %s):\n", students[i].name, students[i].id, students[i].location);
scanf("%f %f %f", &students[i].score_1, &students[i].score_2, &students[i].score_3);
students[i].average_score = (students[i].score_1 + students[i].score_2 + students[i].score_3) / 3;
}
FILE *file_out = fopen("stu_info2.txt", "w"); // 打开输出文件
if (file_out == NULL) {
printf("Failed to open file stu_info2.txt\n");
return 1;
}
// 将学生完整信息写入文件
for (int i = 0; i < student_num; i++) {
fprintf(file_out, "%s %s %s %.2f %.2f %.2f %.2f\n", students[i].name, students[i].id, students[i].location, students[i].score_1, students[i].score_2, students[i].score_3, students[i].average_score);
}
fclose(file_out); // 关闭输出文件
printf("Done!\n");
return 0;
}
```
该程序首先打开输入文件 `stu_info1.txt`,读取每个学生的姓名、学号和籍贯,保存在一个结构体数组中。然后,程序依次为每个学生输入三门课程的成绩,计算平均分,并将学生完整信息写入输出文件 `stu_info2.txt` 中,其中包括姓名、学号、籍贯、三门成绩和平均分。
注意:代码中使用了结构体和文件操作,需要一定的编程基础。
阅读全文