zl程序教程

您现在的位置是:首页 >  后端

当前栏目

C++第11周项目5——体验文件操作

C++文件项目 操作 体验 11
2023-09-11 14:15:56 时间

课程首页地址:http://blog.csdn.net/sxhelijian/article/details/7910565


【项目5-体验文件操作】

先阅读《文件操作初体验》。文件english.dat(含10000个数据的文件在BB平台。为方便校外读者,本文后附100个数据,自行复制粘贴到记事本中保存为文件english.dat))中给出的是2012级10000名新生入学英语分级考试全校同学的成绩。编程序,求出这次考试的平均成绩,并统计各分数段的人数(优秀:≥90,良好:≥80,中等:≥70,及格:≥60,不及格: 60)。运行结果如图所示。


提示:本任务完成困难,可以考虑预做下面的练习
练习1:从文件中读出学生的成绩,输出最高、最低,以及平均成绩(平均成绩为小数)。
练习2:从文件中读出学生的成绩,统计90分以上学生的人数并输出。
拓展1:将输出界面改良下,显示成下面的样子(仅变输出方式)


拓展2:将统计结果保存到数据文件statictic.dat中(提示:要写入文件了)


【参考解答】

项目任务参考代码:

#include fstream //操作文件必写

#include iostream 

using namespace std;

int main( )

 int s,i,r; 

 int a=0, b=0,c=0,d=0,e=0;//分别代表优秀、良好、中等、及格、不及格人数

 double sum=0,ave;

 //以输入的方式(ios::in)打开文件

 ifstream infile("english.dat",ios::in);

 if(!infile) 

 cerr "open error!" endl;

 exit(1);

 for(i=0;i 10000;i++)

 infile s;

 sum+=s;

 r=s/10; //r用于分出“档次”

 switch(r)

 case 10:

 case 9: 

 a++; 

 break;

 case 8: 

 b++; 

 break;

 case 7: 

 c++; 

 break;

 case 6: 

 d++; 

 break;

 default: 

 e++; 

 break;

 infile.close(); //读入完毕要关闭文件

 //下面对数据的操作和文件就没有关系了,本例输出求得的最大值

 ave=sum/10000;

 cout "平均成绩为:" ave endl;

 cout "优秀人数:" a endl;

 cout "良好人数:" b endl;

 cout "中等人数:" c endl;

 cout "及格人数:" d endl;

 cout "不及格人数:" e endl;

 return 0;

} 

拓展1参考代码:

#include fstream //操作文件必写

#include iostream 

using namespace std;

int main( )

 int s,i,r; 

 int a=0, b=0,c=0,d=0,e=0;//分别代表优秀、良好、中等、及格、不及格人数

 double sum=0,ave;

 //以输入的方式(ios::in)打开文件

 ifstream infile("english.dat",ios::in);

 if(!infile) 

 cerr "open error!" endl;

 exit(1);

 for(i=0;i 10000;i++)

 infile s;

 sum+=s;

 r=s/10; //r用于分出“档次”

 switch(r)

 case 10:

 case 9: 

 a++; 

 break;

 case 8: 

 b++; 

 break;

 case 7: 

 c++; 

 break;

 case 6: 

 d++; 

 break;

 default: 

 e++; 

 break;

 infile.close(); 

 ave=sum/10000;

 int max,l; //将存储这几个分数段中的最多人数,l是输出“进度条”的长度

 max=a;

 if(max b) max=b;

 if(max c) max=c;

 if(max d) max=d;

 if(max e) max=e;

 cout "平均成绩为:" ave endl;

 //人数最多的(max)输出20个格子,据此可算出各档需要多少格子

 cout "优秀 ";

 l=double(a)/max*50;

 for(i=0;i ++i) 

 cout #;

 cout " " a endl;

 cout "良好 ";

 l=double(b)/max*50;

 for(i=0;i ++i) 

 cout #;

 cout " " b endl;

 cout "中等 ";

 l=double(c)/max*50;

 for(i=0;i ++i) 

 cout #;

 cout " " c endl;

 cout "及格 ";

 l=double(d)/max*50;

 for(i=0;i ++i) 

 cout #;

 cout " " d endl;

 cout "挂科 ";

 l=double(e)/max*50;

 for(i=0;i ++i) 

 cout #;

 cout " " e endl;

 return 0;

} 


附:本文后附100个数据,自行复制粘贴到记事本中保存为文件english.dat,以便于完成练习。
66
77
97
65
69
79
79
77
69
74
90
73
64
69
69
69
74
71
83
96
87
88
62
76
65
51
66
73
77
78
73
52
78
75
73
60
69
56
76
68
76
77
87
56
61
62
69
64
73
68
62
62
79
88
79
77
71
57
88
69
71
78
74
67
86
55
86
78
81
52
66
67
68
85
72
74
84
64
61
76
71
64
91
72
82
60
70
64
84
75
67
67
85
70
59
72
87
65
55
77


爱上c++的第七天(核心课程):文件操作 学过我之前c语言课程的都应该学过文件了,或者说有过编程基础的人都应该学过文件的相关知识了。所以说这一章节对大家来说可能不会太难,但是还是要会不是。哈哈哈,开始我们下面的学习。
贺利坚 烟台大学计算机学院教师,建设系列学习资源,改革教学方法,为IT菜鸟建跑道,让大一的孩子会编程,为迷茫的大学生出主意,一起追求快乐的大学。 著书《逆袭大学:传给IT学子的正能量》,帮助处于迷茫中的大学