版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
運動會分數(shù)統(tǒng)計:程序要求:任務:參加運動會有n個學校,學校編號為1……n。比賽分成m個男子項目,和w個女子項目。項目編號為男子1……m,女子m+1……m+w。不同的項目取前前三名積分;前三名的積分分別為:5、3、2。(m、w<=20,n<=10)功能要求:可以輸入各個項目的前三名或前五名的成績;能統(tǒng)計各學??偡郑豢梢园磳W校編號、學??偡?、男女團體總分排序輸出;可以按學校編號查詢學校某個項目的情況;可以按項目編號查詢?nèi)〉们叭蚯拔迕膶W校。規(guī)定:輸入數(shù)據(jù)形式和范圍:10以內(nèi)的整數(shù)(如果做得更好可以輸入學校的名稱,運動項目的名稱)輸出形式:有中文提示,各學校分數(shù)為整形界面要求:有合理的提示,每個功能可以設立菜單,根據(jù)提示,可以完成相關的功能要求。存儲結構:學生自己根據(jù)系統(tǒng)功能要求自己設計。請在最后的上交資料中指明你用到的存儲結構;測試數(shù)據(jù):要求使用1、全部合法數(shù)據(jù);2、整體非法數(shù)據(jù);3、局部非法數(shù)據(jù)。進行程序測試,以保證程序的穩(wěn)定。測試數(shù)據(jù)及測試結果請在上交的資料中寫明。本程序中學校的存儲結構為鏈表:PPrevschool1next頭結點Prevschool(最后)next………………其中school類為:classschool:publicathlete/*學校*/{…… public:intcount;/*學校獲獎數(shù)*/intserial;/*學校編號*/intmenscore;/*男選手總分*/intwomenscore;/*女選手總分*/inttotalscore;/*總分*/athleteath[MaxSize];/*獲獎運動員信息數(shù)組,包括分數(shù),名次,項目*/ 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.關鍵算法{……添加項目號for(i=1;i<=n;i++){輸入第i名運動員的學校編號temp……while(first!=head) //遍歷鏈表,直到找到編號為serial的學校所在結點,或first指向表頭head{ if(first->serial==要添加的編號) { (first->ath[first->count]).item=要添加的項目號; (first->ath[first->count]).range=i(名次) First指向的學校的項目加一; 更新總分 break; } first=first->next;……}開始輸入項目編號temp是數(shù)字NY0<temp<18NY開始輸入項目編號temp是數(shù)字NY0<temp<18NY輸出“項目不存在”學校遍歷結束temp存在YNNextschoolNtemp是奇數(shù)NY取5名取3名輸入獲獎的學校編號se1<se<15NY項目號、名次、運動員名字添進學校所在結點Y繼續(xù)添加YN結束 while(first!=head) while(first!=head){……if(輸入的項目編號==學校第i位運動員的項目){ 把第i位運動員的項目,學校編號、名次、得分信息壓入向量; }…… } first=first->next;……輸出向量中的內(nèi)容 //按學校編號順序輸出所有參賽學校運動會成績voidserialSort(vector<school*>&v){ for(inti=0;i<v.size();i++) {//按學校編號順序輸出所有參賽學校運動會成績voidserialSort(vector<school*>&v){ for(inti=0;i<v.size();i++) { cout<<*v[i]; }}按學校編號統(tǒng)計按學校名次統(tǒng)計按男團總分統(tǒng)計按女團總分統(tǒng)計返回查詢菜單返回主菜單所有學??偡纸y(tǒng)計表學校成績查詢項目情況查詢返回主菜單 詳細代碼:#include<stdio.h>#include<stdlib.h>#include<iostream.h>#defineLT(a,b)((a)<(b))#defineLIST_INIT_SIZE100//線性表存儲空間的初始分配量#defineLISTINCREMENT10//線性表存儲空間的分配增量typedefintInfoType;//定義其它數(shù)據(jù)項的類型typedefintKeyType;//定義關鍵字類型為整型structRedType//記錄類型{KeyTypekey;//關鍵字項InfoTypeotherinfo;//其它數(shù)據(jù)項,具體類型在主程中定義};typedefstruct{intschnum;//學校的編號intmscore[20];//學校在各個男生項目的積分intwscore[20];//學校在各個女生項目的積分}school;//學校記錄類型typedefintElemType;structSqList{ElemType*elem;//存儲空間基址intlength;//當前長度intlistsize;//當前分配的存儲容量(以sizeof(ElemType)為單位)};structList{RedTyper[20];intlength;};intInitList(SqList&L)//算法.3{//操作結果:構造一個空的順序線性表L.elem=(ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType));if(!L.elem)exit(-1);//存儲分配失敗L.length=0;//空表長度為L.listsize=LIST_INIT_SIZE;//初始存儲容量return1;}intListInsert(SqList&L,inti,ElemTypee)//算法.4{//初始條件:順序線性表L已存在,≤i≤ListLength(L)+1//操作結果:在L中第i個位置之前插入新的數(shù)據(jù)元素e,L的長度加ElemType*newbase,*q,*p;if(i<1||i>L.length+1)//i值不合法return0;if(L.length>=L.listsize)//當前存儲空間已滿,增加分配{if(!(newbase=(ElemType*)realloc(L.elem,(L.listsize+LISTINCREMENT)*sizeof(ElemType))))exit(-1);//存儲分配失敗L.elem=newbase;//新基址L.listsize+=LISTINCREMENT;//增加存儲容量}q=L.elem+i-1;//q為插入位置for(p=L.elem+L.length-1;p>=q;--p)//插入位置及之后的元素右移*(p+1)=*p;*q=e;//插入e++L.length;//表長增return1;}voidInsertSort(List&L){//對順序表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];//復制為哨兵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ī)定男生項目前三名分別積分、、,女生項目前五名分別積分、、、、//規(guī)定沒有名次則積分為,不考慮并列的情況 //請正確輸入各學校對應項目的積分{intn,m,w,i,j;schoola[20];intsummscore[20],sumwscore[20],sumscore[20];//定義存儲各個學校男團、女團、總分RedTyped[20];//定義排序所需的數(shù)組為RedType型SqListL,Lm,Lw;//定義存放各個學??偡帧⒛袌F、女團積分的順序線性表ListLr;//定義積分排序所需的順序線性表InitList(L);//初始化各線性表InitList(Lm);InitList(Lw);cout<<"請輸入?yún)⒓舆\動會的學校數(shù)目(~20):"<<endl;cin>>n;while(n<5||n>20){ cout<<"輸入學校數(shù)目有誤,請重新輸入!"<<endl; cout<<"請輸入?yún)⒓舆\動會的學校數(shù)目(~20):"<<endl; cin>>n;}cout<<"請分別輸入男生、女生的項目數(shù)目(~20):"<<endl;cin>>m>>w;cout<<"規(guī)定男生項目前三名分別積分、、"<<endl;cout<<"女生項目前五名分別積分、、、、"<<endl;cout<<"沒有名次則積分為,且本程序不涉及并列排名的情況!"<<endl;cout<<"請正確輸入各學校對應項目的積分!\n"<<endl;for(i=1;i<=n;i++){ a[i-1].schnum=i;//賦給學校對應的編號 printf("請輸入學校%d男生各個項目的成績:\n",i); for(j=1;j<=m;j++)//分別輸入對應學校的各個男生項目的積分情況 cin>>a[i-1].mscore[j-1]; printf("請輸入學校%d女生各個項目的成績:\n",i); for(j=1;j<=w;j++)//分別輸入對應學校的各個女生項目的積分情況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];//求出學校男團總分并存儲到數(shù)組中對應位置 ListInsert(Lm,i+1,summscore[i]);//將學校男團總分插入存放在線性表對應位置 sumwscore[i]=a[i].wscore[0]; for(j=1;j<w;j++) sumwscore[i]+=a[i].wscore[j];//求出學校女團總分并存儲到數(shù)組中對應位置 ListInsert(Lw,i+1,sumwscore[i]);//將學校女團總分插入存放在線性表對應位置 sumscore[i]=summscore[i]+sumwscore[i];//求出學??偡植⒋鎯Φ綌?shù)組中對應位置 ListInsert(L,i+1,sumscore[i]);//將學??偡植迦氪娣旁诰€性表對應位置}intflag=1;charch;while(flag)//當flag為真時執(zhí)行循環(huán){printf("請選擇:\n");printf("1.查看各學??偡纸y(tǒng)計,并按學校編號排序輸出查看\n");printf("2.按學??偡峙判蜉敵霾榭碶n"); printf("3.按男團總分排序輸出查看\n"); printf("4.按女團總分排序輸出查看\n");printf("5.按學校編號查詢學校某個項目的情況\n");printf("6.按項目編號查詢?nèi)〉们叭蚯拔迕膶W校\n");printf("7.退出程序\n");cin>>ch;switch(ch) { case'1'://查看各學??偡纸y(tǒng)計,并按學校編號排序輸出查看 for(i=0;i<n;i++) { printf("學校編號:%d學??偡郑?d\n",i+1,L.elem[i]); } break;case'2'://按學校總分排序輸出查看 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<<"按學??偡峙判蚝笠?名次,學校編號,學??偡?形式輸出為:"<<endl; print(Lr); break;case'3'://按男團總分排序輸出查看 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<<"按男團總分排序后以(名次,學校編號,男團總分)形式輸出為:"<<endl; print(Lr); break;case'4'://按女團總分排序輸出查看 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<<"按女團總分排序后以(名次,學校編號,女團總分)形式輸出為:"<<endl; print(Lr); break;case'5'://按學校編號查詢學校某個項目的情況 ints,t; cout<<"請輸入要查詢的學校編號:"<<endl; cin>>s; while(s<1||s>n)//輸入學校編號不在初始定義范圍之內(nèi) { cerr<<"輸入學校編號有誤,請重新正確輸入!"<<endl; cout<<"請輸入要查詢的學校編號:"<<endl; cin>>s;//重新輸入 } i=0; while(a[i].schnum!=s) ++i;//通過循環(huán)找到輸入編號的對應學校在數(shù)組a中的位置 cout<<"請輸入要查詢的項目序號:"<<endl; cin>>t; while(t<1||t>m+w)//輸入項目序號不在初始定義范圍之內(nèi) { cout<<"輸入項目序號有誤,請重新正確輸入!"<<endl; cout<<"請輸入要查詢的項目序號:"<<endl; cin>>t;//重新輸入 } if(t<=m)//該項目屬于男生項目 printf("該學校該項目積分為:%d\n",a[i].mscore[t-1]);//從學校男生項目積分數(shù)組里輸出 else//該項目屬于女生項目 printf("該學校該項目積分為:%d\n",a[i].wscore[t-m-1]);//從學校女生項目積分數(shù)組里輸出 break; case'6'://按項目編號查詢?nèi)〉们叭蚯拔迕膶W校 cout<<"請輸入要查詢的項目序號:"<<endl; cin>>t; while(t<1||t>m+w)//輸入項目序號不在初始定義范圍之內(nèi) { cout<<"輸入項目序號有誤,請重新正確輸入!"<<endl; cout<<"請輸入要查詢的項目序號:"<<endl; cin>>t;//重新輸入 } if(t<=m)//該項目屬于男生項目 { i=0; while(a[i].mscore[t-1]!=5) ++i;//通過循環(huán)找到該項目第一名學校在a中的位置 printf("獲得該項目第一名的是學校:%d號\n",i+1); i=0; while(a[i].mscore[t-1]!=3) ++i;//通過
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年工業(yè)機器人系統(tǒng)操作員職業(yè)技能認證模擬試卷及答案
- 2025年下半年衛(wèi)生監(jiān)督信息員培訓測試題及答案
- 2025年幼兒園副園長年度工作總結
- 2025年三級攝影(攝像)師考試題庫及完整答案
- 河道治理及生態(tài)修復工程施工方案與技術措施
- 醫(yī)療服務2026年特色發(fā)展
- 2026年銷售技巧提升培訓課程
- 2026 年民政局離婚協(xié)議書正規(guī)模板含全部核心條款
- 2026 年離婚協(xié)議書合規(guī)制式模板
- 2026 年法定化離婚協(xié)議書規(guī)范模板
- 2026年殘疾人聯(lián)合會就業(yè)服務崗招聘筆試適配題含答案
- 2026年山西警官職業(yè)學院單招綜合素質(zhì)筆試備考題庫帶答案解析
- 2026年農(nóng)夫山泉-AI-面試題目及答案
- 2026凱翼汽車全球校園招聘(公共基礎知識)綜合能力測試題附答案
- 山東省威海市環(huán)翠區(qū)2024-2025學年一年級上學期1月期末數(shù)學試題
- 2025年手術室護理實踐指南知識考核試題及答案
- 外貿(mào)公司采購專員績效考核表
- 彩禮分期合同范本
- 胸腺瘤伴重癥肌無力課件
- 十五五安全生產(chǎn)規(guī)劃思路
- 一年級地方課程教案
評論
0/150
提交評論