用c语言编写程序:文件" stu _ infol . txt "包含学生的基本信息(姓名、学号、籍贯三项),现在需要从该文件中读出信息,并依次为每位学生输入三门课程成绩,计算平均成绩,再将学生完整信息(姓名、学号、籍贯、课程1、课程2、课程3、平均分)写入文件" stu _info2.txt"并保存于磁盘上。
时间: 2023-12-22 15:18:20 浏览: 144
好的,以下是用 C 语言编写的程序实现该功能:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_LEN 20 // 学生信息中字符串的最大长度
#define NUM_COURSES 3 // 课程数
// 定义学生信息结构体
typedef struct {
char name[MAX_LEN];
char id[MAX_LEN];
char home[MAX_LEN];
float scores[NUM_COURSES];
float avg_score;
} Student;
int main() {
FILE *fp_in, *fp_out;
Student stu;
char filename_in[] = "stu_infol.txt";
char filename_out[] = "stu_info2.txt";
int i;
// 打开输入文件
fp_in = fopen(filename_in, "r");
if (fp_in == NULL) {
fprintf(stderr, "Error: cannot open file %s\n", filename_in);
exit(1);
}
// 打开输出文件
fp_out = fopen(filename_out, "w");
if (fp_out == NULL) {
fprintf(stderr, "Error: cannot open file %s\n", filename_out);
exit(1);
}
// 读取每个学生的信息并计算平均分
while (fscanf(fp_in, "%s %s %s", stu.name, stu.id, stu.home) == 3) {
// 输入每门课程成绩
for (i = 0; i < NUM_COURSES; i++) {
printf("Enter score for course %d for student %s: ", i+1, stu.name);
scanf("%f", &stu.scores[i]);
}
// 计算平均分
stu.avg_score = 0;
for (i = 0; i < NUM_COURSES; i++) {
stu.avg_score += stu.scores[i];
}
stu.avg_score /= NUM_COURSES;
// 将学生信息写入输出文件
fprintf(fp_out, "%s %s %s %.2f %.2f %.2f %.2f\n",
stu.name, stu.id, stu.home,
stu.scores[0], stu.scores[1], stu.scores[2], stu.avg_score);
}
// 关闭输入和输出文件
fclose(fp_in);
fclose(fp_out);
return 0;
}
```
该程序首先打开输入文件("stu_infol.txt"),然后读取每个学生的姓名、学号、籍贯,并通过循环为每个学生输入三门课程成绩并计算平均分。接着,程序将学生完整信息(包括姓名、学号、籍贯、课程1、课程2、课程3、平均分)写入输出文件("stu_info2.txt"),并保存于磁盘上。最后,程序关闭输入和输出文件并结束运行。
需要注意的是,上述程序中使用了结构体来表示学生信息,方便读取和处理。同时,程序还使用了文件输入/输出函数来读取和写入文件,需要打开和关闭文件以确保数据的正确读取和保存。
阅读全文