數(shù)據(jù)結(jié)構(gòu)運(yùn)動(dòng)會(huì)分?jǐn)?shù)統(tǒng)計(jì)報(bào)告_第1頁(yè)
數(shù)據(jù)結(jié)構(gòu)運(yùn)動(dòng)會(huì)分?jǐn)?shù)統(tǒng)計(jì)報(bào)告_第2頁(yè)
數(shù)據(jù)結(jié)構(gòu)運(yùn)動(dòng)會(huì)分?jǐn)?shù)統(tǒng)計(jì)報(bào)告_第3頁(yè)
數(shù)據(jù)結(jié)構(gòu)運(yùn)動(dòng)會(huì)分?jǐn)?shù)統(tǒng)計(jì)報(bào)告_第4頁(yè)
數(shù)據(jù)結(jié)構(gòu)運(yùn)動(dòng)會(huì)分?jǐn)?shù)統(tǒng)計(jì)報(bào)告_第5頁(yè)
已閱讀5頁(yè),還剩7頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

運(yùn)動(dòng)會(huì)分?jǐn)?shù)統(tǒng)計(jì):程序要求:任務(wù):參加運(yùn)動(dòng)會(huì)有n個(gè)學(xué)校,學(xué)校編號(hào)為1……n。比賽分成m個(gè)男子項(xiàng)目,和w個(gè)女子項(xiàng)目。項(xiàng)目編號(hào)為男子1……m,女子m+1……m+w。不同的項(xiàng)目取前前三名積分;前三名的積分分別為:5、3、2。(m、w<=20,n<=10)功能要求:可以輸入各個(gè)項(xiàng)目的前三名或前五名的成績(jī);能統(tǒng)計(jì)各學(xué)??偡郑豢梢园磳W(xué)校編號(hào)、學(xué)校總分、男女團(tuán)體總分排序輸出;可以按學(xué)校編號(hào)查詢學(xué)校某個(gè)項(xiàng)目的情況;可以按項(xiàng)目編號(hào)查詢?nèi)〉们叭蚯拔迕膶W(xué)校。規(guī)定:輸入數(shù)據(jù)形式和范圍:10以內(nèi)的整數(shù)(如果做得更好可以輸入學(xué)校的名稱,運(yùn)動(dòng)項(xiàng)目的名稱)輸出形式:有中文提示,各學(xué)校分?jǐn)?shù)為整形界面要求:有合理的提示,每個(gè)功能可以設(shè)立菜單,根據(jù)提示,可以完成相關(guān)的功能要求。存儲(chǔ)結(jié)構(gòu):學(xué)生自己根據(jù)系統(tǒng)功能要求自己設(shè)計(jì)。請(qǐng)?jiān)谧詈蟮纳辖毁Y料中指明你用到的存儲(chǔ)結(jié)構(gòu);測(cè)試數(shù)據(jù):要求使用1、全部合法數(shù)據(jù);2、整體非法數(shù)據(jù);3、局部非法數(shù)據(jù)。進(jìn)行程序測(cè)試,以保證程序的穩(wěn)定。測(cè)試數(shù)據(jù)及測(cè)試結(jié)果請(qǐng)?jiān)谏辖坏馁Y料中寫明。本程序中學(xué)校的存儲(chǔ)結(jié)構(gòu)為鏈表:PPrevschool1next頭結(jié)點(diǎn)Prevschool(最后)next………………其中school類為:classschool:publicathlete/*學(xué)校*/{…… public:intcount;/*學(xué)校獲獎(jiǎng)數(shù)*/intserial;/*學(xué)校編號(hào)*/intmenscore;/*男選手總分*/intwomenscore;/*女選手總分*/inttotalscore;/*總分*/athleteath[MaxSize];/*獲獎(jiǎng)運(yùn)動(dòng)員信息數(shù)組,包括分?jǐn)?shù),名次,項(xiàng)目*/ school*prev;//前指針school*next;//后指針};其中部分主要的函數(shù):添加操作add(school*&head)查詢操作checkFunc(school*head,int&n)文件保存save(school*head)總分快速排序tquicksort(vector<school*>&v,intfirst,intlast)總分基數(shù)排序tbaseSort(vector<school*>&v,intd)2.關(guān)鍵算法{……添加項(xiàng)目號(hào)for(i=1;i<=n;i++){輸入第i名運(yùn)動(dòng)員的學(xué)校編號(hào)temp……while(first!=head) //遍歷鏈表,直到找到編號(hào)為serial的學(xué)校所在結(jié)點(diǎn),或first指向表頭head{ if(first->serial==要添加的編號(hào)) { (first->ath[first->count]).item=要添加的項(xiàng)目號(hào); (first->ath[first->count]).range=i(名次) First指向的學(xué)校的項(xiàng)目加一; 更新總分 break; } first=first->next;……}開始輸入項(xiàng)目編號(hào)temp是數(shù)字NY0<temp<18NY開始輸入項(xiàng)目編號(hào)temp是數(shù)字NY0<temp<18NY輸出“項(xiàng)目不存在”學(xué)校遍歷結(jié)束temp存在YNNextschoolNtemp是奇數(shù)NY取5名取3名輸入獲獎(jiǎng)的學(xué)校編號(hào)se1<se<15NY項(xiàng)目號(hào)、名次、運(yùn)動(dòng)員名字添進(jìn)學(xué)校所在結(jié)點(diǎn)Y繼續(xù)添加YN結(jié)束 while(first!=head) while(first!=head){……if(輸入的項(xiàng)目編號(hào)==學(xué)校第i位運(yùn)動(dòng)員的項(xiàng)目){ 把第i位運(yùn)動(dòng)員的項(xiàng)目,學(xué)校編號(hào)、名次、得分信息壓入向量; }…… } first=first->next;……輸出向量中的內(nèi)容 //按學(xué)校編號(hào)順序輸出所有參賽學(xué)校運(yùn)動(dòng)會(huì)成績(jī)voidserialSort(vector<school*>&v){ for(inti=0;i<v.size();i++) {//按學(xué)校編號(hào)順序輸出所有參賽學(xué)校運(yùn)動(dòng)會(huì)成績(jī)voidserialSort(vector<school*>&v){ for(inti=0;i<v.size();i++) { cout<<*v[i]; }}按學(xué)校編號(hào)統(tǒng)計(jì)按學(xué)校名次統(tǒng)計(jì)按男團(tuán)總分統(tǒng)計(jì)按女團(tuán)總分統(tǒng)計(jì)返回查詢菜單返回主菜單所有學(xué)??偡纸y(tǒng)計(jì)表學(xué)校成績(jī)查詢項(xiàng)目情況查詢返回主菜單 詳細(xì)代碼:#include<stdio.h>#include<stdlib.h>#include<iostream.h>#defineLT(a,b)((a)<(b))#defineLIST_INIT_SIZE100//線性表存儲(chǔ)空間的初始分配量#defineLISTINCREMENT10//線性表存儲(chǔ)空間的分配增量typedefintInfoType;//定義其它數(shù)據(jù)項(xiàng)的類型typedefintKeyType;//定義關(guān)鍵字類型為整型structRedType//記錄類型{KeyTypekey;//關(guān)鍵字項(xiàng)InfoTypeotherinfo;//其它數(shù)據(jù)項(xiàng),具體類型在主程中定義};typedefstruct{intschnum;//學(xué)校的編號(hào)intmscore[20];//學(xué)校在各個(gè)男生項(xiàng)目的積分intwscore[20];//學(xué)校在各個(gè)女生項(xiàng)目的積分}school;//學(xué)校記錄類型typedefintElemType;structSqList{ElemType*elem;//存儲(chǔ)空間基址intlength;//當(dāng)前長(zhǎng)度intlistsize;//當(dāng)前分配的存儲(chǔ)容量(以sizeof(ElemType)為單位)};structList{RedTyper[20];intlength;};intInitList(SqList&L)//算法.3{//操作結(jié)果:構(gòu)造一個(gè)空的順序線性表L.elem=(ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType));if(!L.elem)exit(-1);//存儲(chǔ)分配失敗L.length=0;//空表長(zhǎng)度為L(zhǎng).listsize=LIST_INIT_SIZE;//初始存儲(chǔ)容量return1;}intListInsert(SqList&L,inti,ElemTypee)//算法.4{//初始條件:順序線性表L已存在,≤i≤ListLength(L)+1//操作結(jié)果:在L中第i個(gè)位置之前插入新的數(shù)據(jù)元素e,L的長(zhǎng)度加ElemType*newbase,*q,*p;if(i<1||i>L.length+1)//i值不合法return0;if(L.length>=L.listsize)//當(dāng)前存儲(chǔ)空間已滿,增加分配{if(!(newbase=(ElemType*)realloc(L.elem,(L.listsize+LISTINCREMENT)*sizeof(ElemType))))exit(-1);//存儲(chǔ)分配失敗L.elem=newbase;//新基址L.listsize+=LISTINCREMENT;//增加存儲(chǔ)容量}q=L.elem+i-1;//q為插入位置for(p=L.elem+L.length-1;p>=q;--p)//插入位置及之后的元素右移*(p+1)=*p;*q=e;//插入e++L.length;//表長(zhǎng)增return1;}voidInsertSort(List&L){//對(duì)順序表L作直接插入排序。算法.1inti,j;for(i=2;i<=L.length;++i)ifLT(L.r[i].key,L.r[i-1].key)//"<",需將L.r[i]插入有序子表{L.r[0]=L.r[i];//復(fù)制為哨兵for(j=i-1;LT(L.r[0].key,L.r[j].key);--j)L.r[j+1]=L.r[j];//記錄后移L.r[j+1]=L.r[0];//插入到正確位置}}voidprint(ListL){inti;for(i=1;i<=L.length;i++)printf("(%d,%d,%d)\n",L.length-i+1,L.r[i].otherinfo,L.r[i].key);printf("\n");}voidmain()//規(guī)定男生項(xiàng)目前三名分別積分、、,女生項(xiàng)目前五名分別積分、、、、//規(guī)定沒有名次則積分為,不考慮并列的情況 //請(qǐng)正確輸入各學(xué)校對(duì)應(yīng)項(xiàng)目的積分{intn,m,w,i,j;schoola[20];intsummscore[20],sumwscore[20],sumscore[20];//定義存儲(chǔ)各個(gè)學(xué)校男團(tuán)、女團(tuán)、總分RedTyped[20];//定義排序所需的數(shù)組為RedType型SqListL,Lm,Lw;//定義存放各個(gè)學(xué)??偡帧⒛袌F(tuán)、女團(tuán)積分的順序線性表ListLr;//定義積分排序所需的順序線性表InitList(L);//初始化各線性表InitList(Lm);InitList(Lw);cout<<"請(qǐng)輸入?yún)⒓舆\(yùn)動(dòng)會(huì)的學(xué)校數(shù)目(~20):"<<endl;cin>>n;while(n<5||n>20){ cout<<"輸入學(xué)校數(shù)目有誤,請(qǐng)重新輸入!"<<endl; cout<<"請(qǐng)輸入?yún)⒓舆\(yùn)動(dòng)會(huì)的學(xué)校數(shù)目(~20):"<<endl; cin>>n;}cout<<"請(qǐng)分別輸入男生、女生的項(xiàng)目數(shù)目(~20):"<<endl;cin>>m>>w;cout<<"規(guī)定男生項(xiàng)目前三名分別積分、、"<<endl;cout<<"女生項(xiàng)目前五名分別積分、、、、"<<endl;cout<<"沒有名次則積分為,且本程序不涉及并列排名的情況!"<<endl;cout<<"請(qǐng)正確輸入各學(xué)校對(duì)應(yīng)項(xiàng)目的積分!\n"<<endl;for(i=1;i<=n;i++){ a[i-1].schnum=i;//賦給學(xué)校對(duì)應(yīng)的編號(hào) printf("請(qǐng)輸入學(xué)校%d男生各個(gè)項(xiàng)目的成績(jī):\n",i); for(j=1;j<=m;j++)//分別輸入對(duì)應(yīng)學(xué)校的各個(gè)男生項(xiàng)目的積分情況 cin>>a[i-1].mscore[j-1]; printf("請(qǐng)輸入學(xué)校%d女生各個(gè)項(xiàng)目的成績(jī):\n",i); for(j=1;j<=w;j++)//分別輸入對(duì)應(yīng)學(xué)校的各個(gè)女生項(xiàng)目的積分情況cin>>a[i-1].wscore[j-1];}for(i=0;i<n;i++){ summscore[i]=a[i].mscore[0]; for(j=1;j<m;j++) summscore[i]+=a[i].mscore[j];//求出學(xué)校男團(tuán)總分并存儲(chǔ)到數(shù)組中對(duì)應(yīng)位置 ListInsert(Lm,i+1,summscore[i]);//將學(xué)校男團(tuán)總分插入存放在線性表對(duì)應(yīng)位置 sumwscore[i]=a[i].wscore[0]; for(j=1;j<w;j++) sumwscore[i]+=a[i].wscore[j];//求出學(xué)校女團(tuán)總分并存儲(chǔ)到數(shù)組中對(duì)應(yīng)位置 ListInsert(Lw,i+1,sumwscore[i]);//將學(xué)校女團(tuán)總分插入存放在線性表對(duì)應(yīng)位置 sumscore[i]=summscore[i]+sumwscore[i];//求出學(xué)??偡植⒋鎯?chǔ)到數(shù)組中對(duì)應(yīng)位置 ListInsert(L,i+1,sumscore[i]);//將學(xué)??偡植迦氪娣旁诰€性表對(duì)應(yīng)位置}intflag=1;charch;while(flag)//當(dāng)flag為真時(shí)執(zhí)行循環(huán){printf("請(qǐng)選擇:\n");printf("1.查看各學(xué)校總分統(tǒng)計(jì),并按學(xué)校編號(hào)排序輸出查看\n");printf("2.按學(xué)??偡峙判蜉敵霾榭碶n"); printf("3.按男團(tuán)總分排序輸出查看\n"); printf("4.按女團(tuán)總分排序輸出查看\n");printf("5.按學(xué)校編號(hào)查詢學(xué)校某個(gè)項(xiàng)目的情況\n");printf("6.按項(xiàng)目編號(hào)查詢?nèi)〉们叭蚯拔迕膶W(xué)校\n");printf("7.退出程序\n");cin>>ch;switch(ch) { case'1'://查看各學(xué)??偡纸y(tǒng)計(jì),并按學(xué)校編號(hào)排序輸出查看 for(i=0;i<n;i++) { printf("學(xué)校編號(hào):%d學(xué)??偡郑?d\n",i+1,L.elem[i]); } break;case'2'://按學(xué)校總分排序輸出查看 Lr.length=n; for(i=0;i<n;i++) { d[i].key=L.elem[i]; d[i].otherinfo=i+1; Lr.r[i+1]=d[i]; } InsertSort(Lr); cout<<"按學(xué)??偡峙判蚝笠?名次,學(xué)校編號(hào),學(xué)校總分)形式輸出為:"<<endl; print(Lr); break;case'3'://按男團(tuán)總分排序輸出查看 Lr.length=n; for(i=0;i<n;i++) { d[i].key=Lm.elem[i]; d[i].otherinfo=i+1; Lr.r[i+1]=d[i]; } InsertSort(Lr); cout<<"按男團(tuán)總分排序后以(名次,學(xué)校編號(hào),男團(tuán)總分)形式輸出為:"<<endl; print(Lr); break;case'4'://按女團(tuán)總分排序輸出查看 Lr.length=n; for(i=0;i<n;i++) { d[i].key=Lw.elem[i]; d[i].otherinfo=i+1; Lr.r[i+1]=d[i]; } InsertSort(Lr); cout<<"按女團(tuán)總分排序后以(名次,學(xué)校編號(hào),女團(tuán)總分)形式輸出為:"<<endl; print(Lr); break;case'5'://按學(xué)校編號(hào)查詢學(xué)校某個(gè)項(xiàng)目的情況 ints,t; cout<<"請(qǐng)輸入要查詢的學(xué)校編號(hào):"<<endl; cin>>s; while(s<1||s>n)//輸入學(xué)校編號(hào)不在初始定義范圍之內(nèi) { cerr<<"輸入學(xué)校編號(hào)有誤,請(qǐng)重新正確輸入!"<<endl; cout<<"請(qǐng)輸入要查詢的學(xué)校編號(hào):"<<endl; cin>>s;//重新輸入 } i=0; while(a[i].schnum!=s) ++i;//通過(guò)循環(huán)找到輸入編號(hào)的對(duì)應(yīng)學(xué)校在數(shù)組a中的位置 cout<<"請(qǐng)輸入要查詢的項(xiàng)目序號(hào):"<<endl; cin>>t; while(t<1||t>m+w)//輸入項(xiàng)目序號(hào)不在初始定義范圍之內(nèi) { cout<<"輸入項(xiàng)目序號(hào)有誤,請(qǐng)重新正確輸入!"<<endl; cout<<"請(qǐng)輸入要查詢的項(xiàng)目序號(hào):"<<endl; cin>>t;//重新輸入 } if(t<=m)//該項(xiàng)目屬于男生項(xiàng)目 printf("該學(xué)校該項(xiàng)目積分為:%d\n",a[i].mscore[t-1]);//從學(xué)校男生項(xiàng)目積分?jǐn)?shù)組里輸出 else//該項(xiàng)目屬于女生項(xiàng)目 printf("該學(xué)校該項(xiàng)目積分為:%d\n",a[i].wscore[t-m-1]);//從學(xué)校女生項(xiàng)目積分?jǐn)?shù)組里輸出 break; case'6'://按項(xiàng)目編號(hào)查詢?nèi)〉们叭蚯拔迕膶W(xué)校 cout<<"請(qǐng)輸入要查詢的項(xiàng)目序號(hào):"<<endl; cin>>t; while(t<1||t>m+w)//輸入項(xiàng)目序號(hào)不在初始定義范圍之內(nèi) { cout<<"輸入項(xiàng)目序號(hào)有誤,請(qǐng)重新正確輸入!"<<endl; cout<<"請(qǐng)輸入要查詢的項(xiàng)目序號(hào):"<<endl; cin>>t;//重新輸入 } if(t<=m)//該項(xiàng)目屬于男生項(xiàng)目 { i=0; while(a[i].mscore[t-1]!=5) ++i;//通過(guò)循環(huán)找到該項(xiàng)目第一名學(xué)校在a中的位置 printf("獲得該項(xiàng)目第一名的是學(xué)校:%d號(hào)\n",i+1); i=0; while(a[i].mscore[t-1]!=3) ++i;//通過(guò)

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論