用C语言编写程序,从键盘输入以下5个学生的学号、姓名,以及数学、语文和英语成绩,写到文本文件f2.txt中,再从文件中取出数据,计算每个学生的总成绩和平均分,并将结果显示在屏幕上。 提示:在文件读写的...
时间: 2024-03-11 19:49:53 浏览: 65
好的,这是一个关于文件读写和字符串处理的问题,下面是一个可能的解决方案:
```c
#include <stdio.h>
#include <string.h>
#define MAX_NAME_LEN 20 // 姓名最大长度
#define MAX_STUDENT_NUM 5 // 最大学生数
// 学生信息结构体
typedef struct {
int id;
char name[MAX_NAME_LEN];
int math;
int chinese;
int english;
int total_score;
float avg_score;
} Student;
// 从键盘输入学生信息并写入文件
void input_students(FILE *fp) {
Student stu;
for (int i = 0; i < MAX_STUDENT_NUM; i++) {
printf("请输入第%d个学生的学号、姓名、数学、语文、英语成绩(用空格隔开):\n", i+1);
scanf("%d %s %d %d %d", &stu.id, stu.name, &stu.math, &stu.chinese, &stu.english);
stu.total_score = stu.math + stu.chinese + stu.english;
stu.avg_score = stu.total_score / 3.0;
fprintf(fp, "%d %s %d %d %d %d %.2f\n", stu.id, stu.name, stu.math, stu.chinese, stu.english, stu.total_score, stu.avg_score);
}
}
// 从文件中读取学生信息并计算总分和平均分
void read_students(FILE *fp) {
Student stu;
printf("学号\t姓名\t数学\t语文\t英语\t总分\t平均分\n");
while (fscanf(fp, "%d %s %d %d %d %d %f", &stu.id, stu.name, &stu.math, &stu.chinese, &stu.english, &stu.total_score, &stu.avg_score) != EOF) {
printf("%d\t%s\t%d\t%d\t%d\t%d\t%.2f\n", stu.id, stu.name, stu.math, stu.chinese, stu.english, stu.total_score, stu.avg_score);
}
}
int main() {
FILE *fp;
fp = fopen("f2.txt", "w");
if (fp == NULL) {
printf("无法打开文件!\n");
return 1;
}
input_students(fp);
fclose(fp);
fp = fopen("f2.txt", "r");
if (fp == NULL) {
printf("无法打开文件!\n");
return 1;
}
read_students(fp);
fclose(fp);
return 0;
}
```
这个程序使用了结构体来保存每个学生的信息,通过 `fprintf` 函数将学生信息写入文件,通过 `fscanf` 函数从文件中读取学生信息。在读取每个学生信息时,程序会自动计算总分和平均分,并将结果输出到屏幕上。注意,在写入文件和读取文件时,文件的打开模式需要正确设置,否则会出现错误。
阅读全文