数据结构课程设计(奥运会奖牌管理程序)(共25页).doc
《数据结构课程设计(奥运会奖牌管理程序)(共25页).doc》由会员分享,可在线阅读,更多相关《数据结构课程设计(奥运会奖牌管理程序)(共25页).doc(25页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、精选优质文档-倾情为你奉上1. 选题背景与意义背景: 奥运会历来是一场国际性质的全球体育盛会,2008北京奥运俨然已经成为中国的骄傲,中国运动健儿历来在奥运会上有突出的运动成绩,为国家带来很多荣誉。08奥运已经远去,12伦敦将要来临,届时,奥运会将会又成为全球人瞩目的焦点。主办国毫无例外将成为主角,它也成为显示综合国力的舞台。虽然外人在看那一幕幕的精彩冲刺,那些漂亮的烟花和惊喜的圣火点燃,但是奥运管理者却要为大赛的任何情况,任何时刻做好相应的准备。其中,奥运的金牌、奖牌管理必将是重中之重,在开赛之前其有关程序必须准确无误的运行,才能保证奥运畅通无阻的进行。在这种很受欢迎的情况下,我们选择编写跟
2、奥运有关的奖牌管理程序,必将受到有关管理者的欢迎,虽然我们不是专业的编程人员,但是可以为他们提供一些参考。意义: 编写与奖牌管理有关的程序后,管理者不用再为某一次的运动员获奖或者某一个国家的获奖而分散注意力,只需要在特定时刻、特定的项目、特定的运动员获奖时,将信息输入电脑中,此时计算机已经将数据记录,从而避免了靠人来记忆的局限性,保证了结果的准确,也是一种公平的体现。当然,编写完的程序会有很强大的功能,比如,当一个项目的决赛比完以后,需要进行颁奖典礼,此时只需要在电脑中输入此项目,立刻便有相应的获奖运动员及信息输出,再将此信息传送到后勤处,颁奖典礼便能顺利进行。另外,在每一天的比赛完成或者每一
3、场比赛完成,都会有奖牌榜、金牌榜的更新,此时,此程序便起了很大作用,不需要刻意编写,系统会在存储完成后自动的生成奖牌榜和金牌榜。这只是列举了此程序的部分作用,具体的很多实用性的价值会在程序中体现。需求分析1.目的要求: 要实现快速的存储,方便的查找,精确地排序过程。2.具体过程:(1)存储操作。存储奖牌有关的信息,此时要存储国家、金牌数、奖牌数。 (2)排序操作。对存储的金牌数和奖牌数运用两种不同的排序方式,分别把它们排序后输出,也就是金牌榜和奖牌榜。 (3)查找操作。按照输入的国家,可以运用一种查找方式找到对应国家的金牌数、奖牌数以及在榜单上的排名;按照输入的金牌数可以按照另一种查找方式找到
4、对应的国家以及此国家的奖牌数;按照一种查找方式根据奖牌数找到对应的国家以及此国家的金牌数。(1)存储操作。与上不同,此部分存储获得金牌的运动员、获奖时间、项目和国籍。(2)查找操作。输入获得金牌运动员的名字,能查找到他的国籍,所参加的项目以及获奖时间;输入国家,所有获得金牌的运动员及其获奖时间和所参加的项目全部可以输出;输入时间,当天的获得金牌的运动员及其国籍和所参加的运动项目均可以输出;输入运动项目,所有在该项上获得金牌的运动员及其国籍和获奖时间均可以找到。3.分析结果:此程序能准确无误的实现以上操作,所以实用性很高,它不仅可以应用到奥运会,在大小型的运动会等都可以用的到,而且方便快捷,是很
5、多大赛组织者希望看到和采用的,可以带来方便。 概要设计国家金牌(顺序查找)金牌国家(二分查找)奖牌国家(顺序查找)金牌运动员、国籍、获奖时间、项目之间相互查找(多种方式)运动员、国籍、项目、获奖时间国家、金牌数、奖牌数查找操作金牌榜(直接插入排序)奖牌榜(折半插入排序) 排序过程存储结构输入数据详细设计#include#include#include#define OK 1#define ERROR 0 #define OVERFLOW -2#define EQ(a,b) (a)=(b)#define LT(a,b) (a)next=NULL; printf(1).存储(国家、金牌数、奖牌数)
6、nn); printf(请输入要存储的国家个数nn); scanf(%d,&n); printf(请依次输入%d个国家的名字n,n); for(i=0;idata1.countryi); printf(请依次输入%d个国家的金牌数n,n); for(i=0;idata1.goldeni); Mi+1=L1-data1.goldeni; printf(请依次输入%d个国家的奖牌数n,n); for(i=0;in;i+) /*用一个循环,依次存储奖牌数,同时将 medal0n-1中的数存入N1n中*/ scanf(%d,&Qi); while(Qidata1.medali=Qi; printf(n
7、n(2).排序(金牌榜)nn); /*直接插入排序*/ for(i=2;i=n;+i) /*在数组M中按照插入排序从小到大排列金牌数*/if(MiMi-1) /*若,则需要把Mi插入到有序子表中*/ M0=Mi; /*Mi中的值放到M0中作为监视哨*/ Mi=Mi-1; for(j=i-2;M0Mj;-j) /*除后两个外依次与监视哨比较,若, Mj+1=Mj; 则记录后移*/Mj+1=M0; /*插入到正确位置*/ printf(nn下面是金牌排序显示:nn);for(i=1;i=n;i+)printf(%d ,Mi); for(i=0;i=1;i-)/*用两个for循环找到金牌数由多到少的
8、国家在原来存储中 for(j=0;jdata1.goldenj) printf(t%s t%dt %dn,L1-data1.countryj,L1-data1.goldenj,L1-data1.medalj); Gj=j; /*j值放于数组G中相应的位置,使j在 下一次循环时不能等于以前找过的值*/ printf(nn排序(奖牌榜)nn); /*折半插入排序*/ for(i=2;i=n;+i) N0=Ni; /*放于N0中起监视作用*/ low=1; high=i-1; while(low=high+1;-j) /*记录后移*/ Nj+1=Nj; Nhigh+1=N0; /*插入*/ prin
9、tf(nn下面是奖牌排序显示:nn); for(i=1;i=1;i-) /*用两个for循环找到奖牌数由多到少的国家在原来存储中 for(j=0;jdata1.medalj) printf(t%s t%dt %dn,L1-data1.countryj,L1-data1.goldenj,L1-data1.medalj); Hj=j; /*j值放于数组H中相应的位置,使j在 下一次循环时不能等于以前找过的值*/ printf(nn(3).查找(国家金牌数)nn); printf(请输入要查找的国家个数kn); scanf(%d,&k); while(kn) /*此部分为判断要查找的国家数目是否 超
10、出范围,若超出,需要重新输入*/ printf(您要查找的国家个数大于存储个数,请重新输入n); scanf(%d,&k); printf(请依次输入这个%d国家的名字n,k); for(i=0;ik;i+) l=0; scanf(%s,Wi); for(j=0;jdata1.countryj) 较,找到国家对应的位置*/ printf(n此国家的金牌数为%d,奖牌数为%dnn,L1-data1.goldenj,L1-data1.medalj); l=1; while(l=0) /*若j循环一趟没有找到与Wi相同的 值,则运行while*/ printf(n没有查找到您要找的这个国家,请重新输
11、入nn); scanf(%s,Wi); for(j=0;jdata1.countryj) printf(n此国家的金牌数为%d,奖牌数为%dnn,L1-data1.goldenj,L1-data1.medalj); l=1; /*给l赋值1,保证只要输错就一直进行 while循环*/ printf(nn查找(金牌数国家)nn);/*有序数组M中二分法查找金牌的过 printf(请输入您要查找的次数n); 程*/scanf(%d,&m);printf(请连续%d次输入金牌数n,m);for(i=0;im;i+) l=0; scanf(%d,&Fi); low=1; high=n; while(l
12、ow=high) mid=(low+high)/2; if(EQ(Fi,Mmid) for(j=0;jdata1.goldenj)/*由有序组中的金牌找到其在原来存储中的位置*/printf(n此金牌数对应的国家为%s,奖牌数为%dnn,L1-data1.countryj,L1-data1.medalj); l=1; break; /*若在M中找到了相应的金牌数,在输 出后要跳出if,不然为死循环*/else if(LT(Fi,Mmid) high=mid-1; else low=mid+1; while(l=0) printf(n没有找到该奖牌数所对应的国家,请重新输入nn); scanf(
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 课程设计 奥运会 奖牌 管理程序 25
限制150内