3.文件“stu_info1.txt”包含学生的基本信息(姓名、学号、籍贯三项),现在需 要从该文件中读出信息,并依次为每位学生输入三门课程成绩,计算平均成绩,再将学生 完整信息(姓名、学号、籍贯、课程 1、课程 2、课程 3、平均分)写入文件 “stu_info2.txt”并保存于磁盘上。用C语言编程
时间: 2023-11-27 17:52:00 浏览: 97
以下是一个可能的解决方案:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_NAME_LEN 20
#define MAX_ID_LEN 10
#define MAX_NATIVE_LEN 20
#define MAX_LINE_LEN (MAX_NAME_LEN + MAX_ID_LEN + MAX_NATIVE_LEN + 3) // 3个分隔符
struct Student {
char name[MAX_NAME_LEN];
char id[MAX_ID_LEN];
char native[MAX_NATIVE_LEN];
float score1;
float score2;
float score3;
float average;
};
int main() {
FILE *fp1, *fp2;
char line[MAX_LINE_LEN];
struct Student stu;
// 打开文件
fp1 = fopen("stu_info1.txt", "r");
if (fp1 == NULL) {
printf("Open file error!\n");
exit(EXIT_FAILURE);
}
fp2 = fopen("stu_info2.txt", "w");
if (fp2 == NULL) {
printf("Open file error!\n");
exit(EXIT_FAILURE);
}
// 逐行读取学生信息并处理
while (fgets(line, MAX_LINE_LEN, fp1)) {
sscanf(line, "%s %s %s", stu.name, stu.id, stu.native);
printf("Enter scores for %s (id: %s):\n", stu.name, stu.id);
scanf("%f %f %f", &stu.score1, &stu.score2, &stu.score3);
stu.average = (stu.score1 + stu.score2 + stu.score3) / 3;
fprintf(fp2, "%s %s %s %.1f %.1f %.1f %.1f\n", stu.name, stu.id, stu.native, stu.score1, stu.score2, stu.score3, stu.average);
}
// 关闭文件
fclose(fp1);
fclose(fp2);
return 0;
}
```
该程序首先定义了一个 `Student` 结构体,表示学生的信息,其中包括姓名、学号、籍贯、三门课程成绩和平均成绩。然后程序打开了两个文件,`stu_info1.txt` 用于读取学生基本信息,`stu_info2.txt` 用于保存完整信息。程序逐行读取 `stu_info1.txt` 中的每个学生信息,然后让用户输入该学生的三门课程成绩,计算平均成绩,最后将完整信息写入 `stu_info2.txt` 文件中。
需要注意的是,该程序使用了 `sscanf` 函数来从读取的行中解析出学生的姓名、学号和籍贯,因为这三个字段之间用空格分隔。另外,程序假设每行的格式都是正确的,如果有任何格式错误可能会导致程序出错。
阅读全文