请用c语言帮我完成下面这段程序设计:文件“stu_info1.txt”包含学生的基本信息(姓名、学号、籍贯三项),现在需 要从该文件中读出信息,并依次为每位学生输入三门课程成绩,计算平均成绩,再将学生 完整信息(姓名、学号、籍贯、课程 1、课程 2、课程 3、平均分)写入文件 “stu_info2.txt”并保存于磁盘上。
时间: 2023-12-22 17:18:05 浏览: 89
你好,以下是一个基本的程序设计,可以实现你的要求:
```
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAXLEN 20 // 定义字符串最大长度
#define NUM_STU 3 // 定义学生数量
#define NUM_COURSE 3 // 定义课程数量
// 定义学生结构体
typedef struct {
char name[MAXLEN];
char id[MAXLEN];
char hometown[MAXLEN];
float score[NUM_COURSE];
float avg;
} Student;
// 读取学生信息
void read_student_info(FILE *fp, Student *stu)
{
fscanf(fp, "%s %s %s", stu->name, stu->id, stu->hometown);
}
// 计算平均分
void calc_avg(Student *stu)
{
float sum = 0;
for (int i = 0; i < NUM_COURSE; i++) {
sum += stu->score[i];
}
stu->avg = sum / NUM_COURSE;
}
// 写入学生信息
void write_student_info(FILE *fp, Student *stu)
{
fprintf(fp, "%s %s %s %.1f %.1f %.1f %.1f\n",
stu->name, stu->id, stu->hometown,
stu->score[0], stu->score[1], stu->score[2], stu->avg);
}
int main()
{
FILE *fp1, *fp2;
Student stu[NUM_STU];
// 打开文件
fp1 = fopen("stu_info1.txt", "r");
fp2 = fopen("stu_info2.txt", "w");
// 读取学生信息并输入成绩
for (int i = 0; i < NUM_STU; i++) {
read_student_info(fp1, &stu[i]);
printf("请输入 %s 的三门成绩:", stu[i].name);
scanf("%f %f %f", &stu[i].score[0], &stu[i].score[1], &stu[i].score[2]);
calc_avg(&stu[i]);
write_student_info(fp2, &stu[i]);
}
// 关闭文件
fclose(fp1);
fclose(fp2);
printf("学生信息已保存至 stu_info2.txt\n");
return 0;
}
```
程序中定义了一个 `Student` 结构体,包含学生的基本信息和成绩信息。程序中使用了三个函数:
- `read_student_info`:从文件中读取学生的基本信息(姓名、学号、籍贯)。
- `calc_avg`:计算学生的平均分。
- `write_student_info`:将学生的完整信息(姓名、学号、籍贯、课程1、课程2、课程3、平均分)写入文件。
在主函数中,程序首先打开文件 `stu_info1.txt` 和 `stu_info2.txt`,然后循环读取每个学生的基本信息,输入每个学生的三门成绩,计算平均分,最后将学生的完整信息写入文件 `stu_info2.txt`。完成后,程序关闭文件并输出提示信息。
请注意,程序中没有进行输入数据的校验和错误处理,这需要根据实际情况进行完善。
阅读全文