運(yùn)動(dòng)會(huì)分?jǐn)?shù)統(tǒng)計(jì)系統(tǒng) 大數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)
《運(yùn)動(dòng)會(huì)分?jǐn)?shù)統(tǒng)計(jì)系統(tǒng) 大數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)》由會(huì)員分享,可在線閱讀,更多相關(guān)《運(yùn)動(dòng)會(huì)分?jǐn)?shù)統(tǒng)計(jì)系統(tǒng) 大數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)(34頁(yè)珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
1、 經(jīng)濟(jì)學(xué)院 華信學(xué)院 課程設(shè)計(jì)報(bào)告 學(xué)院: 專業(yè): 班級(jí): 學(xué)號(hào): 某某: 運(yùn)動(dòng)會(huì)分?jǐn)?shù)統(tǒng)計(jì)系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn) 一.問(wèn)題描述 大學(xué)作為一個(gè)提供學(xué)生全面開展的高等教育機(jī)構(gòu),不僅要培養(yǎng)學(xué)生的學(xué)習(xí)能力,而且更要注重學(xué)生的德智體美全面開展。在大學(xué)中有很多豐富多彩的比賽和活動(dòng),例如運(yùn)動(dòng)會(huì),演講比賽,歌唱比賽,書法比賽等,在比賽和競(jìng)爭(zhēng)中,我們的這些素質(zhì)和能力更容易得到培養(yǎng)提升。但是比賽最后的分?jǐn)?shù)統(tǒng)計(jì)和查詢往往是舉辦者頭疼的事情,分?jǐn)?shù)的統(tǒng)計(jì)和查詢需要快速準(zhǔn)確,因此我們?cè)O(shè)計(jì)了這個(gè)運(yùn)動(dòng)會(huì)分?jǐn)?shù)統(tǒng)計(jì)系統(tǒng),以方便分?jǐn)?shù)的統(tǒng)計(jì)查詢。 參加運(yùn)動(dòng)會(huì)的n
2、個(gè)學(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)目參加人數(shù)差異較大,有些項(xiàng)目取前五名,得分順序?yàn)?,5,3,2,1;還有些項(xiàng)目只取前三名,得分順序?yàn)?,3,2。寫一個(gè)統(tǒng)計(jì)程序產(chǎn)生各種成績(jī)單和得分報(bào)表。 二.需求分析 系統(tǒng)功能描述: (1)可以輸入各個(gè)項(xiàng)目的前三名或前五名的成績(jī); (2)能統(tǒng)計(jì)各學(xué)??偡郑? (3)可以按學(xué)校編號(hào)或名稱、學(xué)??偡帧⒛信畧F(tuán)體總分排序輸出; (4)可以按學(xué)校編號(hào)查詢學(xué)校某個(gè)項(xiàng)目的情況;可以按項(xiàng)目編號(hào)查詢?nèi)〉们叭蚯拔迕膶W(xué)校。 三.概要設(shè)計(jì) ADT List{ 數(shù)據(jù)對(duì)象:D=
3、{ai|ai∈ElemSet,i=1,2,…,n,n≥0}
數(shù)據(jù)關(guān)系:R1={
4、。 操作結(jié)果:返回L中第1個(gè)與e滿足關(guān)系pare()的數(shù)據(jù)元素的位序。假如這樣的數(shù)據(jù)元素不存在,如此返回值為0。 PriorElem(L,cur_e,&pre_e) 初始條件:線性表L已存在。 操作結(jié)果:假如cur_e是L的數(shù)據(jù)元素,且不是第一個(gè),如此用pre_e返回它的前驅(qū),否如此操作失敗,pre_e無(wú)定義。 NextElem(L,cur_e,&next_e) 初始條件:線性表L已存在。 操作結(jié)果:假如cur_e是L的數(shù)據(jù)元素,且不是最后一個(gè),如此用next_e返回
5、它的后繼,否如此操作失敗,next_e無(wú)定義。 ListInsert(&L,I,e) 初始條件:線性表L已存在,1≦i≦ListLength(L)+1 操作結(jié)果:在L中第i個(gè)位置之前插入新的元素e,L是表長(zhǎng)度加1 ListTraverse(L,visit()) 初始條件:線性表L已存在。 操作結(jié)果:依次對(duì)L的每個(gè)數(shù)據(jù)元素調(diào)用函數(shù)visit()。一旦visit()失敗,如此操作失敗。 }ADT List 運(yùn)動(dòng)會(huì)分?jǐn)?shù)統(tǒng)計(jì)系統(tǒng) 輸入各學(xué)校名稱 輸入男子
6、運(yùn)動(dòng)項(xiàng)目 輸入女子運(yùn)動(dòng)項(xiàng)目 輸入男子項(xiàng)目的成績(jī) 輸入女子項(xiàng)目的成績(jī) 查詢某校各個(gè)項(xiàng)目的成績(jī) 查詢某校各個(gè)項(xiàng)目的成績(jī) 圖 3-1運(yùn)動(dòng)會(huì)分?jǐn)?shù)統(tǒng)計(jì)系統(tǒng)功能模塊圖 main() womansports(LinkList?&L,int?n) 循環(huán)語(yǔ)句依次輸入每個(gè)值 ListTraverse(L,visit()) schoolname(LinkList?&L,int?n) mansports(LinkList?&L,int?n) 循
7、環(huán)語(yǔ)句依次輸入每個(gè)值 ListTraverse(L,visit()) ListTraverse(L,visit()) ListTraverse(L,visit()) 圖 3-2系統(tǒng)函數(shù)調(diào)用關(guān)系圖 為了實(shí)現(xiàn)運(yùn)動(dòng)會(huì)分?jǐn)?shù)統(tǒng)計(jì)系統(tǒng),需要設(shè)計(jì)一個(gè)含有多菜單項(xiàng)的主控菜單子程序,以系統(tǒng)中各個(gè)子項(xiàng)目的調(diào)用,為了方便用戶使用本系統(tǒng),本系統(tǒng)主控菜單的運(yùn)行界面如圖3-3所示。 圖 3-3主菜單運(yùn)行界面 四.詳細(xì)設(shè)計(jì) 實(shí)現(xiàn)運(yùn)動(dòng)會(huì)分?jǐn)?shù)統(tǒng)計(jì)系統(tǒng)的開發(fā),采用鏈表結(jié)構(gòu)類型存儲(chǔ)
8、運(yùn)動(dòng)會(huì)學(xué)校名稱、男子女子運(yùn)動(dòng)項(xiàng)目以與男子女子項(xiàng)目成績(jī)的信息。 //每一個(gè)學(xué)校的信息 typedef struct Lnode//結(jié)點(diǎn) { char data[20];//學(xué)校名稱 int da,d1,d2; //學(xué)校編號(hào)、學(xué)??偡?、男女團(tuán)體分 struct Lnode *next;//指向下一學(xué)校 } Lnode,*LinkList; int sz[20]; //每一個(gè)項(xiàng)目的信息 存取 typedef struct Lnode1 { char data[20],data1[20],data2[20],data3[20],data4[20],data5[20];
9、//該項(xiàng)目前五名學(xué)校的名稱 int da1,da2,da3,da4,da5;//該項(xiàng)目前五名學(xué)校的編號(hào) struct Lnode1 *next;//指向下一項(xiàng)目 } Lnode1,*LinkList1; 4.2 系統(tǒng)子程序詳細(xì)設(shè)計(jì) 輸入各學(xué)校名稱的算法: //按從頭到尾的順序依次建立線性鏈表L1共有n個(gè)節(jié)點(diǎn) void schoolname(LinkList &L1,int n) { int i; LinkList p,q; //輸入頭結(jié)點(diǎn)信息,即輸入第一個(gè)學(xué)校的名字 L1=(LinkList)malloc(sizeof(Lnode));//malloc是動(dòng)態(tài)開辟存,
10、函數(shù)返回為void型指針(指向開辟的存空間);〔LinkList〕定義的指針的類型;(sizeof(Lnode)malloc開辟的存空間的大小 printf("請(qǐng)輸入這%d 個(gè)學(xué)校的名字:\n",n); p=(LinkList)malloc(sizeof(Lnode));//指向一個(gè)有意義的地方 L1->next=p;//把p的值賦給next next指向?qū)嶋H的空間 p時(shí)指針 scanf("%s",&p->data);//修改空間的值,&取p的數(shù)據(jù)域的地址 //從第二個(gè)節(jié)點(diǎn)開始依次輸入到第n個(gè)節(jié)點(diǎn)信息 for(i=2;i<=n;i++) //p是第一個(gè),所以i=2從2開始 先
11、指出第一個(gè),然后第一個(gè)在指出剩下的 { q=p;//q指向p開辟的空間 即 q指向p指向的地方 p=(LinkList)malloc(sizeof(Lnode));//給新開辟的空間賦值 開始 輸入n個(gè)學(xué)校的名字 i=0 i>n 將第i個(gè)結(jié)點(diǎn)參加鏈表L 完畢 N Y scanf("%s",&p->data); q->next=p; } } 輸入男子運(yùn)動(dòng)項(xiàng)目名字的算法: //按從頭到尾的順序依次建立線性鏈表L2共有n2個(gè)節(jié)點(diǎn) void mansports(LinkList1 &
12、L2,int n2) { //輸入第一個(gè)節(jié)點(diǎn)的信息,即第一個(gè)男子項(xiàng)目的名字 int i; LinkList1 r,s; L2=(LinkList1)malloc(sizeof(Lnode1)); printf("請(qǐng)輸入這%d 個(gè)項(xiàng)目的名字:\n",n2); r=(LinkList1)malloc(sizeof(Lnode1)); //把新開辟的空間data1-5初始化 for(int t=0;t<20;t++) r->data1[t] = '\0'; for( t=0;t<20;t++) r->data2[t] = '\0'; for( t=0;t<20;t++)
13、r->data3[t] = '\0'; for( t=0;t<20;t++) r->data4[t] = '\0'; for( t=0;t<20;t++) r->data5[t] = '\0'; L2->next=r; scanf("%s",&r->data); //從第二個(gè)節(jié)點(diǎn)開始輸入到第n2個(gè)節(jié)點(diǎn)的信息 for(i=2;i<=n2;i++) { s=r;//s指向r指向的地方 r=(LinkList1)malloc(sizeof(Lnode1)); for(int t=0;t<20;t++) r->data1[t] = '\0'; for( t=0;t<20
14、;t++) r->data2[t] = '\0'; for( t=0;t<20;t++) r->data3[t] = '\0'; for( t=0;t<20;t++) r->data4[t] = '\0'; for( t=0;t<20;t++) r->data5[t] = '\0'; scanf("%s",&r->data); s->next=r; } } 開始 輸入n個(gè)男子項(xiàng)目的名字 i=0 i>n 將第i個(gè)結(jié)點(diǎn)參加鏈表L 完畢 N Y
15、 輸入女子運(yùn)動(dòng)項(xiàng)目名字的算法: //按從頭到尾的順序依次建立線性鏈表L3共有n1個(gè)節(jié)點(diǎn) void womansports(LinkList1 &L3,int n1) { //輸入第一個(gè)節(jié)點(diǎn)的信息,即第一個(gè)女子項(xiàng)目的名字 int i; LinkList1 r,s; L3=(LinkList1)malloc(sizeof(Lnode1)); printf("請(qǐng)輸入這%d 個(gè)項(xiàng)目的名字:\n",n1); r=(LinkList1)malloc(sizeof(Lnode1)); L3->next=r; scanf("%s",&r->dat
16、a); //從第二個(gè)節(jié)點(diǎn)開始依次輸入到第n1個(gè)節(jié)點(diǎn)信息 for(i=2;i<=n1;i++) { s=r; r=(LinkList1)malloc(sizeof(Lnode1)); scanf("%s",&r->data); s->next=r; 開始 輸入n個(gè)女子項(xiàng)目的名字 i=0 i>n 將第i個(gè)結(jié)點(diǎn)參加鏈表L 完畢 N Y } } 參加比賽的學(xué)校的總分排名的算法: void schoolrankings(LinkList &L1,int n) { Link
17、List p; 學(xué)校的數(shù)據(jù)類型 上邊 int z,i,j,y; printf("參加這次比賽的學(xué)校的總分排名:\n"); p=L1->next;//下一個(gè)地方的指針給p p是學(xué)校的數(shù)據(jù)類型 p是一個(gè)節(jié)點(diǎn),L1下一個(gè)節(jié)點(diǎn)給p //先把每個(gè)學(xué)校的總分依次遍歷,存放在數(shù)組sz中。 一個(gè)一個(gè)取,一個(gè)一個(gè)找先讓p指向一個(gè)鏈表 for(i=0;i<=n-1;i++) { sz[i]=p->da;//節(jié)點(diǎn)的信息指向一個(gè)數(shù)組,data學(xué)??倲?shù)的數(shù)據(jù)域, 把所有的學(xué)校的總分 p=p->next; } //再對(duì)數(shù)組sz用冒泡排序法進(jìn)展從小到大排序 for(i=1;i<=n-1;i++
18、) { for(j=1;j<=n-i;j++) { if(sz[j-1]>sz[j]) { y=sz[j-1]; sz[j-1]=sz[j]; sz[j]=y; } } } z=1; //初始化 //把線性鏈表L1按項(xiàng)目總分從大到小的順序排列,并打印名次 for(i=n-1;i>=0;i--) { p=L1->next; // L1表示一個(gè)節(jié)點(diǎn),取出里面一個(gè)數(shù)據(jù),那個(gè)數(shù)據(jù)的名字是next,next也是一個(gè)節(jié)點(diǎn),p也是一個(gè)節(jié)點(diǎn), if(i>0)// 意義是判斷下一個(gè)是不是 //如果值相等如此鏈表指針直接指向下一個(gè),不用交換位置 while(sz[i]==sz
19、[i-1]) 相鄰的兩個(gè)數(shù)組素不素相等 { i--; //從大到小,從最后一個(gè)比擬 } //在鏈表L1中找到與sz[i] 相等的節(jié)點(diǎn)的位置,并打印知名次信息 for(j=1;j<=n;j++) { if(sz[i]==p->da)//數(shù)組里面的值從最后一個(gè)開始取 { printf("第%d 名%s :%d 分\n",z,p->data,p->da); z++; } p=p->next; } } } 開始 完畢 i=0 i++ i>n Y N 將每個(gè)學(xué)校的總分賦給數(shù)組sz[n] 對(duì)數(shù)組sz[n]進(jìn)展冒泡排序 遍歷鏈表L找到與sz[i
20、]相等的結(jié)點(diǎn)并輸出總分 參加這次比賽的學(xué)校的男子項(xiàng)目的成績(jī)排名的算法: //男子項(xiàng)目排名算法代碼與上述學(xué)??偡值呐琶惴ㄍ耆恢?,其中男子項(xiàng)目排序的過(guò)程為比擬男子項(xiàng)目總分 void manrankings(LinkList &L1,int n) { LinkList p; int z,i,j,y; printf("參加這次比賽的學(xué)校的男子項(xiàng)目的成績(jī)排名:\n"); p=L1->next; //先把每個(gè)學(xué)校的男子項(xiàng)目總分依次遍歷,存
21、放在數(shù)組sz中。 for(i=0;i<=n-1;i++) { z[i]=p->d1; p=p->next; } //再對(duì)數(shù)組sz用冒泡排序法進(jìn)展從小到大排序 for(i=1;i<=n-1;i++) { for(j=1;j<=n-i;j++) { if(sz[j-1]>sz[j]) { y=sz[j-1]; sz[j-1]=sz[j]; sz[j]=y; } } } z=1; //把線性鏈表L1按男子項(xiàng)目總分從大到小的順序排列,并打印名次 for(i=n-1;i>=0;i--) { p=L1->next; if(i>0) while(sz[i]=
22、=sz[i-1]) { i--; } //在鏈表L1中找到與sz[i] 相等的節(jié)點(diǎn)的位置,并打印知名次信息 for(j=1;j<=n;j++) { if(sz[i]==p->d1) { printf("第%d 名%s :%d 分\n",z,p->data,p->d1); z++; } p=p->next; } } } 開始 完畢 i=0 i++ i>n Y N 將男子項(xiàng)目的總分賦給數(shù)組sz[n] 對(duì)數(shù)組sz[n]進(jìn)展冒泡排序 遍歷鏈表L找到與sz[i]相等的結(jié)點(diǎn)并輸出總分
23、 參加這次比賽的學(xué)校的女子項(xiàng)目的成績(jī)排名的算法: //女子項(xiàng)目排名算法代碼與上述學(xué)??偡值呐琶惴ㄍ耆恢拢渲信禹?xiàng)目排序的過(guò)程為比擬女子項(xiàng)目總分 void womanrankings(LinkList &L1,int n) { LinkList p; int z,i,j,y; printf("參加這次比賽的學(xué)校的女子項(xiàng)目的成績(jī)排名:\n"); p=L1->next; //先把每個(gè)學(xué)校的女子項(xiàng)目總分依次遍歷,存放在數(shù)組sz中 for(i=0;i<=n-1;i++) { sz[i]=p->d2
24、; p=p->next; } //再對(duì)數(shù)組sz用冒泡排序法進(jìn)展從小到大排序 for(i=1;i<=n-1;i++) { for(j=1;j<=n-i;j++) { if(sz[j-1]>sz[j]) { y=sz[j-1]; sz[j-1]=sz[j]; sz[j]=y; } } } z=1; //把線性鏈表L1按女子項(xiàng)目總分從大到小的順序排列,并打印名次 for(i=n-1;i>=0;i--) { p=L1->next; if(i>0) //如果值相等如此鏈表指針直接指向下一個(gè),不用交換位置 while(sz[i]==sz[i-1]) { i
25、--; } //在鏈表L1中找到與sz[i] 相等的節(jié)點(diǎn)的位置,并打印知名次信息 for(j=1;j<=n;j++) { if(sz[i]==p->d2) { printf("第%d 名%s :%d 分\n",z,p->data,p->d2); z++; } p=p->next; } } } 開始 完畢 i=0 i++ i>n Y N 將女子項(xiàng)目的總分賦給數(shù)組sz[n] 對(duì)數(shù)組sz[n]進(jìn)展冒泡排序 遍歷鏈表L找到與sz[i]相等的結(jié)點(diǎn)并輸出總分
26、 五.編碼實(shí)現(xiàn)與系統(tǒng)測(cè)試 圖 5-1輸入根本信息 圖 5-2學(xué)校與項(xiàng)目排名 圖 5-3查詢某校各個(gè)項(xiàng)目的成績(jī) 圖 5-4查詢某個(gè)項(xiàng)目的比賽結(jié)果 圖 5-5完畢本程序 六.結(jié)果分析 表 6-1時(shí)間、空間復(fù)雜度 操作 時(shí)間復(fù)雜度 空間復(fù)雜度 1 O(n+m) O(1) 2 O(n) O(1) 3 O(m) O(1) 注:m為學(xué)校個(gè)數(shù),n為項(xiàng)目個(gè)數(shù)。 七.學(xué)習(xí)體會(huì) 通過(guò)這次數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì),我收獲了很多: 一.經(jīng)過(guò)這幾天的學(xué)習(xí),進(jìn)一步提升了C語(yǔ)言的應(yīng)用能力,鞏固了數(shù)據(jù)結(jié)構(gòu)
27、上課所學(xué)習(xí)的容,數(shù)據(jù)結(jié)構(gòu)知識(shí)的應(yīng)用能力有了一定的提升,并且對(duì)C語(yǔ)言和數(shù)據(jù)結(jié)構(gòu)有了更深層次的認(rèn)識(shí)。 二.這次課程設(shè)計(jì)我們選的課題是運(yùn)動(dòng)會(huì)分?jǐn)?shù)統(tǒng)計(jì),涉與到線性鏈表以與C語(yǔ)言的一些根本的知識(shí)。在以前的學(xué)習(xí)中,對(duì)知識(shí)只是掌握了大概的容,根底知識(shí)掌握的不結(jié)實(shí),所以編寫程序的過(guò)程非常的困難,通過(guò)這次課程設(shè)計(jì),讓我知道根底知識(shí)非常重要。在進(jìn)展概要設(shè)計(jì)的時(shí)候要注意結(jié)合問(wèn)題的需求分析,函數(shù)調(diào)用要和系統(tǒng)功能相結(jié)合。在書寫程序時(shí),要認(rèn)真細(xì)心,很多錯(cuò)誤都是因?yàn)樽约旱拇中?,調(diào)試程序就花費(fèi)了非常多的時(shí)間。 三.通過(guò)這次課程設(shè)計(jì),讓我明白了獨(dú)立思考的重要性。一個(gè)東西只有經(jīng)過(guò)自己的思考,自己明白了
28、才是真的明白了。在思考的過(guò)程中,對(duì)一個(gè)問(wèn)題思考的越深入,可以挖掘的東西就越多。在解決問(wèn)題時(shí)要結(jié)合多方面的因素,不能只單方面思考問(wèn)題。
八.源程序清單
#include
29、ypedef struct Lnode1 { char data[20],data1[20],data2[20],data3[20],data4[20],data5[20]; //該項(xiàng)目前五名學(xué)校的名稱 int da1,da2,da3,da4,da5;//該項(xiàng)目前五名學(xué)校的編號(hào) struct Lnode1 *next;//指向下一項(xiàng)目 } Lnode1,*LinkList1; 輸入各學(xué)校名稱的算法: //按從頭到尾的順序依次建立線性鏈表L1共有n個(gè)節(jié)點(diǎn) void schoolname(LinkList &L1,int n) { int i; LinkList
30、 p,q; //輸入頭結(jié)點(diǎn)信息,即輸入第一個(gè)學(xué)校的名字 L1=(LinkList)malloc(sizeof(Lnode)); printf("請(qǐng)輸入這%d 個(gè)學(xué)校的名字:\n",n); p=(LinkList)malloc(sizeof(Lnode)); L1->next=p; scanf("%s",&p->data); //從第二個(gè)節(jié)點(diǎn)開始依次輸入到第n個(gè)節(jié)點(diǎn)信息 for(i=2;i<=n;i++) { q=p; p=(LinkList)malloc(sizeof(Lnode)); scanf("%s",&p->data); q->next=p; } }
31、 輸入男子運(yùn)動(dòng)項(xiàng)目名字的算法: //按從頭到尾的順序依次建立線性鏈表L2共有n2個(gè)節(jié)點(diǎn) void mansports(LinkList1 &L2,int n2) { //輸入第一個(gè)節(jié)點(diǎn)的信息,即第一個(gè)男子項(xiàng)目的名字 int i; LinkList1 r,s; L2=(LinkList1)malloc(sizeof(Lnode1)); printf("請(qǐng)輸入這%d 個(gè)項(xiàng)目的名字:\n",n2); r=(LinkList1)malloc(sizeof(Lnode1)); for(int t=0;t<20;t++) r->data1[t] = '\0'; for( t
32、=0;t<20;t++) r->data2[t] = '\0'; for( t=0;t<20;t++) r->data3[t] = '\0'; for( t=0;t<20;t++) r->data4[t] = '\0'; for( t=0;t<20;t++) r->data5[t] = '\0'; L2->next=r; scanf("%s",&r->data); //從第二個(gè)節(jié)點(diǎn)開始輸入到第n2個(gè)節(jié)點(diǎn)的信息 for(i=2;i<=n2;i++) { s=r; r=(LinkList1)malloc(sizeof(Lnode1)); for(int t=0;t<2
33、0;t++) r->data1[t] = '\0'; for( t=0;t<20;t++) r->data2[t] = '\0'; for( t=0;t<20;t++) r->data3[t] = '\0'; for( t=0;t<20;t++) r->data4[t] = '\0'; for( t=0;t<20;t++) r->data5[t] = '\0'; scanf("%s",&r->data); s->next=r; } } 輸入女子運(yùn)動(dòng)項(xiàng)目名字的算法: //按從頭到尾的順序依次建立線性鏈表L3共有n1個(gè)節(jié)點(diǎn) void womansport
34、s(LinkList1 &L3,int n1) { //輸入第一個(gè)節(jié)點(diǎn)的信息,即第一個(gè)女子項(xiàng)目的名字 int i; LinkList1 r,s; L3=(LinkList1)malloc(sizeof(Lnode1)); printf("請(qǐng)輸入這%d 個(gè)項(xiàng)目的名字:\n",n1); r=(LinkList1)malloc(sizeof(Lnode1)); L3->next=r; scanf("%s",&r->data); //從第二個(gè)節(jié)點(diǎn)開始依次輸入到第n1個(gè)節(jié)點(diǎn)信息 for(i=2;i<=n1;i++) { s=r; r=(LinkList1)
35、malloc(sizeof(Lnode1)); scanf("%s",&r->data); s->next=r; } } 參加比賽的學(xué)校的總分排名的算法: void schoolrankings(LinkList &L1,int n) { LinkList p; int z,i,j,y; printf("參加這次比賽的學(xué)校的總分排名:\n"); p=L1->next; //先把每個(gè)學(xué)校的總分依次遍歷,存放在數(shù)組sz中。 for(i=0;i<=n-1;i++) { sz[i]=p->da; p=p->next; } //再對(duì)數(shù)組sz用冒泡排序法進(jìn)展
36、從小到大排序 for(i=1;i<=n-1;i++) { for(j=1;j<=n-i;j++) { if(sz[j-1]>sz[j]) { y=sz[j-1]; sz[j-1]=sz[j]; sz[j]=y; } } } z=1; //把線性鏈表L1按項(xiàng)目總分從大到小的順序排列,并打印名次 for(i=n-1;i>=0;i--) { p=L1->next; if(i>0) //如果值相等如此鏈表指針直接指向下一個(gè),不用交換位置 while(sz[i]==sz[i-1]) { i--; } //在鏈表L1中找到與sz[i] 相等的節(jié)點(diǎn)的位置,并打
37、印知名次信息 for(j=1;j<=n;j++) { if(sz[i]==p->da) { printf("第%d 名%s :%d 分\n",z,p->data,p->da); z++; } p=p->next; } } } 參加這次比賽的學(xué)校的男子項(xiàng)目的成績(jī)排名的算法: //男子項(xiàng)目排名算法代碼與上述學(xué)??偡值呐琶惴ㄍ耆恢?,其中男子項(xiàng)目排序的過(guò)程為比擬男子項(xiàng)目總分 void manrankings(LinkList &L1,int n) { LinkList p; int z,i,j,y; printf("參加這次比賽的學(xué)校的男子項(xiàng)目的成績(jī)
38、排名:\n"); p=L1->next; //先把每個(gè)學(xué)校的男子項(xiàng)目總分依次遍歷,存放在數(shù)組sz中。 for(i=0;i<=n-1;i++) { z[i]=p->d1; p=p->next; } //再對(duì)數(shù)組sz用冒泡排序法進(jìn)展從小到大排序 for(i=1;i<=n-1;i++) { for(j=1;j<=n-i;j++) { if(sz[j-1]>sz[j]) { y=sz[j-1]; sz[j-1]=sz[j]; sz[j]=y; } } } z=1; //把線性鏈表L1按男子項(xiàng)目總分從大到小的順序排列,并打印名次 for(i=n-1;i>=0
39、;i--) { p=L1->next; if(i>0) while(sz[i]==sz[i-1]) { i--; } //在鏈表L1中找到與sz[i] 相等的節(jié)點(diǎn)的位置,并打印知名次信息 for(j=1;j<=n;j++) { if(sz[i]==p->d1) { printf("第%d 名%s :%d 分\n",z,p->data,p->d1); z++; } p=p->next; } } } 參加這次比賽的學(xué)校的女子項(xiàng)目的成績(jī)排名的算法: //女子項(xiàng)目排名算法代碼與上述學(xué)校總分的排名算法完全一致,其中女子項(xiàng)目排序的過(guò)程為比擬女子項(xiàng)目總分
40、 void womanrankings(LinkList &L1,int n) { LinkList p; int z,i,j,y; printf("參加這次比賽的學(xué)校的女子項(xiàng)目的成績(jī)排名:\n"); p=L1->next; //先把每個(gè)學(xué)校的女子項(xiàng)目總分依次遍歷,存放在數(shù)組sz中 for(i=0;i<=n-1;i++) { sz[i]=p->d2; p=p->next; } //再對(duì)數(shù)組sz用冒泡排序法進(jìn)展從小到大排序 for(i=1;i<=n-1;i++) { for(j=1;j<=n-i;j++) { if(sz[j-1]>sz[j]) { y=s
41、z[j-1]; sz[j-1]=sz[j]; sz[j]=y; } } } z=1; //把線性鏈表L1按女子項(xiàng)目總分從大到小的順序排列,并打印名次 for(i=n-1;i>=0;i--) { p=L1->next; if(i>0) //如果值相等如此鏈表指針直接指向下一個(gè),不用交換位置 while(sz[i]==sz[i-1]) { i--; } //在鏈表L1中找到與sz[i] 相等的節(jié)點(diǎn)的位置,并打印知名次信息 for(j=1;j<=n;j++) { if(sz[i]==p->d2) { printf("第%d 名%s :%d 分\n",z,p
42、->data,p->d2); z++; } p=p->next; } } } void main () { int i,j,z,x,n,m,w; //聲明學(xué)校鏈表 LinkList p,q,L1;//p,q沒(méi)有實(shí)際意義,L1是有實(shí)際意義,是儲(chǔ)存學(xué)校信息 //聲明項(xiàng)目鏈表 LinkList1 r,s,L2,L3; // 同上 男子男子鏈表,女子想么鏈表 do { printf("*************************************\n"); printf("****1 輸入根本信息
43、****\n"); printf("****2 查詢某校各個(gè)項(xiàng)目的成績(jī) ****\n"); printf("****3 查詢某個(gè)項(xiàng)目的比賽結(jié)果 ****\n"); printf("****4 完畢本程序 ****\n"); printf("*************************************\n"); printf("請(qǐng)選擇您想進(jìn)展的操作\n"); //輸入1,或2或3 選擇功能 scanf("%d",&z); //z=2查詢某校各個(gè)項(xiàng)目的成績(jī) if(z==2) { r=L2->next; print
44、f("請(qǐng)輸入您想查尋的學(xué)校的名字:\n"); //輸入待查詢學(xué)校的名稱 s = (LinkList1)malloc(sizeof(Lnode1));//存儲(chǔ)學(xué)校的名字 scanf("%s",&s->data);//輸出查詢結(jié)果 //輸出查詢信息 for(i=1;i<=m;i++) // m為男子項(xiàng)目個(gè)數(shù) 字符串比擬里面的是否相等,相等=0,不相等不=0 第一名的成績(jī) 第一名學(xué)校 { if(strcmp(r->data1,s->data)==0) printf("貴校榮獲男子項(xiàng)目%s 的第1名,他該項(xiàng)目的成績(jī)是:%d\n",r->data,r->da1);
45、 if(strcmp(r->data2,s->data)==0) printf("貴校榮獲男子項(xiàng)目%s 的第2名,他該項(xiàng)目的成績(jī)是:%d\n",r->data,r->da2); if(strcmp(r->data3,s->data)==0) printf("貴校榮獲男子項(xiàng)目%s 的第3名,他該項(xiàng)目的成績(jī)是:%d\n",r->data,r->da3); if(strcmp(r->data4,s->data)==0) printf("貴校榮獲男子項(xiàng)目%s 的第4名,他該項(xiàng)目的成績(jī)是:%d\n",r->data,r->da4); if(strcmp(r->data5,s->data)==0)
46、printf("貴校榮獲男子項(xiàng)目%s 的第5名,他該項(xiàng)目的成績(jī)是:%d\n",r->data,r->da5); r=r->next;//男子項(xiàng)目的鏈表 } r=L3->next; for(i=1;i<=w;i++) { if(strcmp(r->data1,s->data)==0) printf("貴校榮獲女子項(xiàng)目%s 的第1名,她該項(xiàng)目的成績(jī)是:%d\n",r->data,r->da1); if(strcmp(r->data2,s->data)==0) printf("貴校榮獲女子項(xiàng)目%s 的第2名,她該項(xiàng)目的成績(jī)是:%d\n",r->data,r->da2); if(str
47、cmp(r->data3,s->data)==0) printf("貴校榮獲女子項(xiàng)目%s 的第3名,她該項(xiàng)目的成績(jī)是:%d\n",r->data,r->da3); if(strcmp(r->data4,s->data)==0) printf("貴校榮獲女子項(xiàng)目%s 的第4名,她該項(xiàng)目的成績(jī)是:%d\n",r->data,r->da4); if(strcmp(r->data5,s->data)==0) printf("貴校榮獲女子項(xiàng)目%s 的第5名,她該項(xiàng)目的成績(jī)是:%d\n",r->data,r->da5); r=r->next; } } //查詢學(xué)校完畢 //z=3查詢某個(gè)
48、項(xiàng)目的比賽結(jié)果 if(z==3) { printf("請(qǐng)輸入您想查尋的項(xiàng)目的名字:\n"); //輸入待查詢的項(xiàng)目名稱 s = (LinkList1)malloc(sizeof(Lnode1)); scanf("%s",&s->data); //存data里 r=L2->next; for(i=1;i<=m;i++) { if(strcmp(r->data,s->data)==0) { if(strlen(r->data4)==0) printf("第1名%s ,第2名%s,第3名%s\n",r->data1,r->data2,r->data3); if(strlen
49、(r->data4)>0) printf("第1名%s ,第2名%s,第3名%s,第4名%s,第5名%s\n",r->data1,r->data2,r->data3,r->data4,r->data5); } r=r->next; } r=L3->next; //打印項(xiàng)目比賽結(jié)果 for(i=1;i<=w;i++) { if(strcmp(r->data,s->data)==0) { if(strlen(r->data4)==0) printf("第1名%s ,第2名%s,第3名%s\n",r->data1,r->data2,r->data3); //字長(zhǎng) 沒(méi)有輸入
50、第四名 strlen(r->data4)==0 if(strlen(r->data4)>0) printf("第1名%s ,第2名%s,第3名%s,第4名%s,第5名%s\n",r->data1,r->data2,r->data3,r->data4,r->data5); } r=r->next; } } if(z==1) //輸入局部 { //輸入學(xué)校的個(gè)數(shù)n printf("請(qǐng)輸入?yún)⒓舆@次比賽的學(xué)校的個(gè)數(shù):\n"); scanf("%d",&n); //構(gòu)建鏈表L1,依次輸入n個(gè)學(xué)校的名稱。 schoolname(L1,n); q=L1->n
51、ext; //把L1鏈表中的總分da全部初始化為0 for(i=1;i<=n;i++) { q->da=0; //初始化 q->d1=0; q->d2=0; q=q->next; } //輸入男子個(gè)項(xiàng)目總數(shù)m printf("\n請(qǐng)輸入這次比賽的男子項(xiàng)目的個(gè)數(shù):\n"); scanf("%d",&m); //構(gòu)建男子項(xiàng)目鏈表L2輸入m個(gè)男子運(yùn)動(dòng)項(xiàng)目名字 mansports(L2,m); r=L2->next; //依次m個(gè)男子項(xiàng)目的結(jié)果 for(i=1;i<=m;i++) { printf("如果此次%s 比賽只取前3名的成績(jī)請(qǐng)輸入1,假如只取前5名的成績(jī)請(qǐng)
52、輸入2!\n",r->data); //輸入1或2 選擇成績(jī)記錄的方式 scanf("%d",&z); printf("請(qǐng)輸入第1名所來(lái)自的學(xué)校的名字和他該項(xiàng)目的成績(jī):\n"); //輸入第1名學(xué)校名稱和項(xiàng)目成績(jī) scanf("%s%d",&r->data1,&r->da1); q=L1->next; for(j=1;j<=n;j++) { if(strcmp(r->data1,q->data)==0) { if(z==1) {q->da=q->da+r->da1;q->d1=q->d1+r->da1;}//把項(xiàng)目的成績(jī)把對(duì)應(yīng)的項(xiàng)目的成績(jī)加到學(xué)校里 先把第一名的成績(jī)加
53、到對(duì)應(yīng)的學(xué)校 加到男子項(xiàng)目總分 if(z==2) {q->da=q->da+r->da1;q->d1=q->d1+r->da1;} } q=q->next; } printf("請(qǐng)輸入第2名所來(lái)自的學(xué)校的名字和他該項(xiàng)目的成績(jī):\n"); //輸入第2名學(xué)校名稱和項(xiàng)目成績(jī) scanf("%s%d",&r->data2,&r->da2); q=L1->next; for(j=1;j<=n;j++) { if(strcmp(r->data2,q->data)==0) { if(z==1) {q->da=q->da+r->da2;q->d1=q->d1+r->da2;}
54、if(z==2) {q->da=q->da+r->da2;q->d1=q->d1+r->da2;} } q=q->next; } printf("請(qǐng)輸入第3名所來(lái)自的學(xué)校的名字和他該項(xiàng)目的成績(jī):\n"); //輸入第3名學(xué)校名稱和項(xiàng)目成績(jī) scanf("%s%d",&r->data3,&r->da3); q=L1->next; for(j=1;j<=n;j++) { if(strcmp(r->data3,q->data)==0) { if(z==1) {q->da=q->da+r->da3;q->d1=q->d1+r->da3;} if(z==2) {q->da=q-
55、>da+r->da3;q->d1=q->d1+r->da3;} } q=q->next; } //如果z=2,如此繼續(xù)輸入第四,第五名的學(xué)校名稱和項(xiàng)目成績(jī)。 if(z==2) { printf("請(qǐng)輸入第4名所來(lái)自的學(xué)校的名字和他該項(xiàng)目的成績(jī)\n");//輸入第4名的學(xué)校名稱和項(xiàng)目成績(jī)。 scanf("%s%d",&r->data4,&r->da4); q=L1->next; for(j=1;j<=n;j++) { if(strcmp(r->data4,q->data)==0) {q->da=q->da+r->da4;q->d1=q->d1+r->da4;} q=q-
56、>next; } printf("請(qǐng)輸入第5名所來(lái)自的學(xué)校的名字和他該項(xiàng)目的成績(jī):\n");//輸入第5名的學(xué)校名稱和項(xiàng)目成績(jī)。 scanf("%s%d",&r->data5,&r->da5); q=L1->next; for(j=1;j<=n;j++) { if(strcmp(r->data5,q->data)==0) {q->da=q->da+r->da4;q->d1=q->d1+r->da4;} q=q->next; } } r=r->next; } //輸入男子項(xiàng)目完畢 printf("\n請(qǐng)輸入這次比賽的女子項(xiàng)目的個(gè)數(shù):\n"); //輸入女
57、子項(xiàng)目的的個(gè)數(shù)w scanf("%d",&w); //構(gòu)建鏈表L3,輸入w個(gè)項(xiàng)目名稱 womansports(L3,w); r=L3->next; //依次對(duì)w個(gè)女子項(xiàng)目進(jìn)展結(jié)果記錄 for(i=1;i<=w;i++) { printf("如果此次%s 比賽只取前3名的成績(jī)請(qǐng)輸入1,假如只取前5名的成績(jī)請(qǐng)輸入2!\n",r->data); //輸入1或2 選擇記錄的個(gè)數(shù) scanf("%d",&x); printf("請(qǐng)輸入第1名所來(lái)自的學(xué)校的名字和他該項(xiàng)目的成績(jī):\n"); //輸入第 1 名所來(lái)自的學(xué)校的名字和他該項(xiàng)目的成績(jī) scanf("%s%d",&r->da
58、ta1,&r->da1); q=L1->next; for(j=1;j<=n;j++) { if(strcmp(r->data1,q->data)==0) { if(x==1) {q->da=q->da+r->da1;q->d2=q->d2+r->da1;} if(x==2) {q->da=q->da+r->da1;q->d2=q->d2+r->da1;} } q=q->next; } printf("請(qǐng)輸入第2名所來(lái)自的學(xué)校的名字和他該項(xiàng)目的成績(jī):\n"); //輸入第 2名所來(lái)自的學(xué)校的名字和他該項(xiàng)目的成績(jī) scanf("%s%d",&r->data2,&r->d
59、a2); q=L1->next; for(j=1;j<=n;j++) { if(strcmp(r->data2,q->data)==0) { if(x==1) {q->da=q->da+r->da2;q->d2=q->d2+r->da2;} if(x==2) {q->da=q->da+r->da2;q->d2=q->d2+r->da2;} } q=q->next; } printf("請(qǐng)輸入第3名所來(lái)自的學(xué)校的名字和他該項(xiàng)目的成績(jī):\n"); //輸入第 3名所來(lái)自的學(xué)校的名字和他該項(xiàng)目的成績(jī) scanf("%s%d",&r->data3,&r->da3); q=L
60、1->next; for(j=1;j<=n;j++) { if(strcmp(r->data3,q->data)==0) { if(x==1) {q->da=q->da+r->da3;q->d2=q->d2+r->da3;} if(x==2) {q->da=q->da+r->da3;q->d2=q->d2+r->da3;} } q=q->next; } if(x==2) { printf("請(qǐng)輸入第4名所來(lái)自的學(xué)校的名字和他該項(xiàng)目的成績(jī):\n");//輸入第4名所來(lái)自的學(xué)校的名字和他該項(xiàng)目的成績(jī) scanf("%s%d",&r->data4,&r->da4); q=
61、L1->next; for(j=1;j<=n;j++) { if(strcmp(r->data4,q->data)==0) {q->da=q->da+r->da4;q->d2=q->d2+r->da4;} q=q->next; } printf("請(qǐng)輸入第5名所來(lái)自的學(xué)校的名字和他該項(xiàng)目的成績(jī):\n");//輸入第 5 名所來(lái)自的學(xué)校的名字和他該項(xiàng)目的成績(jī) scanf("%s%d",&r->data5,&r->da5); q=L1->next; for(j=1;j<=n;j++) { if(strcmp(r->data5,q->data)==0) {q->da=q->da
62、+r->da5;q->d2=q->d2+r->da5;} q=q->next; } } r=r->next; } //輸入女子項(xiàng)目完畢 p=L1->next; printf("參加這次比賽的學(xué)校的成績(jī)?yōu)?\n"); //輸出n個(gè)學(xué)校的分?jǐn)?shù) for(i=1;i<=n;i++)//n個(gè)學(xué)校 第一個(gè)節(jié)點(diǎn)開始一直打印到n個(gè) { printf("%s :總分:%d 分男子團(tuán)體總分:%d 分女子團(tuán)體總分:%d 分\n",p->data,p->da,p->d1,p->d2); //學(xué)校的名字…….. p=p->next; // p指向?qū)W校的鏈表 打印完之后指向下一個(gè)節(jié)點(diǎn) } //把團(tuán)體總分按照從大到小進(jìn)展排序并打印 schoolrankings (L1,n); //把男子總分按照從大到小進(jìn)展排序并打印 manrankings (L1,n); //把女子總分按照從大到小進(jìn)展排序并打印 womanrankings (L1,n); } //輸入局部完畢 } while(z!=4); // printf("\n"); } 34 / 34
- 溫馨提示:
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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
5. 裝配圖網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 領(lǐng)導(dǎo)班子2024年度民主生活會(huì)對(duì)照檢查材料范文(三篇)
- 金融工作主題黨課講稿范文(匯編)
- 鍋爐必備學(xué)習(xí)材料
- 鍋爐設(shè)備的檢修
- 主題黨課講稿:走中國(guó)特色金融發(fā)展之路加快建設(shè)金融強(qiáng)國(guó)(范文)
- 鍋爐基礎(chǔ)知識(shí):?jiǎn)t注意事項(xiàng)技術(shù)問(wèn)答題
- 領(lǐng)導(dǎo)班子2024年度民主生活會(huì)“四個(gè)帶頭”對(duì)照檢查材料范文(三篇)
- 正常運(yùn)行時(shí)影響鍋爐汽溫的因素和調(diào)整方法
- 3.鍋爐檢修模擬考試復(fù)習(xí)題含答案
- 司爐作業(yè)人員模擬考試試卷含答案-2
- 3.鍋爐閥門模擬考試復(fù)習(xí)題含答案
- 某公司鍋爐安全檢查表
- 3.工業(yè)鍋爐司爐模擬考試題庫(kù)試卷含答案
- 4.司爐工考試題含答案解析
- 發(fā)電廠鍋爐的運(yùn)行監(jiān)視和調(diào)整