程序设计报告对参赛结果分数进行处理_第1页
程序设计报告对参赛结果分数进行处理_第2页
程序设计报告对参赛结果分数进行处理_第3页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

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

文档简介

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

2、果信息。假设参赛选手人数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.35 liuyifa n 9.5 9.1 9.8 9.2 9.0 9.5 8.9那么,程序执行后,屏幕显示结果以及磁盘文件f2.txt中的结果均应该为:。亠Q 口 参赛号姓名最高分最低分累积分最后得分1zha ngj

3、i 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,并规定若多个选手最后得分相同时,则有效分(即已删除原来的最高 分后)中最高分高者名次优先)。(二)设计根据题目,建立结构体 player,其成员如下:类型成员名描述intnu mber选手序号charn ame选手名字double *score选手得分然后建立函数,如下表:类型

4、函数名描述doublemax_score求最大分数doublemin _score求最小分数doublemax_score2求第二大分数doublemin _score2求第二小分数doubleget_totalscore求选手总分doubleget_tscore求选手累计得分doubleget_lastscore求选手最后得分(三)用户手册用户只需将f1.txt 放入文件夹中,运行程序,然后会在屏幕输出文件f1.txt 和文件f2.txt 中的内容。文件 f2.txt保存在文件夹中。(四)调试及测试打开文件程序,运行计算各位选手的得分情况。(1)运行实例:-记事未稠E格式m(H)參赛号姓名最

5、低分最咼分累计分最后得分zhangjin9.144. 9& 98lint ao& 29.343. 9& 783guojian8.48.942.98.584maling7. 98.9屹2& 445liuyifan& 99,846, 39.26(2)进一步改进:无论评委几人,程序都会找出第二高分和第二低分,可以改为只有在评委人数大 于9人时执行。(3)附录源程序#in elude #i nclude using n amespace std;struct player / 结构体 playerint nu mber;char n ame40;double * score;/ 成员表列;double

6、 min_score(double s,int n);/ 求最低分数 double max_score(double s,int n);/ 求最高分数 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

7、min_score(double s,int n) 最低分double min _score=s0;for(i nt i=0;i =si)min _score=si;return min_score;double max_score(double s,int n) 最高分double max_score=s0;for(i nt 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(i

8、 nt i=0;i n ;i+)totalscore+=si;return totalscore;double min_score2(doubles,int n) 求出第二低的分数min_score2int a;double min _score2;for(i nt i=0;i n ;i+)if(si=min _score( s, n)a=i;for( i=0,sa=20.0;i=si)min _score2=si;sa=min_score(s, n);return min _score2;double max_score2( double s,int n) / 求出第二高的分数double

9、max_score2;int b;for( int i=0;in;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);retur n 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)-max_score2(s,n)-min _

10、score2(s, n);return tscore;double get_lastscore(double s,int n) / 求最后得分double lastscore;if(n=9)裁判大于9时lastscore=get_tscore( s, n)/(n-4);return lastscore;/返回最后得分void mai n()ifstream fin;fin.open(f1.txt);/ 打开文本 f1.txtif (fin .fail()cout 文件读取失败. endl;exit(O);int rows = 0;int cols = 0;char temp;while (!f

11、in. eof()temp = fin. get();if (temp = n)rows+;else if (temp =.)cols+;cols /= rows; /根据文本中回车键和.的多少判断队员和评委的人数player * list = new playerrows;for (int i = 0; i rows; +i)listi.score = new doublecols;fin .clear();fin .close();fin. ope n( f1.txt);if (fin .fail()cout 文件读取失败. endl;exit(0);cout选手得分:endl;for (

12、int m = 0; m listm.number;coutlistm. nu mber ;cout listm. name ;for (int j = 0; j listm.scorej;coutlistm.scorej;coute ndl;fin .get(); /依次读取文本中的数据fin .close();ofstream fout;fout.open(f2.txt); / 建立 f2.txt 文件if(fout.fail()cout 文件建立失败.;exit(0);fout n;fout 参赛号姓名最低分最高分累计分最后得分n;fout ”n; / 向 f2.tx

13、t 中输出表头cout n;cout 参赛号姓名最低分最高分累计分最后得分n;cout n;fout.setf(ios_base:fixed);for (int h = 0;h rows; +h)fout.precisio n(1);fout.width(4);fout listh.number;/ 输出队员编号fout.width(12);fout ; / 输出队员名字fout.width(8);fout min_score(listh.score,cols); 输出最小分数 fout.width(10);fout max_score(listh.score,cols);

14、 / 输出最大分数 fout.width(11);fout get_tscore(listh.score, cols); / 输出累计分数fout.width(11);fout.precisi on( 2);fout get_lastscore(listh.score, cols); / 输出最后得分 fout en dl;cout.width(4);cout listh.number;/ 输出队员编号cout.width(12);cout ; / 输出队员名字cout.width(8);cout min_score(listh.score,cols); 输出最小分数 cout.width(10);co

温馨提示

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

评论

0/150

提交评论