用c语言编写:从文件data txt中读取某门功课的若干个同学的成绩。完成以下功能: 1)统计并输出该门课成绩的最高分和最低分,以及平均分(保留小数点2位)。2)将低于平均分的分数存入另一个文件data2.txt中。
时间: 2024-05-14 08:15:25 浏览: 80
以下是用C语言编写的代码实现你的需求:
```c
#include <stdio.h>
int main() {
FILE *fp1, *fp2;
char filename1[] = "data.txt";
char filename2[] = "data2.txt";
int count = 0;
float sum = 0, avg, max = 0, min = 100;
float score;
// 打开文件1
if ((fp1 = fopen(filename1, "r")) == NULL) {
printf("Can't open file %s\n", filename1);
return 0;
}
// 读取文件1中的成绩数据
while (fscanf(fp1, "%f", &score) != EOF) {
count++;
sum += score;
if (score > max) {
max = score;
}
if (score < min) {
min = score;
}
}
// 计算平均分
avg = sum / count;
// 输出统计结果
printf("Max score: %.2f\n", max);
printf("Min score: %.2f\n", min);
printf("Average score: %.2f\n", avg);
// 关闭文件1
fclose(fp1);
// 打开文件2
if ((fp2 = fopen(filename2, "w")) == NULL) {
printf("Can't open file %s\n", filename2);
return 0;
}
// 再次读取文件1中的成绩数据,将低于平均分的分数存入文件2
if ((fp1 = fopen(filename1, "r")) == NULL) {
printf("Can't open file %s\n", filename1);
return 0;
}
while (fscanf(fp1, "%f", &score) != EOF) {
if (score < avg) {
fprintf(fp2, "%.2f\n", score);
}
}
// 关闭文件1和文件2
fclose(fp1);
fclose(fp2);
return 0;
}
```
解释一下代码:
1. 首先,我们定义了两个文件名,`filename1` 是原始数据文件名,`filename2` 是低于平均分的数据存放的文件名。
2. 然后,我们打开文件1,如果打开失败,输出错误信息,并且程序结束。
3. 读取文件1中的成绩数据,同时统计最高分、最低分和总分。
4. 计算平均分,输出统计结果。
5. 关闭文件1。
6. 打开文件2,如果打开失败,输出错误信息,并且程序结束。
7. 再次打开文件1,读取成绩数据,将低于平均分的分数存入文件2中。
8. 关闭文件1和文件2。
这段代码可以完成你的需求,你只需要将成绩数据按照一行一个数的格式存储在 `data.txt` 文件中,然后运行这个程序即可。注意,程序会生成一个新的 `data2.txt` 文件,里面存储的是低于平均分的成绩数据。
阅读全文