版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p><b> 目 錄</b></p><p><b> 1 問(wèn)題描述1</b></p><p><b> 2 需求分析1</b></p><p><b> 3 概要設(shè)計(jì)2</b></p><p> 3.1抽象數(shù)據(jù)類型定義2
2、</p><p><b> 3.2模塊劃分3</b></p><p><b> 4 詳細(xì)設(shè)計(jì)4</b></p><p> 4.1數(shù)據(jù)類型的定義5</p><p> 4.2主要模塊的算法描述5</p><p><b> 5 測(cè)試分析10</b
3、></p><p> 6 課程設(shè)計(jì)總結(jié)13</p><p><b> 參考文獻(xiàn)14</b></p><p> 附錄(源程序清單)15</p><p><b> 1 問(wèn)題描述</b></p><p> 設(shè)計(jì)一個(gè)運(yùn)動(dòng)會(huì)統(tǒng)分程序,參加運(yùn)動(dòng)會(huì)有n個(gè)學(xué)校,學(xué)校編號(hào)
4、為1……n。比賽分成m個(gè)男子項(xiàng)目,和w個(gè)女子項(xiàng)目。項(xiàng)目編號(hào)為男子1……m,女子m+1……m+w。不同的項(xiàng)目取前五名或前三名積分;取前五名的積分分別為:7、5、3、2、1,前三名的積分分別為:5、3、2;哪些取前五名或前三名由學(xué)生自己設(shè)定。(m<=20,n<=20)。可以輸入各個(gè)項(xiàng)目的前三名或前五名的成績(jī),能統(tǒng)計(jì)各學(xué)校總分,可以按學(xué)校編號(hào)、學(xué)??偡?、男女團(tuán)體總分排序輸出,可以按學(xué)校編號(hào)查詢學(xué)校某個(gè)項(xiàng)目的情況;可以按項(xiàng)目編號(hào)查詢
5、取得前三或前五名的學(xué)校。</p><p><b> 2 需求分析</b></p><p> ?。?)學(xué)校個(gè)數(shù)用n存儲(chǔ)、男子項(xiàng)目個(gè)數(shù)用m存儲(chǔ)、女子項(xiàng)目個(gè)數(shù)用w存儲(chǔ),對(duì)于運(yùn)動(dòng)會(huì)中的項(xiàng)目,把所有項(xiàng)目鏈接成一個(gè)頭結(jié)點(diǎn)為ITEM的單鏈表,將所有結(jié)點(diǎn)順序存儲(chǔ)在一個(gè)ITEM a[MAX]一維數(shù)組中。對(duì)于運(yùn)動(dòng)會(huì)中的學(xué)校信息,把所有學(xué)校信息鏈接成一個(gè)頭結(jié)點(diǎn)為SCHNode的單鏈表,將
6、所有結(jié)點(diǎn)順序存儲(chǔ)在一個(gè)SCHNode b[MAX]一維數(shù)組中。</p><p> (2)演示程序的輸入輸出形式為在輸出設(shè)如備上顯示輸入提示后,由用戶在輸入、備上輸入相應(yīng)數(shù)據(jù)(學(xué)校的個(gè)數(shù)、男子項(xiàng)目的個(gè)數(shù)、女子項(xiàng)目的個(gè)數(shù))。在輸入數(shù)據(jù)之后,用戶可以進(jìn)行查詢成績(jī)的操作,包括:按學(xué)校編號(hào)查詢項(xiàng)目、按項(xiàng)目編號(hào)查詢學(xué)校成績(jī);戶還可以分別按學(xué)校編號(hào)、學(xué)??偡?、男女團(tuán)體總分排序輸出數(shù)據(jù),然后進(jìn)行數(shù)據(jù)保存操作。</p>
7、;<p> ?。?)本程序執(zhí)行命令包括:</p><p> ①結(jié)構(gòu)體定義、鏈表的構(gòu)造</p><p><b> ②輸入相關(guān)數(shù)據(jù)</b></p><p> ?、郯匆笈判蜉敵鰯?shù)據(jù)</p><p> ④ 按要求查詢相關(guān)記錄</p><p><b> ?、軪xit</
8、b></p><p><b> ?。?)測(cè)試數(shù)據(jù)</b></p><p> m=3,w=2,n=5</p><p> 項(xiàng)目1前五名:5 3 1 2 4</p><p> 項(xiàng)目2前五名:3 5 4 2 1</p><p> 項(xiàng)目3前五名:1 2 3 4 5</p><
9、;p> 項(xiàng)目4前五名:1 5 2 4 3</p><p> 項(xiàng)目5前五名:5 4 3 2 1</p><p><b> 3 概要設(shè)計(jì)</b></p><p> 3.1抽象數(shù)據(jù)類型定義</p><p> ?。?)線性表的抽象數(shù)據(jù)類型定義</p><p><b> ADT L
10、ist{</b></p><p> 數(shù)據(jù)對(duì)象:D={ai|ai∈ElemSet, i=1,2, …,n, n≧0}</p><p> 數(shù)據(jù)關(guān)系:R1={<ai-1,ai>|ai-1,ai∈D, i=1,2, …,n }</p><p><b> 基本操作:</b></p><p> Ini
11、tList( &L )</p><p> 操作結(jié)果:構(gòu)造一個(gè)空的線性表L。</p><p> DestroyList( &L )</p><p> 初始條件:線性表L已存在。</p><p> 操作結(jié)果:銷毀線性表L。</p><p> ClearList( &L )</p>
12、;<p> 初始條件:線性表L已存在。</p><p> 操作結(jié)果:將L重置為空表。</p><p> ListEmpty( L )</p><p> 初始條件:線性表L已存在。</p><p> 操作結(jié)果:若L為空表,則返回TRUE,否則返回FALSE。</p><p> ListLengt
13、h( L )</p><p> 初始條件:線性表L已存在。</p><p> 操作結(jié)果:返回L中數(shù)據(jù)元素個(gè)數(shù)。</p><p> GetElem( L, i, &e )</p><p> 初始條件:線性表L已存在,1≦i≦ListLength(L)。</p><p> 操作結(jié)果:用e返回L中第i個(gè)數(shù)據(jù)
14、元素的值。</p><p> LocateElem( L, e, compare() )</p><p> 初始條件:線性表L已存在,compare()是數(shù)據(jù)元素判定函數(shù)。</p><p> 操作結(jié)果:返回L中第1個(gè)與e滿足關(guān)系compare()的數(shù)據(jù)元素的位序。若這樣的數(shù)據(jù)元素不存在,則返回值為0。</p><p> PriorE
15、lem( L, cur_e, &pre_e )</p><p> 初始條件:線性表L已存在。</p><p> 操作結(jié)果:若cur_e是L的數(shù)據(jù)元素,且不是第一個(gè),則用pre_e返回它的前驅(qū),否則操作失敗,pre_e無(wú)定義。</p><p> NextElem( L, cur_e, &next_e )</p><p>
16、 初始條件:線性表L已存在。</p><p> 操作結(jié)果:若cur_e是L的數(shù)據(jù)元素,且不是最后一個(gè),則用next_e返回它的后繼,否則操作失敗,next_e無(wú)定義。</p><p> ListInsert( &L, i, e )</p><p> 初始條件:線性表L已存在,1≦i≦ListLength(L)+1。</p><p&g
17、t; 操作結(jié)果:在L中第i個(gè)位置之前插入新的數(shù)據(jù)元素e,L的長(zhǎng)度加1。</p><p> ListDelete( &L, i, &e )</p><p> 初始條件:線性表L已存在且非空,1≦i≦ListLength(L)。</p><p> 操作結(jié)果:刪除L的第i個(gè)數(shù)據(jù)元素,并用e返回其值,L的長(zhǎng)度減1。</p><p&
18、gt; ListTraverse( L, visit() )</p><p> 初始條件:線性表L已存在。</p><p> 操作結(jié)果:依次對(duì)L的每個(gè)數(shù)據(jù)元素調(diào)用函數(shù)visit()。一旦visit()失敗,則操作</p><p><b> 敗。</b></p><p><b> }ADT List&l
19、t;/b></p><p> ?。?)運(yùn)動(dòng)會(huì)分?jǐn)?shù)統(tǒng)計(jì)鏈表的抽象數(shù)據(jù)類型定義:</p><p> ADT Games{</p><p> 數(shù)據(jù)對(duì)象:D={ai|ai∈TermSet,I=1,2,…,m, m≥0 TermSet中的每個(gè)元</p><p> 包含一個(gè)表示系數(shù)的實(shí)數(shù)和表示指數(shù)的整數(shù) }</p><p
20、> 數(shù)據(jù)關(guān)系:R1={<ai-1,ai>| ai-1,ai∈D,且ai<20}</p><p> 基本操作:void funct1(ALLitems *g1,ALLNode *g2) </p><p> 操作結(jié)果:輸入輸入運(yùn)動(dòng)會(huì)的一些基本信息(參賽學(xué)校數(shù)n,男女的項(xiàng)目數(shù)m、n</p><p> 建立g2->z,再建立學(xué)校和
21、項(xiàng)目鏈表。</p><p> void funct2(ALLNode *g2) </p><p> 初始條件:鏈表g2已存在。</p><p> 操作結(jié)果:輸出各學(xué)校的總分。</p><p> void funct3(ALLNode *g2) </p><p> 初始條件:鏈表g2已存在。</p>
22、;<p> 操作結(jié)果:按學(xué)校編號(hào)排序輸出。 </p><p> void funct4(ALLNode *g2) </p><p> 初始條件:鏈表g2已存在。</p><p> 操作結(jié)果:按學(xué)??偡峙判蜉敵觥?</p><p> void fun
23、ct5(ALLNode *g2) </p><p> 初始條件:鏈表g2已存在。</p><p> 操作結(jié)果:按男團(tuán)體總分排序輸出。 </p><p> void funct6(ALLNode *g2) </p><p>
24、; 初始條件:鏈表g2已存在。</p><p> 操作結(jié)果:按女團(tuán)體總分排序輸出。 </p><p> void funct7(ALLNode *g2) </p><p> 初始條件:鏈表g2已存在。</p><p> 操作結(jié)果:按學(xué)校編號(hào)查詢學(xué)校某個(gè)項(xiàng)目情況。</p
25、><p> void funct8(ALLNode *g2) </p><p> 初始條件:鏈表g2已存在。</p><p> 操作結(jié)果:按項(xiàng)目編號(hào)查詢?nèi)〉妹蔚膶W(xué)校 。</p><p> } ADT Games</p><p><b> 3.2
26、模塊劃分</b></p><p><b> 本程序共九個(gè)模塊:</b></p><p><b> ?。?)主程序模塊</b></p><p><b> main() </b></p><p><b> { 輸入信息;</b></
27、p><p><b> 輸出信息;</b></p><p><b> 按要求排序;</b></p><p><b> 按要求查詢信息;}</b></p><p> ?。?)輸入各項(xiàng)目成績(jī)和保存信息內(nèi)文件模塊。</p><p> ?。?)統(tǒng)計(jì)總分輸出模塊。
28、</p><p> (4)按學(xué)校編號(hào)排序輸出模塊。</p><p> ?。?)按學(xué)校總分排序輸出模塊。</p><p> (6)按男團(tuán)體總分排序輸出模塊。</p><p> ?。?)按女團(tuán)體總分排序輸出模塊。</p><p> (8)按學(xué)校編號(hào)查詢學(xué)校某個(gè)項(xiàng)目情況模塊。</p><p>
29、?。?)按項(xiàng)目編號(hào)查詢?nèi)〉妹蔚膶W(xué)校模塊。</p><p><b> 4 詳細(xì)設(shè)計(jì)</b></p><p> 4.1數(shù)據(jù)類型的定義</p><p> #define MAX 50 </p><p> #define NULL 0 </p><p> ?。?)學(xué)校信息鏈表;</
30、p><p> typedef struct node1{ </p><p> int school; /*學(xué)校編號(hào)*/ </p><p> int record; /*項(xiàng)目成績(jī)*/ </p><p> struct node1 *next; /*鏈域*/ </p><p> }School
31、s; </p><p> ?。?)項(xiàng)目鏈表的表頭;</p><p> typedef struct { </p><p> int item; /*項(xiàng)目編號(hào)*/ </p><p> Schools *firstschool; /*鏈域指向鏈表中第一個(gè)結(jié)點(diǎn)*/ </p><p><b>
32、; }ITEM; </b></p><p><b> ?。?)項(xiàng)目結(jié)構(gòu)體;</b></p><p> typedef struct { </p><p> int z; /* 項(xiàng)目總數(shù) */ </p><p> ITEM a[MAX]; </p><p>
33、}ALLitems; </p><p><b> ?。?)項(xiàng)目單鏈表;</b></p><p> typedef struct node2 { </p><p> int item; /*該學(xué)校獲獎(jiǎng)的項(xiàng)目*/ </p><p> int record; /*項(xiàng)目成績(jī)*/ </p>
34、<p> struct node2 *next; /*鏈域*/ </p><p> }Items; </p><p> ?。?)學(xué)校信息單鏈表表頭;</p><p> typedef struct { </p><p> int school; /*學(xué)校編號(hào)*/ </p><p&g
35、t; int score; /*學(xué)??偡?/ </p><p> int boys; /*男團(tuán)體總分*/ </p><p> int girls; /*女團(tuán)體總分*/ </p><p> Items *firstitem; /*鏈域指向鏈表中第一個(gè)獲獎(jiǎng)項(xiàng)目的結(jié)點(diǎn)*/ </p><p> }SCHNode;
36、 </p><p> ?。?)學(xué)校信息結(jié)構(gòu)體;</p><p> typedef struct { </p><p> int n; /* 學(xué)??倲?shù) */ </p><p> SCHNode b[MAX]; </p><p> }ALLNode; </p><p> 4.2
37、主要模塊的算法描述</p><p> 該題主要分為三步:(1)各數(shù)據(jù)類型的定義,輸入各項(xiàng)目的成績(jī),并輸出各學(xué)校的總分;(2)按學(xué)校編號(hào)排序輸出,按學(xué)校總分排序輸出,按男、女團(tuán)體總分排序輸出;(3)按學(xué)校編號(hào)查詢學(xué)校某個(gè)項(xiàng)目情況,按項(xiàng)目編號(hào)查詢?nèi)〉妹蔚膶W(xué)校。該題由我和鄒斌、鄒飛龍同學(xué)合作完成,我主要負(fù)責(zé)(1)。</p><p><b> ?。?)主函數(shù)</b><
38、;/p><p><b> main() </b></p><p><b> { </b></p><p> ALLitems *g1; </p><p> ALLNode *g2; </p><p><b> int t; </b><
39、;/p><p><b> for(;;)</b></p><p> { printf("\t Games Score Statistics \n"); printf("\t* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\
40、n");</p><p> printf("\t* 1.Enter all project achievements and store files *\n"); </p><p> printf("\t* 2.Statistics of schools Total *\n");
41、 </p><p> printf("\t* 3.Sort the out put by the school number *\n"); </p><p> printf("\t* 4.Total sorted out by the school *\n"); </p
42、><p> printf("\t* 5.Total sorted out by male groups *\n"); </p><p> printf("\t* 6.Total sorted out by women groups *\n"); </p><p&
43、gt; printf("\t* 7.SearchSchools bySchoolNumber ofan tem *\n"); </p><p> printf("\t* 8.Search by item number to obtain ran king of schools *\n"); </p><p> prin
44、tf("\t* 0.Exit *\n"); </p><p> printf("\t* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n");</p><p> printf("
45、\t Select(0-8):"); </p><p> loop:scanf("%d",&t); /*選擇編號(hào)0-8要實(shí)現(xiàn)的功能*/</p><p> switch(t) </p><p> { case 1:funct1(g1,g2);save();break; /*輸入各個(gè)項(xiàng)目成績(jī)并存儲(chǔ)文件*/
46、 </p><p> case 2:funct2(g2);break; /*統(tǒng)計(jì)各學(xué)??偡?/</p><p> case 3:funct3(g2);break; /*按學(xué)校編號(hào)排序輸出*/</p><p> case 4:funct4(g2);break; /*按學(xué)??偡峙判蜉敵?/</p><p> case 5:
47、funct5(g2);break; /*按男團(tuán)體總分排序輸出*/</p><p> case 6:funct6(g2);break; /*按女團(tuán)體總分排序輸出*/</p><p> case 7:funct7(g2);break; /*按學(xué)校編號(hào)查詢學(xué)校某個(gè)項(xiàng)目情況*/</p><p> case 8:funct8(g1);break; /*按
48、項(xiàng)目編號(hào)查詢?nèi)〉妹蔚膶W(xué)校*/</p><p> case 0:exit(0); /*退出*/ </p><p> default:{ printf("Entry error, please re-select:"); </p><p> goto loop;} </p><p><b> }
49、</b></p><p><b> } </b></p><p><b> } </b></p><p> ?。?)輸入運(yùn)動(dòng)會(huì)分?jǐn)?shù)構(gòu)造學(xué)校項(xiàng)目鏈表算法的偽碼描述如下:</p><p> void funct1(ALLitems *g1,ALLNode *g2) </p
50、><p> /*輸入各項(xiàng)目的信息構(gòu)造項(xiàng)目鏈表g1,輸入各學(xué)校的信息構(gòu)造學(xué)校鏈表g2 */</p><p> { printf("\n*** 輸入所胡項(xiàng)目信息 ***\n\n"); </p><p> 輸入男子項(xiàng)目存放在m中; </p><p> if(w<0或w>20) </p>
51、<p> { 輸入錯(cuò)誤,重新輸入m的值;</p><p><b> } </b></p><p> 輸入女了項(xiàng)目存放在w;</p><p> if(w<0或w>20) </p><p> { 輸入錯(cuò)誤,重新輸入w的值;</p><p><b>
52、 } </b></p><p> 輸入所有參加學(xué)校的總數(shù)n存放在g2->n ;</p><p> if(學(xué)??倲?shù)g2->n <0或g2->n>20 /*重新輸入n*/</p><p> { 輸入錯(cuò)誤,重輸入n的值;</p><p><b> } </b></p
53、><p> g1->z=男子項(xiàng)目+女子項(xiàng)目; </p><p> 則項(xiàng)目編號(hào)為男子1-m,女子m+1- g1->z; </p><p> 開(kāi)始記錄運(yùn)動(dòng)會(huì)成績(jī)并以輸入0為標(biāo)志結(jié)束; </p><p><b> 初始化項(xiàng)目鏈表;</b></p><p><b>
54、; 初始化學(xué)校鏈表; </b></p><p><b> 初始賦i=1;</b></p><p> while(輸入的項(xiàng)目編號(hào)要求0<i<g2->z且以為結(jié)束標(biāo)志) </p><p> { 輸入項(xiàng)目編號(hào); </p><p> if(項(xiàng)目編號(hào)不為0) </p>
55、<p> { 選擇1,2表示是前三名還前五名;</p><p> 輸入1或2進(jìn)行選擇;</p><p> if(既不是1也不是2) </p><p> { 輸入有錯(cuò),重新輸入; </p><p><b> } </b></p><p> if(輸入j=1)
56、/* 該項(xiàng)目只有前三名時(shí)執(zhí)行此語(yǔ)句 */ </p><p> { 首先給h賦初值為3 </p><p> do{ 輸入學(xué)校的名次x; </p><p> 生成一個(gè)新的學(xué)校結(jié)點(diǎn) p1=(Schools *)malloc(sizeof(Schools)); </p><p> 將x的值賦給p1->school; <
57、;/p><p> 生成一個(gè)新的項(xiàng)目結(jié)點(diǎn)p2=(Items *)malloc(sizeof(Items)); </p><p> 將i的值賦給p2->item; </p><p> if(h==3為第三名) 將分值2同時(shí)賦給p2->record和p1->record; </p><p> if(h==2為第二名
58、) 將分值3同時(shí)賦給 p2->record和p1->record; </p><p> if(h==1第一名) 將分值5同時(shí)賦給p2->record和p1->record; </p><p> 將g1->a[i].firstschool插到p1的表尾; </p><p> 將g2->b[x].firstitem插
59、到p2的表尾;</p><p> g2->b[x].score=g2->b[x].score+p2->record; /* 累計(jì)總分 */</p><p> if(i小于m為男子項(xiàng)目);</p><p> 則g2->b[x].boys=g2->b[x].boys+p2->record;</p><p>
60、;<b> 否則為女子項(xiàng)目</b></p><p> g2->b[x].girls=g2->b[x].girls+p2->record; </p><p><b> 同時(shí)h--; </b></p><p> }while(x不等于0且h不等于0); </p><p>
61、;<b> } </b></p><p> if(j==2) /* 該項(xiàng)目有前五名時(shí)執(zhí)行此語(yǔ)句 */ </p><p> { 首先給h賦初值為5 </p><p> do{ 輸入學(xué)校的名次x; </p><p> 生成一個(gè)新的學(xué)校結(jié)點(diǎn) p1=(Schools *)malloc(sizeof(Sch
62、ools)); </p><p> 將x的值賦給p1->school; </p><p> 生成一個(gè)新的項(xiàng)目結(jié)點(diǎn)p2=(Items *)malloc(sizeof(Items)); </p><p> 將i的值賦給p2->item; </p><p> if(h==5為第五名) 將分值1同時(shí)賦給p2->
63、;record和p1->record; </p><p> if(h==4為第四名) 將分值2同時(shí)賦給 p2->record和p1->record; </p><p> if(h==3第三名) 將分值3同時(shí)賦給p2->record和p1->record; </p><p> if(h==2為第二名) 將分值2同時(shí)賦給p
64、2->record和p1->record; </p><p> if(h==1為第一名) 將分值3同時(shí)賦給 p2->record和p1->record; </p><p> 將g1->a[i].firstschool插到p1的表尾; </p><p> 將g2->b[x].firstitem插到p2的表尾;<
65、;/p><p> g2->b[x].score=g2->b[x].score+p2->record; /* 累計(jì)總分 */</p><p> if(i小于m為男子項(xiàng)目;</p><p> 則g2->b[x].boys=g2->b[x].boys+p2->record;</p><p><b>
66、 否則為女子項(xiàng)目</b></p><p> g2->b[x].girls=g2->b[x].girls+p2->record; </p><p><b> 同時(shí)h--; </b></p><p> }while(x不等于0且h不等于0); </p><p><b>
67、}</b></p><p><b> }}</b></p><p><b> } </b></p><p> ?。?)輸出各學(xué)校的得分情況算法的偽碼描述如下:</p><p> void funct2(ALLNode *g2) </p><p> /*
68、輸出學(xué)校鏈表g2中各學(xué)??偡謌2 ->b[k].score和學(xué)校編號(hào)k;</p><p><b> { </b></p><p> 提示語(yǔ)句輸出各學(xué)??偡郑?</p><p> 按學(xué)校編號(hào),總分顯示; </p><p> for(k=1;k<=g2->n;k++) 利用for循環(huán)語(yǔ)句
69、實(shí)現(xiàn)</p><p> 輸出學(xué)校編號(hào)k,學(xué)校總分g2->b[k].score; </p><p><b> } </b></p><p><b> 5 測(cè)試分析</b></p><p> 輸出主菜單如圖5-1所示:</p><p><b> 圖
70、5-1主菜單</b></p><p> 輸入男女項(xiàng)目總數(shù)和參賽學(xué)??倲?shù)及第一二個(gè)項(xiàng)目名次如圖5-2所示:</p><p><b> 圖5-2輸入界面1</b></p><p> 輸入三四五個(gè)項(xiàng)目獲獎(jiǎng)學(xué)校的名次從第一名開(kāi)始往下排如圖5-3所示:</p><p><b> 圖5-3輸入界面2&l
71、t;/b></p><p> 輸出運(yùn)動(dòng)會(huì)中各學(xué)??偡秩鐖D5-4所示:</p><p> 圖5-4輸出運(yùn)動(dòng)會(huì)中各學(xué)??偡?lt;/p><p> 對(duì)運(yùn)動(dòng)會(huì)信息輸入數(shù)據(jù)及所得學(xué)??偡纸Y(jié)果如表5-1所示:</p><p> 表5-1 學(xué)校排名表</p><p> 用上述輸入數(shù)據(jù)所得學(xué)校總分結(jié)果如表5-2:</
72、p><p> 表5-2 學(xué)校總分表</p><p> 由以上兩表格的結(jié)果分析可知,程序能完成設(shè)定的各種操作,在使用多組數(shù)據(jù)進(jìn)行多次運(yùn)行的過(guò)程中并未出現(xiàn)任何異常現(xiàn)象,所以程序達(dá)到了原先的設(shè)計(jì)要求。</p><p> 由以上表格的結(jié)果分析可知,程序能完成設(shè)定的各種操作,并且當(dāng)輸入數(shù)值出現(xiàn)錯(cuò)誤時(shí)能提示錯(cuò)誤的原因,在使用多組數(shù)據(jù)進(jìn)行多次運(yùn)行的過(guò)程中并未出現(xiàn)任何異?,F(xiàn)象,所
73、以程序達(dá)到了原先的設(shè)計(jì)要求。</p><p><b> 6 課程設(shè)計(jì)總結(jié)</b></p><p> 通過(guò)這次數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì),我學(xué)到了很多新的知識(shí),并且將這些知識(shí)應(yīng)用在實(shí)踐中,鍛煉了自己的動(dòng)手能力,但也發(fā)現(xiàn)了一些問(wèn)題??偨Y(jié)如下:</p><p> ?。?)要善于分析程序代碼的核心思想,并且在充分理解了代碼內(nèi)容之后,要會(huì)有所創(chuàng)新。如這次我們?cè)?/p>
74、網(wǎng)上源代碼中有許多的冗余部分運(yùn)行有好幾個(gè)錯(cuò)誤,我通過(guò)自己的仔細(xì)分析和多次調(diào)試,成功將一些看似有用卻讓運(yùn)行出錯(cuò)的無(wú)用代碼。并且刪除了一些無(wú)用的代碼,如源代碼中的多余的,還有許多地方還不是很完善,經(jīng)過(guò)我們幾個(gè)人的一起努力終于達(dá)到了最佳程序。</p><p> ?。?)對(duì)于出現(xiàn)的調(diào)試錯(cuò)誤要仔細(xì)分析錯(cuò)誤原因,根據(jù)錯(cuò)誤提示,按照自頂向下的程序設(shè)計(jì)原則,逐個(gè)進(jìn)行排錯(cuò)。只要夠細(xì)心,就一定能找到錯(cuò)誤所在。如在運(yùn)行單鏈表基本操作原
75、程序時(shí),我發(fā)現(xiàn)進(jìn)行二次并交差運(yùn)算后,A鏈表的數(shù)值會(huì)改變,但是一直不明白為什么,后來(lái)在和同學(xué)討論后,才發(fā)現(xiàn)了是指針的問(wèn)題,修改了部分代碼后,這個(gè)問(wèn)題就成功的被解決了。</p><p> ?。?)編程過(guò)程中加入必要的注釋十分重要,這不僅是為了別人能更容易的看懂你的源代碼,更重要的是自己未來(lái)修改方便,因?yàn)槌绦虼a一多,好多變量以及函數(shù)自己都不知道是干什么用的,這時(shí)如果原先有必要的注釋,就能很好的幫助自己理解變量及函數(shù)的
76、含義,不用從頭開(kāi)始理解程序,提高工作的效率。</p><p> ?。?)要善于利用各種資源,提高自己的編程效率。網(wǎng)絡(luò)、以及各種書(shū)籍上有很多各式各樣的程序源代碼、編程的思想等,只要合適,都可以拿來(lái)為己所用,這樣能大大提高編程的效率。</p><p> 在此我非常要感謝的是我的指導(dǎo)老師xx老師,感謝老師的細(xì)心認(rèn)真的輔導(dǎo),讓我對(duì)數(shù)據(jù)結(jié)構(gòu)這門課程又有了進(jìn)一步的理解。</p><
77、;p><b> 參考文獻(xiàn)</b></p><p> [1] 黃同成,黃俊民,董建寅.?dāng)?shù)據(jù)結(jié)構(gòu)[M].北京:中國(guó)電力出版社,2008</p><p> [2] 董建寅,黃俊民,黃同成.?dāng)?shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)指導(dǎo)與題解[M].北京:中國(guó)電力出版社,2008</p><p> [3] 嚴(yán)蔚敏,吳偉民. 數(shù)據(jù)結(jié)構(gòu)(C語(yǔ)言版)[M]. 北京:清華大學(xué)
78、出版社,2002</p><p> [4] 劉振鵬,張曉莉,郝杰.?dāng)?shù)據(jù)結(jié)構(gòu)[M].北京:中國(guó)鐵道出版社,2003</p><p><b> 附錄(源程序清單)</b></p><p> #include <stdlib.h> </p><p> #include <string.H>
79、 </p><p> #include <IO.H> </p><p> #include <conio.h> /*屏幕操作函數(shù)*/ </p><p> #include<stdio.h> </p><p> #define MAX 50 </p><p&g
80、t; #define NULL 0 </p><p> typedef struct node1</p><p><b> { </b></p><p> int school; /*學(xué)校編號(hào)*/ </p><p> int record; /*項(xiàng)目成績(jī)*/ </p><p&
81、gt; struct node1 *next; /*鏈域*/ </p><p> }Schools; </p><p> typedef struct </p><p><b> { </b></p><p> int item; /*項(xiàng)目編號(hào)*/ </p><p>
82、; Schools *firstschool; /*鏈域指向鏈表中第一個(gè)結(jié)點(diǎn)*/ </p><p><b> }ITEM; </b></p><p> typedef struct </p><p><b> { </b></p><p> int z; /* 項(xiàng)目總數(shù) *
83、/ </p><p> ITEM a[MAX]; </p><p> }ALLitems; </p><p> typedef struct node2</p><p><b> { </b></p><p> int item; /*該學(xué)校獲獎(jiǎng)的項(xiàng)目*/ <
84、/p><p> int record; /*項(xiàng)目成績(jī)*/ </p><p> struct node2 *next; /*鏈域*/ </p><p> }Items; </p><p> typedef struct { </p><p> int school; /*學(xué)校編號(hào)*/
85、 </p><p> int score; /*學(xué)校總分*/ </p><p> int boys; /*男團(tuán)體總分*/ </p><p> int girls; /*女團(tuán)體總分*/ </p><p> Items *firstitem; /*鏈域指向鏈表中第一個(gè)獲獎(jiǎng)項(xiàng)目的結(jié)點(diǎn)*/ </p>&l
86、t;p> }SCHNode; </p><p> typedef struct { </p><p> int n; /*學(xué)校總數(shù)*/ </p><p> SCHNode b[MAX]; </p><p> }ALLNode; </p><p> ALLitems *g1; &
87、lt;/p><p> ALLNode *g2; </p><p> void funct1(ALLitems *g1,ALLNode *g2) /* 輸入各個(gè)項(xiàng)目成績(jī) */ </p><p> { Schools *p1; </p><p> Items *p2; </p><p> int i,
88、j,k,m,w,h,x,t; </p><p> printf("\n*** Enter all project information ***\n\n"); </p><p> printf("Enter the total number of men's m:"); </p><p> scanf
89、("%d",&m); </p><p> if(m<0||m>20) </p><p> { printf("Entry error, m is an integer less than 20, please re-enter the:"); </p><p> scanf("
90、%d",&m); </p><p><b> } </b></p><p> printf("Enter the total number of women's events w:"); </p><p> scanf("%d",&w); </p&
91、gt;<p> if(w<0||w>20) </p><p> { printf("Entry error, w is an integer less than 20, please re-enter the:"); </p><p> scanf("%d",&w); </p>&l
92、t;p><b> } </b></p><p> printf("Enter total number of schools participate in the Games n:"); </p><p> scanf("%d",&g2->n); </p><p>
93、 if(g2->n<0||g2->n>20) </p><p> { printf("Entry error, n is an integer less than 20, please re-enter the :"); </p><p> scanf("%d",&g2->n); </p&
94、gt;<p><b> } </b></p><p><b> t=m+w;</b></p><p> g1->z=t; </p><p> printf("Then the item number for the men's 1 -% d, women% d-% d&q
95、uot;,m,m+1,g1->z); </p><p> printf("\n\n**Record Games Results ** \ n (enter 0 marks the end of)"); </p><p> for(k=1;k<=g1->z;k++) /*對(duì)兩個(gè)鄰接表置初態(tài)*/ </p><p>
96、; { g1->a[k].item=k; </p><p> g1->a[k].firstschool=NULL; </p><p><b> } </b></p><p> for(k=1;k<=g2->n;k++) </p><p> { g2->b[k].sc
97、hool=k; </p><p> g2->b[k].firstitem=NULL; </p><p> g2->b[k].score=g2->b[k].boys=g2->b[k].girls=0; </p><p><b> } </b></p><p> g2->
98、;b[0].score=g2->b[0].boys=g2->b[0].girls=0; </p><p><b> i=1;</b></p><p> while(i) </p><p> { printf("\nItem:"); </p><p> scanf(&qu
99、ot;%d",&i); </p><p> if(i!=0) </p><p> { printf("1.Top three 2.Top five\n"); </p><p> printf("Select:"); </p><p> scanf(&quo
100、t;%d",&j); </p><p> if(j!=1&&j!=2) </p><p> { printf("Entry error, please re-select:"); </p><p> scanf("%d",&j); </p><
101、p><b> } </b></p><p> if(j==1) /* 該項(xiàng)目只有前三名時(shí)執(zhí)行此語(yǔ)句 */ </p><p> { h=3; </p><p> do{ printf("No.% d Name: School (school number is number)",h);
102、</p><p> scanf("%d",&x); </p><p> p1=(Schools *)malloc(sizeof(Schools)); </p><p> p1->school=x; </p><p> p2=(Items *)malloc(sizeof(Items));
103、 </p><p> p2->item=i; </p><p> if(h==3) p2->record=p1->record=2; </p><p> if(h==2) p2->record=p1->record=3; </p><p> if(h==1) p2->record=p1-
104、>record=5; </p><p> p1->next=g1->a[i].firstschool; </p><p> g1->a[i].firstschool=p1; </p><p> p2->next=g2->b[x].firstitem; </p><p> g2->
105、;b[x].firstitem=p2; </p><p> g2->b[x].score=g2->b[x].score+p2->record; /* 累計(jì)總分 */</p><p> if(i<=m) g2->b[x].boys=g2->b[x].boys+p2->record;</p><p> else g2
106、->b[x].girls=g2->b[x].girls+p2->record; </p><p><b> h--; </b></p><p> }while(x!=0&&h!=0); </p><p><b> } </b></p><p>
107、if(j==2) /* 該項(xiàng)目有前五名時(shí)執(zhí)行此語(yǔ)句 */ </p><p> { h=5; </p><p> do{ printf("No.% d Name: School (school number is number)",h); </p><p> scanf("%d",&x); &
108、lt;/p><p> p1=(Schools *)malloc(sizeof(Schools)); </p><p> p1->school=x; </p><p> p2=(Items *)malloc(sizeof(Items)); </p><p> p2->item=i; </p><
109、;p> if(h==5) p2->record=p1->record=1; </p><p> if(h==4) p2->record=p1->record=2; </p><p> if(h==3) p2->record=p1->record=3; </p><p> if(h==2) p2->r
110、ecord=p1->record=5; </p><p> if(h==1) p2->record=p1->record=7; </p><p> p1->next=g1->a[i].firstschool; </p><p> g1->a[i].firstschool=p1; </p><
111、;p> p2->next=g2->b[x].firstitem; </p><p> g2->b[x].firstitem=p2; </p><p> g2->b[x].score=g2->b[x].score+p2->record; </p><p> if(i<=m) g2->
112、b[x].boys=g2->b[x].boys+p2->record; </p><p> else g2->b[x].girls=g2->b[x].girls+p2->record; </p><p><b> h--; </b></p><p> }while(x!=0&&h
113、!=0); </p><p><b> } }}} </b></p><p> void save() /* 存儲(chǔ)數(shù)據(jù)文件 */ </p><p> { FILE *fp1,*fp2; </p><p> if((fp1=fopen("sports1","wb
114、"))==NULL) </p><p> { printf("cannot open file.\n"); </p><p> return; </p><p><b> } </b></p><p> if(fwrite(g1,sizeof(ALLitems),1,
115、fp1)!=1) </p><p> printf("file write error.\n"); </p><p> fclose(fp1); </p><p> if((fp2=fopen("sports2","wb"))==NULL) </p><p>
116、 { printf("cannot open file.\n"); </p><p> return; </p><p><b> } </b></p><p> if(fwrite(g2,sizeof(ALLNode),1,fp2)!=1) </p><p> printf(
117、"file write error.\n"); </p><p> fclose(fp2); </p><p><b> } </b></p><p> void funct2(ALLNode *g2) /* 輸出各學(xué)??偡?*/ </p><p> { int k;
118、 </p><p> printf("\n\n*** Total output of all schools ***\n"); </p><p> printf("School No. \ t Total\n"); </p><p> for(k=1;k<=g2->n;k++) &l
119、t;/p><p> printf("%d\t\t %d\n",k,g2->b[k].score); </p><p> printf("\n"); </p><p> printf("Press any key to return to the main menu......"); &l
120、t;/p><p> getch(); </p><p><b> } </b></p><p> void funct3(ALLNode *g2) /* 按學(xué)校編號(hào)排序輸出 */ </p><p> { int k; </p><p> Items *p2; </
121、p><p> printf("\n\n*** Sort the output by the school number ***\n"); </p><p> printf("School Number \t\t\t Awards \n"); </p><p> for(k=1;k<=g2->n;k++)
122、 </p><p> { printf("%d\t",k); </p><p> p2=g2->b[k].firstitem; </p><p> while(p2!=NULL) </p><p> { printf("Item% d: was% d points",p2-
123、>item,p2->record); </p><p> p2=p2->next; </p><p><b> } </b></p><p> printf("\n"); </p><p><b> } </b></p>
124、<p> printf("\n"); </p><p> printf("Press any key to return to the main menu......"); </p><p> getch(); </p><p><b> } </b></p>
125、;<p> void funct4(ALLNode *g2) /* 按學(xué)??偡峙判蜉敵?*/ </p><p> { int i,j,k; </p><p> printf("\n\n*** Total sorted out by the school ***\n"); </p><p> printf(&q
126、uot;School No. \t Total \n"); </p><p> for(i=2;i<=g2->n;i++) </p><p> { g2->b[0].score=g2->b[i].score; </p><p> g2->b[0].boys=g2->b[i].boys;
127、 </p><p> g2->b[0].girls=g2->b[i].girls; </p><p> g2->b[0].school=g2->b[i].school; </p><p><b> j=i-1; </b></p><p> while(g2->b[0]
128、.score<g2->b[j].score&&j>0) </p><p> { g2->b[j+1].score=g2->b[j].score; </p><p> g2->b[j+1].boys=g2->b[j].boys; </p><p> g2->b[j+1].girls=g2
129、->b[j].girls; </p><p> g2->b[j+1].school=g2->b[j].school; </p><p><b> j--; </b></p><p><b> } </b></p><p> g2->b[j+1].sco
130、re=g2->b[0].score; </p><p> g2->b[j+1].boys=g2->b[0].boys; </p><p> g2->b[j+1].girls=g2->b[0].girls; </p><p> g2->b[j+1].school=g2->b[0].school; <
131、/p><p><b> } </b></p><p> for(k=1;k<=g2->n;k++) </p><p> printf("%d \t\t%d\n",g2->b[k].school,g2->b[k].score); </p><p> printf(
132、"Press any key to return to the main menu......"); </p><p> getch(); </p><p><b> } </b></p><p> void funct5(ALLNode *g2) /* 按男團(tuán)體總分排序輸出 */ </p&
溫馨提示
- 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. 眾賞文庫(kù)僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)哈希表和運(yùn)動(dòng)會(huì)
- c語(yǔ)言課程設(shè)計(jì)報(bào)告--校際運(yùn)動(dòng)會(huì)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)--運(yùn)動(dòng)會(huì)分?jǐn)?shù)統(tǒng)計(jì)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)--運(yùn)動(dòng)會(huì)分?jǐn)?shù)統(tǒng)計(jì)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)——運(yùn)動(dòng)會(huì)分?jǐn)?shù)統(tǒng)計(jì)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)---運(yùn)動(dòng)會(huì)分?jǐn)?shù)統(tǒng)計(jì)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)-運(yùn)動(dòng)會(huì)分?jǐn)?shù)統(tǒng)計(jì)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)-- 運(yùn)動(dòng)會(huì)分?jǐn)?shù)統(tǒng)計(jì)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)---運(yùn)動(dòng)會(huì)分?jǐn)?shù)統(tǒng)計(jì)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)---運(yùn)動(dòng)會(huì)分?jǐn)?shù)統(tǒng)計(jì)
- 數(shù)據(jù)結(jié)構(gòu)運(yùn)動(dòng)會(huì)分?jǐn)?shù)統(tǒng)計(jì)課程設(shè)計(jì)
- 運(yùn)動(dòng)會(huì)分?jǐn)?shù)統(tǒng)計(jì)課程設(shè)計(jì)
- 《數(shù)據(jù)結(jié)構(gòu)》課程設(shè)計(jì)報(bào)告--運(yùn)動(dòng)會(huì)分?jǐn)?shù)統(tǒng)計(jì)
- 運(yùn)動(dòng)會(huì)分?jǐn)?shù)統(tǒng)計(jì)課程設(shè)計(jì)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告---運(yùn)動(dòng)會(huì)分?jǐn)?shù)統(tǒng)計(jì)
- 數(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ì)-運(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ì)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告運(yùn)動(dòng)會(huì)分?jǐn)?shù)統(tǒng)計(jì)
- 課程設(shè)計(jì)---運(yùn)動(dòng)會(huì)分?jǐn)?shù)統(tǒng)計(jì)
評(píng)論
0/150
提交評(píng)論