程序设计报告对参赛结果分数进行管理方案计划_第1页
程序设计报告对参赛结果分数进行管理方案计划_第2页
程序设计报告对参赛结果分数进行管理方案计划_第3页
程序设计报告对参赛结果分数进行管理方案计划_第4页
程序设计报告对参赛结果分数进行管理方案计划_第5页
免费预览已结束,剩余2页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、.(一) 需求和规格说明对参赛结果分数进行处理:参赛选手n人(n>1),评委m人(m>2),评委给每一选手打一个分数score (分数score为小于等于10的一个正实数)。选手的最后得分lastScore 计算方法为(1) m<9时,去掉一个最高分和一个最低分后另m-2个得分的平均值。(2) m>9时,去掉两个最高分和两个最低分后另m-4个得分的平均值。假设事先已经建立了text型的数据文件f1.txt,其中依次记录着n个选手的编号(一个正整数)、姓名(一个字符串)以及 m个评委给出的得分。请编制程序,依次从数据文件f1.txt中读入n个选手的有关信息,而后按上述规定

2、方法计算出每一个选手的最后得分,而且往屏幕上以及另一个text型文件f2.txt中同时输出如下形式的结果信息。假设参赛选手人数 n=5,评委人数 m=7,磁盘文件f1.txt中的初始数据为:1 zha ngjin 8.8 9.3 7.9 8.7 8.9 9.7 9.22 lin tao 8.9 8.2 8.6 8.8 8.5 9.1 9.33 guojia n 8.9 8.4 8.7 8.6 8.6 8.4 8.64 mali ng 7.9 8.3 8.5 8.6 8.5 8.9 8.3f2.txt中的结果均应该为:5 liuyifa n 9.5 9.1 9.8 9.2 9.0 9.5 8.9

3、 那么,程序执行后,屏幕显示结果以及磁盘文件参赛号姓名最咼分最低分累积分最后得分1zha ngji n9.77.944.98.982lin tao8.783guojia n8.98.442.98.584mali ng8.97.942.28.445liuyifa n9.88.946.39.26思考:可进一步考虑找出比赛的第1至第k名,也在屏幕以及f2.txt中同时输出相关的结果信息(k小于等于n,并规定若多个选手最后得分相同时,则有效分(即已删除原来的最高 分后)中最高分高者名次优先)。描述函数名设计类型成员名描述intnu mber选手序号charn ame选手名字doub

4、le *score选手得分根据题目,建立结构体 player,其成员如下:然后建立函数,如下表: 类型doublemax_score求最大分数doublemin _score求最小分数doublemax_score2求第二大分数doublemin _score2求第二小分数doubleget_totalscore求选手总分doubleget_tscore求选手累计得分doubleget_lastscore求选手最后得分(三)用户手册用户只需将f1.txt 放入文件夹中,运行程序,然后会在屏幕输出文件f1.txt 和文件f2.txt 中的内容。文件 f2.txt保存在文件夹中。(四)调试及测试打

5、开文件程序,运行计算各位选手的得分情况。(1)运行实例:I I CI ktbjgsdK. exe'1234£zh-ajigJ inILntaoSruLO jieir ria.ll.ity ILuIf dflS.8 9.3 7.9 0.7 i.9 f.7 9.28.9 B.2 0.G 8.9 S.E 叭L 9.38.9 e.4 8.7 B.G B.G B.4 G.67.9 8.0 8.5 8.G 6.S S.? S.39.5 9.1 ?-8 ?.2 ? ?.5 a.?参赛号最抵分最咼分累计分最石得分zhangjin lintao 3UDjian malinq liuifan12

6、345f 2 . txtS件成功建立.计箒结卑己经保存至WPre Any kp to rnnt iniie7.98*99 .79 .38 .98 .99 .844.?43 _?42-942 _246,3I七文件中.8.9B a.TB8-5B8.449,26文件旧卿(E)格式Q童看tV)帮助QH蓼赛号姓名最低分最高分"io取后伺为F1shangjin7. g9. 744. 9S. 92linlaoS. 29.343.92. 7Si 3suojianW 1塔&9仏9& 5呂4mailng1 p3.9S, 44' 5liuyifanO i79.34

7、6.3926F'左-记事本(2)进一步改进:无论评委几人,程序都会找出第二高分和第二低分,可以改为只有在评委人数大 于9人时执行。(3)附录源程序#in elude <iostream> #i nclude <fstream> using n ames pace std;struct p layer / 结构体 p layerint nu mber;char n ame40;double * score;/ 成员表列;double min_score(double s,int n);/ 求最低分数 double max_score(double s,int n)

8、;/ 求最高分数 double get_totalscore(double s,int n);/ 求总分 double min_score2(double s,int n);/ 求第二低分数 double max_score2(double s,int n);/ 求第二高分数 double get_tscore(double s,int n);/ 求累计分数 double get_lastscore(double s,int n);/ 求最后得分 double min_score(double s,int n)/ 最低分double min_score=s0; for(int i=0;i<

9、;n;i+)if(min_score>=si)min_score=si;return min_score;double max_score(double s,int n)/ 最高分 double max_score=s0; for(int i=0;i<n;i+)if(max_score<=si)max_score=si;return max_score;double get_totalscore(double s,int n) / 获取总分 , 所有分数的和 double totalscore=0;for(int i=0;i<n;i+) totalscore+=si;r

10、eturn totalscore;double min_score2(double s,int n)/ 求出第二低的分数 min_score2 int a;double min_score2;for(int i=0;i<n;i+) if(si=min_score( s, n)a=i;for( i=0,sa=20.0;i<n;i+) if(min_score2>=si) min_score2=si; sa=min_score(s,n); return min_score2;double max_score2( double s,int n) / 求出第二高的分数 double

11、max_score2; int b;for( int i=0;i<n;i+)if(si=max_score(s, n) b=i;for( i=0,sb=1.0;i<n;i+)if(max_score2<=si)max_score2=si; sb=max_score(s,n); return max_score2;double get_tscore(double s,int n)/ 求累计得分double tscore; if(n<9)/ 裁判小于 9 时 tscore=get_totalscore(s, n)-max_score(s,n)-min_score(s,n);

12、else if(n>=9)/ 裁判大于 9 时tscore=get_totalscore(s, n)-max_score( s,n)-min_score( s,n)-max_score2(s, n)-min_score2(s, n);return tscore;double get_lastscore(double s,int n) / 求最后得分double lastscore; if(n<9)/ 裁判小于 9 时lastscore=get_tscore( s,n)/(n-2);else if(n>=9)/ 裁判大于 9 时lastscore=get_tscore( s,

13、n)/(n-4); return lastscore;/ 返回最后得分void main()ifstream fin;fin.open("f1.txt");/ 打开文本 f1.txt if (fin.fail()cout << " 文件读取失败 ." << endl; exit(0);int rows = 0;int cols = 0;char temp;while (!fin.eof()temp = fin.get();if (temp = 'n') rows+;else if (temp = '.

14、9;)cols+;cols /= rows; / 根据文本中回车键和 "."的多少判断队员和评委的人数 player * list = new playerrows; for (int i = 0; i < rows; +i) listi.score = new doublecols; fin.clear(); fin.close(); fin.open("f1.txt"); if (fin.fail() cout << " 文件读取失败 ." << endl; exit(0); cout<<

15、" 选手得分 :"<<endl; for (int m = 0; m < rows; +m) H.H.fin >> listm.number; cout<<listm.number<<" fin >> ; cout<< <<" for (int j = 0; j < cols; +j) fin >> listm.scorej;cout<<listm.scorej<<" &qu

16、ot; cout<<endl;fin.get(); / 依次读取文本中的数据fin.close();ofstream fout;fout.open("f2.txt"); / 建立 f2.txt 文件 if(fout.fail()cout << " 文件建立失败 ."exit(0);累计分 最后得分 n" 向 f2.txt 中输出表头累计分 最后得分 n"fout << "n"fout << " 参赛号姓 名最低分最高分fout << "

17、n" /cout << "n"cout << " 参赛号姓 名最低分最高分cout << "n"fout.setf(ios_base:fixed);for (int h = 0;h < rows; +h)fout.precision(1);fout.width(4);fout << listh.number;/ 输出队员编号 fout.width(12);fout << ; / 输出队员名字 fout.width(8);fout << m

18、in_score(listh.score,cols);/ 输出最小分数 fout.width(10);fout << max_score(listh.score,cols); / 输出最大分数 fout.width(11);fout << get_tscore(listh.score, cols); / 输出累计分数 fout.width(11);fout.precision(2);fout << get_lastscore(listh.score, cols); / 输出最后得分 fout << endl;cout.width(4);cout << listh.number;/ 输出队员编号 cout.width(12);cout << ; / 输出队员名字 cout.width(8);cout << min_score(listh.score,cols);/ 输出最小分数 cout.width(10);cout <

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论