




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、实验报告班级: 姓名: 学号日期课题一 运动会分数统计一.需求分析:1任务:参加运动会有n个学校,学校编号为1n。比赛分成m个男子项目,和w个女子项目。项目编号为男子1m,女子m+1m+w。不同的项目取前五名或前三名积分;取前五名的积分分别为:7、5、3、2、1,前三名的积分分别为:5、3、2;哪些项目取前五名或前三名由学生自己设定。(m<=20,n<=20).2。功能要求:1) 可以输入各个项目的前三名或前五名的成绩;2) 能统计各学校总分;3) 可以按学校编号、学校总分、男女团体总分排序输出;4) 可以按学校编号查询学校某个项目的情况;5) 可以按项目编号查询取得前三或前五名的
2、学校。3程序执行的命令包括:1) 输入所需要的各项数据2)对成绩进行排序3)查找成绩4)退出结束4测试数据: 输入五个学校的名字:东华,上外,外贸,视觉,工技大输入四个体育项目:篮球,游泳,足球,马拉松。输入篮球前五名的学校代码排名情况:1 3 5 2 4输入游泳前三名学校代码排名情况:1 2 3输入足球前三名学校代码情况:1 4 2输入马拉松前三名的学校代码排名情况:1 5 3二概要设计:为了实现上述程序需要使用要串和线性表,因此需要两个抽象数据类型:串和线性顺序表。1串的抽象数据类型的定义如下:ADT String数据对象:D=ai|ai characterSet,I=1,2,,n,n&g
3、t;=0数据关系:R1=<ai-1,ai>|ai-1,aiD,I=2,,n基本操作: StrAssign(&T,chars)初始条件:chars是字符串常量。操作结果:生成一起值等于chars的字符串T.StrCopy(&T,s)初始条件: 串S存在操作结果:由串复制得串T.StrEmpty(s)初始条件: 串S存在。操作结果:若S为空串,则返回TRUE,否则返回FALSE.Strcompare(S,T)初始条件:串S和T存在。操作结果:若S>T,则返回>0;若S=T,则返回值=0,若S<T,则返回值<0.Strlength(S)初始条件:
4、串S存在。操作结果:返回S的元素个数,称为串的长度。ClearString(&S)初始条件: 串S存在。操作结果:将S清为空串。Concat(&T,S1,S2)初始条件:串S1和串S2都存在。操作结果:用Y返回由S1和S2连接而成的新串。2.现性顺序表的抽象数据定义如下:Typedef Struct LNode ElemType *elemInt lengthInt listsize;LNode,*linklist; 3.本程序分为三个模块:1) 主程序模块 main()while(标志!=0) 执行命令; 输入标志; switch(标志) case 标志:命令;break;
5、default:命令;2)赋值模块实现各个数据的赋值 Sho fuzhi() for( )输入学校的名字 for()输入几个体育项目For()按成绩输入各个体育项目的学校的名次3)排序模块:对各项成绩进行排序Void paixu( ) 给i,j,赋初值; For() If判断; 排序; 输出结果;4)查询模块;根据要求查询成绩的排名情况 Void chaxun () 定义临时变量; 输入要查找的代码; For() If(命令=进入) 输出成绩; 各个模块之间的关系如下: 主程序模块 赋值模块 排序模块 查找模块三详细设计:#include"iostream.h" #incl
6、ude"malloc.h" #include <string.h> #include"stdlib.h" #define m 4 #define n 5 1.运动项目的类型 typedef struct sport char sportname20; int num;int s; spo; typedef struct sport1 char schoolname20; spo sportsm; int zong,boy,girl,zong1,boy1,girl1; spos,*spor; 2.学校名字的类型typedef struct sc
7、hool spos shoolsn; *sho,shos; 3.进行赋值操作,输入学校名字和运动会项目以及其的排名情况sho fuzhi() sho l;int a,b,c,d,e; l=(shos*)malloc(sizeof(shos); int i,j; for(i=0;i<n;i+) cout<<"请输入"<<i+1<<"个学校的名字"<<endl; cin>>l->shoolsi.schoolname;system("cls"); for(i=0;i&l
8、t;m;i+) cout<<"请输入"<<i+1<<"个运动项目的名字"<<endl; cin>>l->shools0.sportsi.sportname;system("cls"); for(j=0;j+;j<n) strcpy(l->shoolsj.sportsi.sportname,l->shools0.sportsi.sportname); for(i=0;i<n;i+) for(j=0;j<m;j+) l->shoolsi.
9、sportsj.num=0;l->shoolsi.sportsj.s=0; l->shoolsi.zong=0;l->shoolsi.boy=0;l->shoolsi.girl=0; for(i=0;i<m-3;i+) cout<<"请按各学校的代码进行成绩输入"<<endl; for(j=0;j<n;j+) cout<<j+1<<"."<<l->shoolsj.schoolname; cout<<endl; cout<<&quo
10、t;请输入"<<l->shools0.sportsi.sportname<<"的前5名的学校代码" cin>>a>>b>>c>>d>>e;system("cls"); l->shoolsa-1.sportsi.num=7; l->shoolsb-1.sportsi.num=5; l->shoolsc-1.sportsi.num=3; l->shoolsd-1.sportsi.num=2; l->shoolse-1.sports
11、i.num=1; for(i=m-3;i<m;i+) cout<<"请按各学校的代码进行成绩输入"<<endl; for(j=0;j<n;j+) cout<<j+1<<"."<<l->shoolsj.schoolname<<" " cout<<endl; cout<<"请输入"<<l->shools0.sportsi.sportname<<"的前3名的学校代码&q
12、uot; cin>>a>>b>>c;system("cls"); l->shoolsa-1.sportsi.num=5; l->shoolsb-1.sportsi.num=3; l->shoolsc-1.sportsi.num=2; return l; void sum(sho l) int i,j; for(i=0;i<n;i+) for(j=0;j<m;j+) l->shoolsi.zong=l->shoolsi.zong+l->shoolsi.sportsj.num; for(j=0;
13、j<m-3;j+)l->shoolsi.boy=l->shoolsi.boy+l->shoolsi.sportsj.num; for(j=m-3;j<m;j+)l->shoolsi.girl=l->shoolsi.girl+l->shoolsi.sportsj.num; cout<<l->shoolsi.schoolname<<"总分为"<<l->shoolsi.zong<<endl; 4.对输入的分数情况进行排序void paixu1(sho l) int i,j,
14、k=1; int temp=0; for(j=0;j<n;j+) for(i=0;i<n;i+) if(l->shoolsi.zong>l->shoolsj.zong) k+; l->shoolsj.zong1=k; k=1; for(j=1;j<n+1;j+) for(i=0;i<n;i+) if(l->shoolsi.zong1=j) cout<<"总分第"<<j<<"名学校为:"<<l->shoolsi.schoolname<<e
15、ndl; void paixu2(sho l) int i,j,k=1; int temp=0; for(j=0;j<n;j+) for(i=0;i<n;i+) if(l->shoolsi.boy>l->shoolsj.boy) k+; l->shoolsj.boy1=k; k=1; for(j=1;j<n+1;j+) for(i=0;i<n;i+) if(l->shoolsi.boy1=j) cout<<"男子第"<<j<<"名学校为:"<<l->
16、;shoolsi.schoolname<<endl; void paixu3(sho l) int i,j,k=1; int temp=0; for(j=0;j<n;j+) for(i=0;i<n;i+) if(l->shoolsi.girl>l->shoolsj.girl) k+; l->shoolsj.girl1=k; k=1; for(j=1;j<n+1;j+) for(i=0;i<n;i+) if(l->shoolsi.girl1=j) cout<<"女子第"<<j<&l
17、t;"名学校为:"<<l->shoolsi.schoolname<<endl; 5.根据需要查询各项成绩排名void chaxun1(sho l) int j,a,b; cout<<"请按各学校的代码进行成绩查询"<<endl; for(j=0;j<n;j+) cout<<j+1<<"."<<l->shoolsj.schoolname; cout<<endl; cin>>a; cout<<"
18、;请按各运动的项目的代码进行成成绩查询"<<endl; for(j=0;j<m;j+) cout<<j+1<<"."<<l->shools0.sportsj.sportname; cout<<endl; cin>>b; cout<<"该学校"<<l->shools0.sportsb-1.sportname<<"项目分数为:"<<l->shoolsa-1.sportsb-1.num;
19、cout<<endl; void chaxun2(sho l) int i,j,a,k=1; cout<<"请按各运动的项目的代码进行成成绩查询"<<endl; for(j=0;j<m;j+) cout<<j+1<<"."<<l->shools0.sportsj.sportname; cout<<endl; cin>>a; for(j=0;j<n;j+) for(i=0;i<n;i+) if(l->shoolsi.sportsa-
20、1.num>l->shoolsj.sportsa-1.num) k+; l->shoolsj.sportsa-1.s=k; k=1; for(j=1;j<n+1;j+) for(i=0;i<n;i+) if(l->shoolsi.sportsa-1.s=j&&l->shoolsi.sportsa-1.num>0) cout<<l->shools0.sportsa-1.sportname<<"第"<<j<<"名学校为:"<<l-
21、>shoolsi.schoolname<<endl; 6.主函数及其他代码的算法main() sho l;int flog=1; while(flog!=0) cout<<"请选择您要执行的命令:"<<endl; cout<<"1。赋值 2.求总 3.总分排序 4.男子项目排序 5。女子项目排序 6.学校某个项目查询" cout<<"7.某项目排名情况查询 0.退出"<<endl; cin>>flog; switch(flog) case 1:s
22、ystem("cls");l=fuzhi();break; case 2:system("cls");sum(l);break; case 3:system("cls");paixu1(l);break; case 4:system("cls");paixu2(l);break; case 5:system("cls");paixu3(l);break; case 6:system("cls");chaxun1(l);break; case 7:system("cl
23、s");chaxun2(l);break; case 0:cout<<"谢谢使用"<<endl;break; default:system("cls");cout<<"请重新选择"<<endl; 7.函数的调用关系图 MainFuzhi() sum(1) paixu1(l) paixu2(l) paixu3(l) chaxun1(l) chaxun2(l)四调试分析:1.在定义学校及运动会项目的类型是直接使用数组去定义,设定了好几个数组,这样在使用的过程中显得非常麻烦,改进方法
24、后运用线性表去将学校及各个运动项目定义为结构变量,结构变量可以作为数组元素,同时这些数组还可以成为结构类型的成员,并且结构变量和志向结构变量的指针都可以作为函数参数和返回值。这样在使用的过程中间少了很多不必要的麻烦。2.由于学校的个数和运动项目的个数不是很多,所以在查找的选择上没有使用其他计较麻烦的查找方式而是直接使用比较简便的、针对查找对象较少的情况下使用的直接查找法3.本程序的算法都比较合理,采用了线性顺序表和串的方式,尽可能的减少不必要的麻烦。模块的划分也十分的合理,根据题目的要求,将模块十分情绪的分成四个大的模块,由于数据对象并比较少,所以都是采用最简便最有效的方式。然后通过主函数直接
25、调用这些函数已达到完成所需要的命令。4.算法的时空分析1.由于学校的个数我定义为n个,运动项目的个数我定义为m个,所以在使用穿的操作strcopy时的复杂度是O(n),其他都为字符串数组元素的使用,比较简单分明在求总的过程的复杂度为O(m*n),在总分排序过程中的时间复杂度为O(m*n2),男子项目和女子项目排序的时间复杂度为O(n2),学校某个项目查询的时间复杂度为O(n*m),某项目排名情况的复杂度为O(m*n2)。2.本实验采用数据抽象的方式将程序分为三个层次结构:结构模块,串模块,主控模块,很亲系的将设计思路反映出来,各模块的使用方便实现调试方便。五用户手册:1 本程序的运行环境为DOS操作系统,执行文件为ydhfstj.cpp。2 进入演示程序后,既显示用户界面:请选择您要执行的命令:1。赋值 2.求总 3.总分排序 4.男子项目排序 5。女子项目排序 6.学校某个项目查询7.某项目排名情况查询 0.退出按要求输入你要执行的命令3 首先进入“赋值”的命令,输入1+回车键,然后按照提示输入所需要的数据值,结束符为回车键,当所有赋值都成功后,按回车键又进入上面的总界面。4 根据你所需要的要求可以进行以上
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 河南省周口市项城市2024-2025学年高三下学期高考模拟一(开学诊断考试)数学试题(原卷版+解析版)
- 江苏省苏州市苏州工业园区星湾学校2024-2025学年下学期3月月考八年级数学试题(原卷版+解析版)
- 四川省资阳市安岳中学2025届高三下学期二模数学试题(原卷版+解析版)
- 《乡土中国》导读
- 2025年风力提水机组项目合作计划书
- 三方驾驶培训合作协议
- 售后变更通知函
- 长沙报关委托协议
- 汽车租赁合同范本大全
- 钢筋运输应急预案协议
- 01车轮踏面清扫装置左
- 中国气血健康白皮书
- 食品的营养课件
- 化学品安全技术说明书 MSDS( 石脑油)
- 电位计算精品课件
- DB13T 5542-2022 水利水电工程施工组织设计编制指南
- 中子源介绍课件
- 二期6KV系统1
- 研究生面试复试英语+常问问题
- 安徽省教育科学研究项目课题申请书【模板】
- 参考文献的标注规范
评论
0/150
提交评论