设有4个学生,每个学生有5门课的成绩,要求从键盘输入学生的学号、姓名及5门课的成绩,计算出平均成绩,并将每个学生的全部数据以字符串的形式保存到磁盘上的文本文件StudentGrade.txt中。提示:每个学生的数据占一行,一个学生的所有字段之间用;号分隔
时间: 2023-12-15 08:33:55 浏览: 21
可以按照以下方式修改代码来实现要求:
```c#include <stdio.h>
#include <stdlib.h>
#define MAX_STUDENTS 4
typedef struct {
int studentID;
char name[50];
int grades[5];
float average;
} Student;
void inputStudentInfo(Student students[], int numStudents) {
for (int i = 0; i < numStudents; i++) {
printf("请输入第%d个学生的信息:\n", i + 1);
printf("学号:");
scanf("%d", &students[i].studentID);
printf("姓名:");
scanf("%s", students[i].name);
printf("5门课成绩(用空格分隔):");
for (int j = 0; j < 5; j++) {
scanf("%d", &students[i].grades[j]);
}
}
}
void calculateAverage(Student students[], int numStudents) {
for (int i = 0; i < numStudents; i++) {
int sum = 0;
for (int j = 0; j < 5; j++) {
sum += students[i].grades[j];
}
students[i].average = (float)sum / 5;
}
}
void saveToFile(Student students[], int numStudents) {
FILE *file = fopen("StudentGrade.txt", "w");
if (file == NULL) {
printf("无法打开文件!\n");
return;
}
for (int i = 0; i < numStudents; i++) {
fprintf(file, "%d;%s;", students[i].studentID, students[i].name);
for (int j = 0; j < 5; j++) {
fprintf(file, "%d", students[i].grades[j]);
if (j < 4) {
fprintf(file, " ");
}
}
fprintf(file, ";%.2f\n", students[i].average);
}
fclose(file);
}
int main() {
Student students[MAX_STUDENTS];
inputStudentInfo(students, MAX_STUDENTS);
calculateAverage(students, MAX_STUDENTS);
saveToFile(students, MAX_STUDENTS);
printf("学生信息已保存到文件StudentGrade.txt中。\n");
return 0;
}
```
以上代码中,修改了 `Student` 结构体,添加了一个字符串数组 `name` 来存储学生的姓名,以及一个 `average` 字段来存储平均成绩。`inputStudentInfo` 函数用来输入学生的学号、姓名和5门课的成绩,`calculateAverage` 函数用来计算平均成绩,`saveToFile` 函数将每个学生的全部数据以字符串的形式保存到文本文件 "StudentGrade.txt" 中。在 `main` 函数中,首先定义了一个 `students` 数组来存放学生信息,然后调用 `inputStudentInfo` 函数输入学生信息,接着调用 `calculateAverage` 函数计算平均成绩,最后调用 `saveToFile` 函数将学生信息保存到文件中。