已阅读5页,还剩3页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
.(一) 需求和规格说明 对参赛结果分数进行处理:参赛选手n人(n1),评委m人(m2),评委给每一选手打一个分数score(分数score为小于等于10的一个正实数)。选手的最后得分lastScore计算方法为 (1)m9时,去掉一个最高分和一个最低分后另m-2个得分的平均值。 (2)m9时,去掉两个最高分和两个最低分后另m-4个得分的平均值。 假设事先已经建立了text型的数据文件f1.txt,其中依次记录着n个选手的编号(一个正整数)、姓名(一个字符串)以及m个评委给出的得分。 请编制程序,依次从数据文件f1.txt中读入n个选手的有关信息,而后按上述规定方法计算出每一个选手的最后得分,而且往屏幕上以及另一个text型文件f2.txt中同时输出如下形式的结果信息。 假设参赛选手人数n=5,评委人数m=7,磁盘文件f1.txt中的初始数据为: 1 zhangjin 8.8 9.3 7.9 8.7 8.9 9.7 9.2 2 lintao 8.9 8.2 8.6 8.8 8.5 9.1 9.3 3 guojian 8.9 8.4 8.7 8.6 8.6 8.4 8.6 4 maling 7.9 8.3 8.5 8.6 8.5 8.9 8.3 5 liuyifan 9.5 9.1 9.8 9.2 9.0 9.5 8.9 那么,程序执行后,屏幕显示结果以及磁盘文件f2.txt中的结果均应该为: - 参赛号 姓 名 最高分 最低分 累积分 最后得分 - 1 zhangjin 9.7 7.9 44.9 8.98 2 lintao 9.3 8.2 43.9 8.78 3 guojian 8.9 8.4 42.9 8.58 4 maling 8.9 7.9 42.2 8.44 5 liuyifan 9.8 8.9 46.3 9.26 - 思考:可进一步考虑找出比赛的第1至第k名,也在屏幕以及f2.txt中同时输出相关的结果信息(k小于等于n,并规定若多个选手最后得分相同时,则有效分(即已删除原来的最高分后)中最高分高者名次优先)。 (二) 设计根据题目,建立结构体player,其成员如下:类型成员名描述intnumber选手序号charname选手名字double *score选手得分然后建立函数,如下表:类型函数名描述doublemax_score求最大分数doublemin_score求最小分数doublemax_score2求第二大分数doublemin_score2求第二小分数doubleget_totalscore求选手总分doubleget_tscore求选手累计得分doubleget_lastscore求选手最后得分 (三) 用户手册用户只需将f1.txt放入文件夹中,运行程序,然后会在屏幕输出文件f1.txt和文件f2.txt中的内容。文件f2.txt保存在文件夹中。(四) 调试及测试打开文件程序,运行计算各位选手的得分情况。(1)运行实例:(2)进一步改进:无论评委几人,程序都会找出第二高分和第二低分,可以改为只有在评委人数大于9人时执行。(3)附录源程序#include #include using namespace std; struct player /结构体 playerint number; char name40; double * score;/成员表列;double 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 min_score(double s,int n)/最低分 double min_score=s0; for(int i=0;i=si) min_score=si; return min_score; double max_score(double s,int n)/最高分 double max_score=s0; for(int i=0;in;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;in;i+) totalscore+=si; return totalscore; double min_score2(double s,int n)/求出第二低的分数min_score2int a;double min_score2; for(int i=0;in;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 max_score2;int b;for( int i=0;in;i+) if(si=max_score(s, n) b=i; for( i=0,sb=1.0;in;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)-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-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 = .) 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选手得分:endl;for (int m = 0; m listm.number;coutlistm.number ;cout ;for (int j = 0; j listm.scorej;coutlistm.scorej ;coutendl;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.txt中输出表头cout -n; cout 参赛号 姓 名 最低分 最高分 累计分 最后得分n; 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 min_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 max
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 温州大学《小学音乐课程设计与实践》2023-2024学年第一学期期末试卷
- 2024新版个体劳动协议样本版
- 2024监理服务扩展合同标准文本一
- 2025年度新能源汽车充电桩采购安装合同3篇
- 二零二五年科技园区PPP项目合同第三、四章技术创新与产业支持细则3篇
- 唐山科技职业技术学院《吉他(二)》2023-2024学年第一学期期末试卷
- 苏州农业职业技术学院《美国文学史与作品选读》2023-2024学年第一学期期末试卷
- 二零二五年度班主任班级管理师徒实践合作协议3篇
- 事业单位专任人员2024河南聘用协议模板版
- 石家庄城市经济职业学院《制药工程学》2023-2024学年第一学期期末试卷
- 护理伦理学(第二版)高职PPT完整全套教学课件
- 帕萨特B5维修手册及帕萨特B5全车电路图
- GB/T 25919.1-2010Modbus测试规范第1部分:Modbus串行链路一致性测试规范
- GB/T 22484-2008城市公共汽电车客运服务
- GB/T 14040-2007预应力混凝土空心板
- 带状疱疹护理查房课件整理
- 奥氏体型不锈钢-敏化处理
- 交通信号控制系统检验批质量验收记录表
- 弱电施工验收表模板
- 探究基坑PC工法组合钢管桩关键施工技术
- 国名、语言、人民、首都英文-及各地区国家英文名
评论
0/150
提交评论