将从键盘输入的N个学生的学号和成绩存入到文件student.dat中。再从文件中读取学生的信息,求出最高分、最低分和总分。N可通过符号常量自行定义大小。
时间: 2024-03-04 17:49:10 浏览: 142
好的,这是一个关于文件读写和数据处理的问题。我会给出一个基本的C语言实现,希望可以帮到你。
首先,我们需要定义符号常量N,用来表示学生的数量。假设我们定义N为50,则可以写成:
```c
#define N 50
```
接下来,我们需要定义一个结构体类型,用来表示学生的学号和成绩。可以写成:
```c
struct Student {
char id[10]; // 学号
int score; // 成绩
};
```
然后,我们需要编写函数来从键盘输入学生信息,并将信息写入文件中。可以写成:
```c
void writeToFile() {
struct Student students[N];
FILE *fp;
int i;
// 从键盘输入学生信息
for (i = 0; i < N; i++) {
printf("请输入第%d个学生的学号和成绩:\n", i + 1);
scanf("%s %d", students[i].id, &students[i].score);
}
// 将学生信息写入文件
fp = fopen("student.dat", "wb");
fwrite(students, sizeof(struct Student), N, fp);
fclose(fp);
}
```
上述函数中,我们首先定义了一个结构体数组students,用来存储学生信息。然后,使用for循环从键盘输入每个学生的学号和成绩,并将其存储到students数组中。最后,使用fwrite函数将students数组中的内容写入到文件student.dat中。
接下来,我们需要编写函数从文件中读取学生信息,并计算最高分、最低分和总分。可以写成:
```c
void readFromFile() {
struct Student students[N];
FILE *fp;
int i, maxScore, minScore, sumScore;
// 从文件中读取学生信息
fp = fopen("student.dat", "rb");
fread(students, sizeof(struct Student), N, fp);
fclose(fp);
// 计算最高分、最低分和总分
maxScore = minScore = sumScore = students[0].score;
for (i = 1; i < N; i++) {
if (students[i].score > maxScore) {
maxScore = students[i].score;
}
if (students[i].score < minScore) {
minScore = students[i].score;
}
sumScore += students[i].score;
}
// 输出结果
printf("最高分:%d\n", maxScore);
printf("最低分:%d\n", minScore);
printf("总分:%d\n", sumScore);
}
```
上述函数中,我们首先定义了一个结构体数组students,用来存储从文件中读取的学生信息。然后,使用fread函数从文件student.dat中读取学生信息,并将其存储到students数组中。接下来,使用for循环遍历students数组,同时计算最高分、最低分和总分。最后,使用printf函数输出结果。
最后,我们可以在main函数中调用writeToFile和readFromFile函数,完成整个程序的功能:
```c
int main() {
writeToFile();
readFromFile();
return 0;
}
```
希望这个代码示例可以帮到你,如果还有其他问题或疑问,可以随时问我。
阅读全文