版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、<p> 課 程 設(shè) 計(jì) 報(bào) 告</p><p> 課程名稱 數(shù)據(jù)結(jié)構(gòu) </p><p> 課題名稱 1.迷宮求解 2.一元多項(xiàng)式計(jì)算 </p><p> 專 業(yè) 計(jì)算機(jī)科學(xué)與技術(shù) </p><p> 班 級 計(jì)算機(jī) 1001
2、 </p><p> 學(xué) 號 20100301012 </p><p> 姓 名 </p><p> 指導(dǎo)教師 </p><p> 2012年 7 月 5 日<
3、;/p><p> 課 程 設(shè) 計(jì) 任 務(wù) 書</p><p> 課程名稱 數(shù)據(jù)結(jié)構(gòu) </p><p> 課 題 1.迷宮求解 2.一元多項(xiàng)式計(jì)算 </p><p> 課 程 設(shè) 計(jì) 任 務(wù) 書</p><p><b> 一.設(shè)計(jì)內(nèi)容</b>
4、</p><p><b> 問題1:拓?fù)渑判?lt;/b></p><p> 大學(xué)期間各專業(yè)都要制訂相應(yīng)的教學(xué)計(jì)劃。每個(gè)專業(yè)開設(shè)的課程預(yù)先已確定。而各門課程間有的是相互獨(dú)立的,而有的則有先修后修的限定。試設(shè)計(jì)相應(yīng)的課程設(shè)置程序,實(shí)現(xiàn)對某專業(yè)各學(xué)期的課程的排布,其中每門課需設(shè)定課時(shí),而各學(xué)期的總課時(shí)不能超過上限。</p><p> 測試數(shù)據(jù):學(xué)期
5、課時(shí)上限數(shù):350 ;各課程所需學(xué)時(shí):48;課程先、后修關(guān)系如圖:</p><p> 問題2:huffman編碼</p><p> 對于確定的字符集的電文字符串編碼,實(shí)現(xiàn)最高的通信效率。編程實(shí)現(xiàn)對于給定的輸入串及各字符的已知頻度,輸出其編碼方式(各字符的二進(jìn)制編碼)及對應(yīng)的輸出流。</p><p><b> 測試數(shù)據(jù): </b></
6、p><p><b> 問題3:成績管理</b></p><p> 編制一應(yīng)用軟件實(shí)現(xiàn)對班級成績管理?;竟δ苡袑W(xué)生信息的增刪(轉(zhuǎn)入或退學(xué))、查找(從當(dāng)前點(diǎn)向前或向后雙向的)、錄入、統(tǒng)計(jì)(如總分,及格率等)。建議用雙鏈表實(shí)現(xiàn)。</p><p><b> 問題4:成績排序</b></p><p>
7、對某次考試成績排序,輸入為多門課程成績,可以任一課程成績?yōu)殛P(guān)鍵字進(jìn)行檢索。建議采用快速排序等算法效率高的算法。</p><p><b> 問題5:迷宮求解</b></p><p> 一個(gè)M*N的長方陣迷宮,0和1分別表示迷宮中的通路和墻壁,對任意設(shè)定的迷宮,東、南、西、北四個(gè)方向是可能的行走方向,求出一條從入口到出口的路徑(或沒有通路)。</p>&
8、lt;p> 迷宮的測試數(shù)據(jù)如下:左上角(1,1)為入口,右下角(8,9)為出口。</p><p> 問題6:一元多項(xiàng)式計(jì)算</p><p> 對于任意輸入的多項(xiàng)式A=anxn+an-1xn-1+…a1x+a0和B=bmxm+bm-1xm-1+…b1x+b0,用鏈表存儲后實(shí)現(xiàn)A+B;A-B。</p><p><b> 測試數(shù)據(jù):</b&g
9、t;</p><p><b> a.;</b></p><p><b> b.;</b></p><p><b> c.;</b></p><p><b> d.;</b></p><p><b> e. ;&l
10、t;/b></p><p> 問題7: 通訊錄管理</p><p> 設(shè)計(jì)一個(gè)通訊錄管理,包括通訊錄鏈表的建立、通訊者的插入、通訊者的刪除、通訊者的查詢以及信息修改等。</p><p> 要求有運(yùn)行界面,從菜單中進(jìn)入選項(xiàng)。</p><p><b> 二.設(shè)計(jì)要求</b></p><p&g
11、t;<b> 1.選題</b></p><p> 每位學(xué)生需完成兩個(gè)課題,其中一個(gè)必選,另一個(gè)自選,必選題次為,學(xué)號/7+1。</p><p> 2.課程設(shè)計(jì)報(bào)告內(nèi)容說明</p><p> 1)需求分析 程序的功能;輸入輸出的要求。</p><p> 2)概要設(shè)計(jì) 程序的模塊構(gòu)成以及模塊之間的層次結(jié)構(gòu)、各模塊的
12、調(diào)用關(guān)系;每個(gè)模塊的功能;課題涉及的數(shù)據(jù)結(jié)構(gòu)和數(shù)據(jù)庫結(jié)構(gòu);即要存儲什么數(shù)據(jù),這些數(shù)據(jù)是什么樣的結(jié)構(gòu),它們之間有什么關(guān)系等。</p><p> 3)詳細(xì)設(shè)計(jì) 采用C語言定義相關(guān)的數(shù)據(jù)類型;寫出各模塊的類C碼算法;畫出各函數(shù)的調(diào)用關(guān)系圖、主要函數(shù)的流程圖。</p><p> 4)調(diào)試分析以及設(shè)計(jì)體會 測試數(shù)據(jù):準(zhǔn)備典型的測試數(shù)據(jù)和測試方案,包括正確的輸入及輸出結(jié)果和含有錯(cuò)誤的輸入及輸出結(jié)果
13、;程序調(diào)試中遇到的問題以及解決問題的方法;課程設(shè)計(jì)過程經(jīng)驗(yàn)教訓(xùn)、心得體會。</p><p> 5)使用說明 用戶使用手冊:說明如何使用你編寫的程序,詳細(xì)列出每一步的操作步驟。</p><p> 6)書寫格式 見附帶說明。</p><p> 7)附錄 參考書目;源程序清單(帶注釋)。</p><p><b> 3.成績評定
14、</b></p><p> 指導(dǎo)老師負(fù)責(zé)驗(yàn)收程序的運(yùn)行結(jié)果,并結(jié)合學(xué)生的工作態(tài)度、實(shí)際動手能力、創(chuàng)新精神和設(shè)計(jì)報(bào)告等進(jìn)行綜合考評,并按優(yōu)秀、良好、中等、及格和不及格五個(gè)等級給出每位同學(xué)的課程設(shè)計(jì)成績。具體考核標(biāo)準(zhǔn)包含以下幾個(gè)部分:① 平時(shí)出勤 (占10%)② 系統(tǒng)需求分析、功能設(shè)計(jì)、數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)及程序總體結(jié)構(gòu)合理與否(占10%)③ 程序能否完整、準(zhǔn)確地運(yùn)行,個(gè)人能否獨(dú)立、熟練地調(diào)試程序(占40%)④
15、 設(shè)計(jì)報(bào)告(占30%)注意:不得抄襲他人的報(bào)告(或給他人抄襲),一旦發(fā)現(xiàn),成績?yōu)榱惴?。?獨(dú)立完成情況(占10%)。</p><p><b> 三.進(jìn)度安排</b></p><p> 第 19 周 星期一 13時(shí):00分——17時(shí):00分</p><p> 星期二 13時(shí):00分——17時(shí):00分</p><p&g
16、t; 星期三 13時(shí):00分——17時(shí):00分</p><p> 星期四 13時(shí):00分——17時(shí):00分</p><p> 第 20 周 星期一 8 時(shí):00分——12時(shí):00分</p><p> 星期二 8 時(shí):00分——12時(shí):00分</p><p><b> 附:</b></p>
17、<p> 課程設(shè)計(jì)報(bào)告裝訂順序:封面、任務(wù)書、目錄、正文、評分、附件(A4大小的圖紙及程序清單)。 </p><p> 正文的格式:一級標(biāo)題用3號黑體,二級標(biāo)題用四號宋體加粗,正文用小四號宋體;行距為22。</p><p> 正文的內(nèi)容:一、課題的主要功能;二、課題的功能模塊的劃分(要求畫出模塊圖);三、主要功能的實(shí)現(xiàn)(至少要有一個(gè)主要模塊的流程圖);四、程序調(diào)試;五、總
18、結(jié);六、附件(所有程序的原代碼,要求對程序?qū)懗霰匾淖⑨專?lt;/p><p> 正文總字?jǐn)?shù)要求在5000字以上(不含程序原代碼)。</p><p><b> 目 錄</b></p><p> 一、迷宮求解系統(tǒng) ................................................................
19、.........................................................................1</p><p> 1. 系統(tǒng)需求分析1</p><p> 1. 1系統(tǒng)設(shè)計(jì)的意義與目的...........................................................................
20、.....................................1</p><p> 1. 2系統(tǒng)功能需求................................................................................................................................1</p><p>
21、;<b> 2. 總體設(shè)計(jì)2</b></p><p> 2. 1系統(tǒng)功能分析................................................................................................................................2</p><p> 2. 2
22、系統(tǒng)功能模塊劃分與設(shè)計(jì)............................................................................................................2</p><p> 2. 3系統(tǒng)功能模塊圖..................................................................
23、..........................................................2</p><p><b> 3. 詳細(xì)設(shè)計(jì)3</b></p><p> 3. 1定義棧的結(jié)構(gòu)體............................................................................
24、...............................................3</p><p> 3. 2棧構(gòu)造函數(shù)算法...........................................................................................................................3</p>&l
25、t;p> 3. 3入棧函數(shù)算法...............................................................................................................................3</p><p> 3. 4取棧頂元素函數(shù)算法.....................................
26、..............................................................................4</p><p> 3. 5出棧函數(shù)算法............................................................................................................
27、...................4</p><p> 3. 6輸入迷宮矩陣函數(shù)算法...............................................................................................................4</p><p> 3. 7迷宮矩陣求解函數(shù)算法..............
28、.................................................................................................5</p><p><b> 4. 系統(tǒng)調(diào)試7</b></p><p> 4. 1調(diào)試過程中的錯(cuò)誤....................................
29、..................................................................................7</p><p> 4. 2具體調(diào)試過程........................................................................................................
30、......................7</p><p><b> 5. 結(jié)果分析9</b></p><p><b> 6. 總結(jié)10</b></p><p> 二、一元多項(xiàng)式計(jì).................................................................
31、.........................................................................11</p><p> 1. 系統(tǒng)需求分析11</p><p> 1. 1系統(tǒng)設(shè)計(jì)的意義與目的.........................................................................
32、.....................................11</p><p> 1. 2系統(tǒng)功能需求..............................................................................................................................11</p><p>
33、; 2. 總體設(shè)計(jì)12</p><p> 2. 1系統(tǒng)功能分析..............................................................................................................................12</p><p> 2. 2系統(tǒng)功能模塊劃分與設(shè)計(jì)........
34、..................................................................................................12</p><p> 2. 3系統(tǒng)功能模塊圖......................................................................................
35、....................................12</p><p> 3. 詳細(xì)設(shè)計(jì)13</p><p> 3. 1定義鏈表結(jié)點(diǎn)結(jié)構(gòu)體.................................................................................................................
36、13</p><p> 3. 2多項(xiàng)式計(jì)算結(jié)果輸出函數(shù)算法.................................................................................................13</p><p> 3. 3需要處理的多項(xiàng)式輸出函數(shù)算法......................................
37、.......................................................13</p><p> 3. 4插入結(jié)點(diǎn)函數(shù)算法.....................................................................................................................14</p>
38、;<p> 3. 5多項(xiàng)式系數(shù)和指數(shù)輸入函數(shù)算法.............................................................................................14</p><p> 3. 6結(jié)點(diǎn)刪除函數(shù)算法..........................................................
39、...........................................................15</p><p> 3. 7多項(xiàng)式相加函數(shù)算法.................................................................................................................15</p&g
40、t;<p> 3. 8多項(xiàng)式相減函數(shù)算法.................................................................................................................16</p><p> 4. 系統(tǒng)調(diào)試18</p><p> 4. 1調(diào)試過程中的錯(cuò)誤.........
41、...........................................................................................................18</p><p> 4. 2具體調(diào)試過程..............................................................................
42、..............................................18</p><p> 5. 結(jié)果分析20</p><p><b> 6. 總結(jié)21</b></p><p><b> 三、附件22</b></p><p> 1. 迷宮求解系統(tǒng)源程序代碼22
43、</p><p> 2. 一元多項(xiàng)式運(yùn)算系統(tǒng)源程序代碼30</p><p> 3. 參考文獻(xiàn)40</p><p><b> 一、迷宮求解系統(tǒng) </b></p><p><b> 系統(tǒng)需求分析</b></p><p> 1.1 系統(tǒng)設(shè)計(jì)的目的與意義</p&g
44、t;<p> 在對迷宮矩陣進(jìn)行求解時(shí),當(dāng)矩陣規(guī)模比較龐大的時(shí)候,進(jìn)行人工求解比較麻煩同時(shí)也容易出錯(cuò),因此需要一個(gè)迷宮求解系統(tǒng)來對迷宮矩陣進(jìn)行求解。</p><p> 1.2 系統(tǒng)功能需求</p><p> 本系統(tǒng)定義了棧的結(jié)構(gòu)體,棧的構(gòu)造函數(shù),入棧函數(shù),出棧函數(shù),取棧頂元素函數(shù),迷宮矩陣的輸入函數(shù),迷宮矩陣求解函數(shù)以及一個(gè)主函數(shù),通過主函數(shù)調(diào)用其他幾個(gè)函數(shù)最終實(shí)現(xiàn)求得迷
45、宮矩陣的通路徑。</p><p><b> 總體設(shè)計(jì)</b></p><p> 2.1 系統(tǒng)功能分析</p><p> 系統(tǒng)通過調(diào)用函數(shù)來實(shí)現(xiàn)棧的構(gòu)造,數(shù)據(jù)入棧,數(shù)據(jù)出棧,取得棧頂元素,輸入迷宮矩陣,求解迷宮矩陣等功能。InitStack( )函數(shù)用來構(gòu)造棧;Push( )函數(shù)用來將數(shù)據(jù)入棧;Gettop( )函數(shù)用來取棧頂元素; Pop
46、( )用來將棧頂元素出棧;Inpute( )用來輸入迷宮矩陣;MazePath( )用來對迷宮矩陣進(jìn)行求解;主函數(shù)main()用于調(diào)用這些函數(shù)。 </p><p> 2.2 系統(tǒng)功能模塊劃分與設(shè)計(jì)</p><p> 本系統(tǒng)定義了一個(gè)棧的結(jié)構(gòu)體,定義了InitStack( )、Push( )、Gettop( )、Pop( )、Inpute( )、MazePath( )等函數(shù)來實(shí)現(xiàn)系統(tǒng)所需
47、功能。</p><p> 2.3 系統(tǒng)功能模塊圖</p><p> 圖2.1系統(tǒng)功能模塊</p><p><b> 詳細(xì)設(shè)計(jì)</b></p><p> 3.1 定義棧的結(jié)構(gòu)體</p><p> 該結(jié)構(gòu)體定義了一個(gè)整型變量用來存放當(dāng)前已分配的存儲空間,數(shù)并定義了一個(gè)棧頂指針和一個(gè)棧低指針。
48、 </p><p> typedef struct{ //定義棧的結(jié)構(gòu)體</p><p> int *base;</p><p><b> int *top;</b></p><p> int stacksize;</p><p><b> }SqSta
49、ck;</b></p><p> 3.2 棧構(gòu)造函數(shù)算法</p><p> Status InitStack(SqStack &s){ </p><p><b> //構(gòu)造一個(gè)空棧s</b></p><p> s.base=(int *)malloc(STACK_INIT_SIZE*sizeo
50、f(int));</p><p> if(!s.base) exit(OVERFLOW); //存儲空間分配失敗</p><p> s.top=s.base;</p><p> s.stacksize=STACK_INIT_SIZE;</p><p> return OK;</p><p> }//Ini
51、tStack</p><p> 3.3 入棧函數(shù)算法</p><p> Status Push(SqStack &s,int e){ </p><p> //插入元素e為新的棧頂元素</p><p> if(s.top-s.base>=s.stacksize){//棧滿,追加存儲空間</p><p&
52、gt; s.base=(int*)realloc(s.base,(s.stacksize+STACKINCREMENT)*</p><p> sizeof(int));</p><p> if(!s.base) exit(OVERFLOW); //存儲空間分配失敗</p><p> s.top=s.base+s.stacksize;</p>
53、<p> s.stacksize+=STACKINCREMENT;</p><p><b> }</b></p><p> *s.top++=e;</p><p> return OK;</p><p><b> }//Push</b></p><p>
54、; 3.4 取棧頂元素函數(shù)算法</p><p> Status Gettop(SqStack s,int &e){ </p><p> //若棧不空,則用e返回棧頂元素,并返回OK;否則返回ERRORif(s.top= =s.base) return ERROR;</p><p> e=*(s.top-1);</p>&l
55、t;p> return OK;</p><p><b> }//Gettop</b></p><p> 3.5 出棧函數(shù)算法</p><p> Status Pop(SqStack &s,ElamType e){ </p><p> //若棧不空,則刪除s的棧頂元素,并返回OK;否則返回ERR
56、OR</p><p> if(s.top= =s.base)return ERROR;</p><p> e=*--s.top;</p><p> return OK;</p><p><b> }// Pop</b></p><p> 3.6 輸入迷宮矩陣函數(shù)算法</p&g
57、t;<p> Status **Inpute(ElamType n,ElamType m){ </p><p> //輸入迷宮矩陣函數(shù)</p><p> Status **p=(Status**)malloc(n*sizeof(int));//為矩陣分配存儲空間</p><p> for(i=0;i<n;i++)</p>
58、<p> *(p+i)=(Status *)malloc(m*sizeof(int));</p><p> for(i=0;i<n;i++)</p><p> for(j=0;j<m;j++)</p><p> scanf("%d",&p[i][j]);//按行輸入迷宮矩陣的每個(gè)元素</p>
59、<p><b> return p;</b></p><p><b> }//Inpute</b></p><p> 3.7 迷宮矩陣求解函數(shù)算法</p><p> Status MazePath(Status **p,ElamType n,ElamType m){ </p><p
60、> //迷宮矩陣求解函數(shù)</p><p> SqStack s1,s2;</p><p> InitStack(s1); InitStack(s2);</p><p> Push(s1,i); Push(s2,j);</p><p> do{i=i+1; //判斷當(dāng)前元素下方的元素位置是否可通,可通則將該位置入棧</p
61、><p> if(0<=i&&i<n&&0<=j&&j<m&&!p[i][j]){</p><p> if(i==n-1&&j==m-1){//判斷當(dāng)前元素是否為迷宮出口位置元素</p><p> Push(s1,i); Push(s2,j); break;&l
62、t;/p><p><b> }</b></p><p> Push(s1,i);Push(s2,j);p[i][j]=2;</p><p><b> }</b></p><p> else{i=i-1;j=j+1;</p><p> //判斷當(dāng)前元素右方的元素位置是否可
63、通,可通則將該位置入棧</p><p> if(0<=i&&i<n&&0<=j&&j<m&&!p[i][j]){</p><p> if(i==n-1&&j==m-1){</p><p> Push(s1,i);Push(s2,j);break;</p
64、><p><b> }</b></p><p> Push(s1,i);Push(s2,j);p[i][j]=2;</p><p><b> }</b></p><p><b> else{</b></p><p><b> j=j-2;
65、</b></p><p> //判斷當(dāng)前元素左方的元素位置是否可通,可通則將該位置入棧</p><p> if(0<=i&&i<n&&0<=j&&j<m&&!p[i][j]){</p><p> if(i==n-1&&j==m-1){</p
66、><p> Push(s1,i);Push(s2,j);break;</p><p><b> }</b></p><p> Push(s1,i);Push(s2,j);p[i][j]=2;</p><p><b> }</b></p><p> else{i=i-1;
67、 j=j+1;</p><p> //判斷當(dāng)前元素上方的元素位置是否可通,可通則將該位置入棧</p><p> if(0<=i&&i<n&&0<=j&&j<m&&!p[i][j]){</p><p> if(i==n-1&&j==m-1){</p&g
68、t;<p> Push(s1,i);Push(s2,j);break;</p><p><b> }</b></p><p> Push(s1,i);Push(s2,j);p[i][j]=2;</p><p><b> }</b></p><p> else{//如果該元素的
69、以上四個(gè)相鄰元素位置都不通,則出棧</p><p> Gettop(s1,i); Gettop(s2,j);</p><p> p[i][j]=1;Pop(s1); Pop(s2);</p><p> Gettop(s1,i); Gettop(s2,j);</p><p><b> }</b></p&
70、gt;<p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p> if(i==0&&j==0){</p><p> printf("該迷宮矩陣無可通路徑!\n&qu
71、ot;);</p><p><b> c=1;</b></p><p><b> break;</b></p><p><b> }</b></p><p> }while(1);</p><p> if(i!=0&&j!=0)
72、</p><p><b> 輸出該通路徑</b></p><p> return 0K;</p><p><b> }</b></p><p><b> 系統(tǒng)調(diào)試</b></p><p> 4.1 調(diào)試過程中的錯(cuò)誤</p><
73、;p> ?、?、輸入數(shù)據(jù)時(shí),輸錯(cuò)了數(shù)據(jù)的類型會造成死循環(huán),因此輸入時(shí)需要注意。</p><p> ②、如下圖所示,一開始主界面輸入非正確字母時(shí),沒有提示錯(cuò)誤。容易造成用戶誤解,在主函數(shù)的switch語句結(jié)束處加上default:cout<<"選擇錯(cuò)誤,請從新選擇!";就可以了。</p><p> 圖4.1 輸入錯(cuò)誤無提示</p><
74、;p> 4.2 具體調(diào)試過程</p><p><b> 主界面</b></p><p> 圖4.2 系統(tǒng)主界面</p><p><b> 迷宮矩陣輸入過程</b></p><p> 圖4.3 輸入矩陣</p><p><b> 系統(tǒng)求解過程&l
75、t;/b></p><p> 圖4.4 求解路徑并輸出</p><p><b> 結(jié)果分析 </b></p><p> 程序設(shè)計(jì)了一個(gè)棧的結(jié)構(gòu)體,在設(shè)計(jì)的過程中,建立了較為清晰的層次,利用了C語言編程思想來完成系統(tǒng)的設(shè)計(jì),做到了用戶根據(jù)具體情況來輸入迷宮矩陣并經(jīng)行求解。而且界面簡潔,容易操作。不足的地方就是程序稍微長了些,不夠簡練
76、,導(dǎo)致出現(xiàn)錯(cuò)誤很難發(fā)現(xiàn)和修改;另外就是在輸入矩陣的時(shí)候,如果所求解的矩陣非常大的話,也容易導(dǎo)致用戶在輸入過程中出錯(cuò)。</p><p><b> 總結(jié)</b></p><p> 首先,接到設(shè)計(jì)題目之后,在對本題目進(jìn)行分析的時(shí)候,我懂得了一個(gè)很重要的道理,那就是說一個(gè)程序的產(chǎn)生需要一個(gè)對題目要求有一個(gè)正確全面的分析。其次,就該考慮程序算法的問題了,一個(gè)好的算法是一個(gè)好
77、程序的靈魂,也決定了一個(gè)程序的質(zhì)量。</p><p> 兩個(gè)星期的課設(shè)雖然有些疲勞和困倦,但帶給我很多的收獲。數(shù)據(jù)結(jié)構(gòu)已經(jīng)學(xué)了一個(gè)學(xué)期了,有許多知識都存在似懂非懂的現(xiàn)象,這種現(xiàn)象通過實(shí)際的上機(jī)操作,已經(jīng)減少了許多。對這些知識也有了更深的理解和很好的掌握。也有很多理論上說得過去的代碼,但到了實(shí)際操作,卻是行不通的。這種困惑,有許多已經(jīng)通過實(shí)際操作解決了,并能夠深刻認(rèn)識,但也有很多沒有明白。只能避過這些方法,換方法
78、實(shí)現(xiàn)。在課程設(shè)計(jì)之前,因?yàn)橛辛司C合實(shí)驗(yàn)的經(jīng)驗(yàn)與教訓(xùn),明白了寫代碼這一步是非常重要的,因?yàn)楫?dāng)你把代碼輸入電腦,并用編譯器將其運(yùn)行,發(fā)現(xiàn)通過不了,再來檢查找出問題,這是一件非常辛苦的事情,也很浪費(fèi)時(shí)間。于是在課程設(shè)計(jì)的時(shí)候,我花了四天的時(shí)間來規(guī)劃與寫代碼,將要實(shí)現(xiàn)的內(nèi)容分析清楚,才把代碼輸入電腦。我覺得寫程序,應(yīng)該先找到該程序中的核心地方,用多種方法來實(shí)現(xiàn)該核心,這才可能避免等到發(fā)現(xiàn)邏輯上或者編譯器不支持上的錯(cuò)誤,才來想補(bǔ)救的措施,這樣花費(fèi)
79、時(shí)間在想補(bǔ)救措施是很不值得的。</p><p> 這次的課程設(shè)計(jì),真是讓我充分的感覺到了要自己設(shè)計(jì)一個(gè)程序是多么的難,以及學(xué)習(xí)好數(shù)據(jù)結(jié)構(gòu)是多么的重要。在這個(gè)程序的設(shè)計(jì)過程中,我清楚的意識到自己的水平有多么的薄弱,課程的知識學(xué)得有多么的不扎實(shí)。</p><p> 以后還會有很多的課程設(shè)計(jì),一定要吸取這次的教訓(xùn),把知識學(xué)懂學(xué)透學(xué)精,真正的為我所用,這樣走上社會我才能真正的發(fā)揮所長。<
80、/p><p><b> 二、一元多項(xiàng)式計(jì)算</b></p><p><b> 系統(tǒng)需求分析</b></p><p> 1.1 系統(tǒng)設(shè)計(jì)的目的與意義</p><p> 在對一元多項(xiàng)式進(jìn)行計(jì)算時(shí),當(dāng)未知數(shù)的系數(shù)較大或指數(shù)較大的時(shí)候,進(jìn)行人工求解比較麻煩同時(shí)也容易出錯(cuò),因此需要一個(gè)一元多項(xiàng)式計(jì)算系統(tǒng)來
81、對迷宮矩陣進(jìn)行求解。</p><p> 1.2 系統(tǒng)功能需求</p><p> 本系統(tǒng)定義了鏈表結(jié)點(diǎn)結(jié)構(gòu)體類型,多項(xiàng)式計(jì)算結(jié)果輸出函數(shù),需要處理的多項(xiàng)式輸出函數(shù),結(jié)點(diǎn)插入函數(shù),多項(xiàng)式輸入函數(shù),結(jié)點(diǎn)刪除函數(shù),多項(xiàng)式相加函數(shù),多項(xiàng)式相減函數(shù)以及一個(gè)主函數(shù),通過主函數(shù)調(diào)用其他幾個(gè)函數(shù)最終實(shí)現(xiàn)多項(xiàng)式的加減計(jì)算。</p><p><b> 總體設(shè)計(jì)</b
82、></p><p> 2.1 系統(tǒng)功能分析</p><p> 系統(tǒng)通過調(diào)用函數(shù)來建立單鏈表、結(jié)點(diǎn)的插入和刪除,輸入多項(xiàng)式系數(shù)和指數(shù),對輸入的多項(xiàng)式進(jìn)行加減運(yùn)算,輸出運(yùn)算結(jié)果等功能。 Print2()函數(shù)用來輸出計(jì)算結(jié)果;Print1()函數(shù)用來輸出用戶所輸入的多項(xiàng)式以檢查輸入是否正確;Insert()函數(shù)用來插入結(jié)點(diǎn); Input()用來輸入多項(xiàng)式的系數(shù)和指數(shù);Delete()函
83、數(shù)用來刪除結(jié)點(diǎn);AddPolyn()函數(shù)用來進(jìn)行多項(xiàng)式相加;ReducPolyn()函數(shù)用來進(jìn)行多項(xiàng)式相,主函數(shù)main()用于調(diào)用這些函數(shù)。 </p><p> 2.2 系統(tǒng)功能模塊劃分與設(shè)計(jì)</p><p> 本系統(tǒng)定義了鏈表結(jié)點(diǎn)結(jié)構(gòu)體類型,定義了Print2()、Print1()、Insert()、Input()、Delete()、AddPolyn()、ReducPolyn()等
84、函數(shù)來實(shí)現(xiàn)系統(tǒng)所需功能。</p><p> 2.3 系統(tǒng)功能模塊圖</p><p> 圖2.1系統(tǒng)功能模塊</p><p><b> 詳細(xì)設(shè)計(jì)</b></p><p> 3.1 定義鏈表結(jié)點(diǎn)結(jié)構(gòu)體</p><p> 該結(jié)構(gòu)體定義了兩個(gè)整型變量分別用來存放系數(shù)和指數(shù),并定義了一個(gè)指針用來存
85、放下一個(gè)結(jié)點(diǎn)的位置。</p><p> typedef struct term{ //定義鏈表結(jié)點(diǎn)結(jié)構(gòu)體類型</p><p> int coef; //系數(shù)</p><p> int expn; //指數(shù)</p><p> struct term *next;</p><p
86、> }term,*polynomial; </p><p> 3.2 多項(xiàng)式計(jì)算結(jié)果輸出函數(shù)算法</p><p> Status Print2(polynomial z){ </p><p> //對多項(xiàng)式計(jì)算結(jié)果進(jìn)行輸出</p><p><b> while(z){</b></p>
87、<p> if(z->coef!=0){</p><p> 輸出多項(xiàng)式的系數(shù)和指數(shù);}</p><p> else printf("0");</p><p> if(z->next) printf("+");</p><p> z=z->next;&l
88、t;/p><p><b> }//Print2</b></p><p> 3.3 需要處理的多項(xiàng)式輸出函數(shù)算法</p><p> Status Print1(polynomial z){ </p><p> //對需要處理的多項(xiàng)式進(jìn)行輸出</p><p><b> while
89、(z){</b></p><p> 分別輸出需要處理的多項(xiàng)式每一項(xiàng)的系數(shù)和指數(shù);</p><p> z=z->next;</p><p><b> }</b></p><p> } //Print1 </p><p> 3.4 插入結(jié)點(diǎn)函數(shù)算法&l
90、t;/p><p> Status Insert(polynomial L,int i){ </p><p> //在帶頭結(jié)點(diǎn)的單鏈表L中第i個(gè)位置前插入一個(gè)結(jié)點(diǎn)</p><p> j=0;k=0;p=L;</p><p> while(p&&j<i-1){ p=p->next; ++j; k++
91、; }//尋找第i-1個(gè)結(jié)點(diǎn)</p><p> if(!p||j>i-1) return ERROR;//i小于1或大于表長+1</p><p> s=(polynomial)malloc(sizeof(term));//生成新結(jié)點(diǎn)</p><p> scanf("%d",&s->coef); //輸入第k+1項(xiàng)的
92、系數(shù)</p><p> scanf("%d",&s->expn); //輸入第k+1項(xiàng)的指數(shù)</p><p> s->next=p->next;</p><p> p->next=s;</p><p> return OK;</p><p><b>
93、; }//Insert</b></p><p> 3.5 多項(xiàng)式系數(shù)和指數(shù)輸入函數(shù)算法</p><p> Status Input(polynomial A,polynomial B,polynomial y){ </p><p> //對多項(xiàng)式系數(shù)和指數(shù)進(jìn)行輸入</p><p><b> i=0;<
94、;/b></p><p> scanf("%d",&a);//輸入多項(xiàng)式A共有多少項(xiàng)</p><p> for(i=0;i<a;i++){</p><p> Insert(A,i+1);//將多項(xiàng)式A第i+1項(xiàng)的系數(shù)和指數(shù)存到鏈表結(jié)點(diǎn)中 }</p><p> y=A->next;</
95、p><p> Print1(y);//輸出剛所輸入的多項(xiàng)式A</p><p> scanf("%d",&b);//輸入多項(xiàng)式B共有多少項(xiàng)</p><p> for(i=0;i<b;i++){</p><p> Insert(B,i+1);//將多項(xiàng)式B第i+1項(xiàng)的系數(shù)和指數(shù)存到鏈表結(jié)點(diǎn)中}</p&g
96、t;<p> y=B->next;</p><p> Print1(y);//輸出剛所輸入的多項(xiàng)式B</p><p><b> }//Input</b></p><p> 3.6 結(jié)點(diǎn)刪除函數(shù)算法</p><p> Status Delete(polynomial &L,int i)
97、{ </p><p> //在帶頭結(jié)點(diǎn)的單鏈表L中刪除第i個(gè)結(jié)點(diǎn)</p><p> j=0; p=L;</p><p> while(p->next&&j<i-1){ //尋找第i-1個(gè)結(jié)點(diǎn),并令p指向其直接前趨</p><p> p=p->next;j++;</p><
98、p><b> }</b></p><p> if(!(p->next)||j>i-1)return ERROR;</p><p> q=p->next;p->next=q->next;</p><p><b> free(q);</b></p><p>
99、; return OK;</p><p><b> }//Delete</b></p><p> 3.7 多項(xiàng)式相加函數(shù)算法</p><p> Status AddPolyn(polynomial &pa,polynomial &pb){</p><p> //對輸入的多項(xiàng)式進(jìn)行相加運(yùn)算<
100、;/p><p> pc=(polynomial)malloc(sizeof(term));//生成新頭結(jié)點(diǎn)</p><p> pc->next=NULL;m=pc;</p><p> p=pa->next;q=pb->next;</p><p><b> do{</b></p>&
101、lt;p><b> i=1; j=1;</b></p><p><b> if(p){</b></p><p> while(q&&p->expn!=q->expn){q=q->next; j++;</p><p> }//判斷兩個(gè)多項(xiàng)式的其中一項(xiàng)指數(shù)是否相等</p&
102、gt;<p> if(q&&p->expn==q->expn){ </p><p> //如果指數(shù)相等,則系數(shù)相加,并存入新鏈表的結(jié)點(diǎn)中</p><p> s=(polynomial)malloc(sizeof(term));//生成新結(jié)點(diǎn)</p><p> s->coef=p->coef+q->
103、coef;</p><p> s->expn=p->expn; s->next=NULL;</p><p> m->next=s; m=m->next;</p><p> Delete(pb,j); Delete(pa,i);//刪除使用過的結(jié)點(diǎn)</p><p><b> j=1;<
104、/b></p><p><b> }</b></p><p><b> else{</b></p><p> //指數(shù)不相等,直接將a鏈表的第一個(gè)結(jié)點(diǎn)插入新鏈表中</p><p> s=(polynomial)malloc(sizeof(term));</p><p
105、> s->coef=p->coef; s->expn=p->expn;</p><p> s->next=NULL; m->next=s;</p><p> m=m->next;</p><p> Delete(pa,i);//在a中刪除使用過的結(jié)點(diǎn)</p><p><b>
106、; }</b></p><p><b> }</b></p><p><b> else{</b></p><p> //若鏈表a已經(jīng)為空,鏈表b不為空,則將b鏈表插入新鏈表中</p><p> m->next=pb->next;</p><p&
107、gt;<b> break;</b></p><p><b> }</b></p><p> p=pa->next; q=pb->next;</p><p> }while(p||q);</p><p> return pc;</p><p> }/
108、/AddPolyn</p><p> 3.8 多項(xiàng)式相減函數(shù)算法</p><p> Status ReducPolyn(polynomial &pa,polynomial &pb) {</p><p> //對輸入的多項(xiàng)式進(jìn)行相減運(yùn)算</p><p> pc=(polynomial)malloc(sizeof(term
109、));/生成新頭結(jié)點(diǎn)</p><p> pc->next=NULL;m=pc;</p><p> p=pa->next;q=pb->next;</p><p><b> do{</b></p><p> i=1; j=1;</p><p><b> if
110、(p){</b></p><p> while(q&&p->expn!=q->expn){</p><p> q=q->next;j++;</p><p> }//判斷兩個(gè)多項(xiàng)式的其中某一項(xiàng)指數(shù)是否相等</p><p> if(q&&p->expn==q->
111、expn){</p><p> //如果指數(shù)相等,則系數(shù)相減,并存入新鏈表的結(jié)點(diǎn)中</p><p> s=(polynomial)malloc(sizeof(term));//生成新結(jié)點(diǎn)</p><p> s->coef=p->coef-q->coef;</p><p> s->expn=p->expn;
112、s->next=NULL;m->next=s;</p><p> m=m->next;</p><p> Delete(pb,j);Delete(pa,i);//刪除使用過的結(jié)點(diǎn)</p><p><b> j=1;</b></p><p><b> }</b>&l
113、t;/p><p> else{ //指數(shù)不相等,直接將a鏈表的第一個(gè)結(jié)點(diǎn)插入新鏈表中</p><p> s=(polynomial)malloc(sizeof(term));</p><p> s->coef=p->coef;s->expn=p->expn;</p><p> s->next=NULL;
114、m->next=s;</p><p> m=m->next;Delete(pa,i); //在a中刪除使用過的結(jié)點(diǎn)</p><p><b> }</b></p><p><b> }</b></p><p><b> else{</b></p>
115、;<p> //若鏈表a已經(jīng)為空,鏈表b不為空,則將b鏈表結(jié)點(diǎn)中所存的系數(shù)符號取反,并同指數(shù)一起存入結(jié)點(diǎn),插入新鏈表中</p><p> s=(polynomial)malloc(sizeof(term));//生成新結(jié)點(diǎn)</p><p> s->coef=-q->coef;s->expn=q->expn;</p>&l
116、t;p> s->next=NULL;m->next=s;</p><p> m=m->next;Delete(pb,i);//在b中刪除使用過的結(jié)點(diǎn)</p><p><b> }</b></p><p> p=pa->next;q=pb->next;</p><p>
117、}while(p||q);</p><p> return pc;</p><p> }//ReducPolyn</p><p><b> 系統(tǒng)調(diào)試</b></p><p> 4.1 調(diào)試過程中的錯(cuò)誤</p><p> .①、剛開始些程序時(shí),是寫主函數(shù),然后在寫調(diào)用函數(shù)。這時(shí)就會出現(xiàn)下面
118、這種情況;所以必須在主函數(shù)前面先定義各調(diào)用函數(shù)。</p><p><b> 圖4.1錯(cuò)誤提示</b></p><p> ②、在構(gòu)建鏈表時(shí),使用尾插法進(jìn)行存入數(shù)據(jù)的,所以最后面返回的應(yīng)是頭結(jié)點(diǎn)head而不是最后一個(gè)結(jié)點(diǎn)q;否則當(dāng)調(diào)用該鏈表時(shí),第一個(gè)結(jié)點(diǎn)變成原來的最后一個(gè)結(jié)點(diǎn),會導(dǎo)致結(jié)果的錯(cuò)誤。</p><p> 4.2 具體調(diào)試過程<
119、/p><p><b> 主界面</b></p><p> 圖4.2 系統(tǒng)主界面</p><p><b> 輸入多項(xiàng)式</b></p><p> 圖4.3 輸入多項(xiàng)式</p><p><b> 多項(xiàng)式相加</b></p><p&g
120、t; 圖4.4 多項(xiàng)式相加運(yùn)算</p><p><b> 多項(xiàng)式相減</b></p><p> 圖4.5 多項(xiàng)式相減運(yùn)算</p><p><b> 退出系統(tǒng)</b></p><p><b> 圖4.6 退出系統(tǒng)</b></p><p><
121、b> 結(jié)果分析 </b></p><p> 這個(gè)程序界面比較簡潔,操作簡單。程序做到了根據(jù)用戶的需求,自行輸入多項(xiàng)式,并對輸入的多項(xiàng)式進(jìn)行加減運(yùn)算。在設(shè)計(jì)的過程中,程序中設(shè)計(jì)了一個(gè)鏈表結(jié)點(diǎn)的結(jié)構(gòu)體,利用了面向過程的C語言編程思想來完成系統(tǒng)的設(shè)計(jì)。但是程序還是有寫不足的地方,一個(gè)就是程序代碼長不簡練,導(dǎo)致出現(xiàn)錯(cuò)誤很難發(fā)現(xiàn)和修改;另外一個(gè)就是在輸入多項(xiàng)式系數(shù)和指數(shù)的時(shí)候,如果要進(jìn)行處理的多項(xiàng)式項(xiàng)
122、數(shù)比較大的話,容易使用戶在輸入過程中感到無聊從而導(dǎo)致出錯(cuò)。</p><p><b> 總結(jié)</b></p><p> 從開始做數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì),到現(xiàn)在已經(jīng)過去一周多了。我學(xué)到了很多知識,這些都是在課堂上很難單學(xué)習(xí)理論只是就能理解的。所以我對該課程設(shè)計(jì)很感興趣,也很認(rèn)真的做實(shí)驗(yàn)。我也很高興能夠和同學(xué)們一起做課設(shè),一起探討,不會的話還可以求救于老師,趙老師也很樂意想我
123、們解釋難懂的地方,所以我感到很榮幸。做課設(shè)表面上看起來好像很簡單似的,其實(shí)從中我們可以學(xué)到很多東西,因?yàn)槲覀兇蠹叶贾罃?shù)據(jù)結(jié)構(gòu)是很重要的一門學(xué)科,也是一門很深奧的學(xué)科,里面有很多東西值得我們?nèi)ド罹俊?lt;/p><p> 數(shù)據(jù)結(jié)構(gòu)是計(jì)算機(jī)存儲、組織數(shù)據(jù)的方式。數(shù)據(jù)結(jié)構(gòu)是指相互之間存在一種或多種特定關(guān)系的數(shù)據(jù)元素的集合。通常情況下,精心選擇的數(shù)據(jù)結(jié)構(gòu)可以帶來更高的運(yùn)行或者存儲效率。數(shù)據(jù)結(jié)構(gòu)往往同高效的檢索算法和索引技
124、術(shù)有關(guān)。</p><p> 一般認(rèn)為,一個(gè)數(shù)據(jù)結(jié)構(gòu)是由數(shù)據(jù)元素依據(jù)某種邏輯聯(lián)系組織起來的。對數(shù)據(jù)元素間邏輯關(guān)系的描述稱為數(shù)據(jù)的邏輯結(jié)構(gòu);數(shù)據(jù)必須在計(jì)算機(jī)內(nèi)存儲,數(shù)據(jù)的存儲結(jié)構(gòu)是數(shù)據(jù)結(jié)構(gòu)的實(shí)現(xiàn)形式,是其在計(jì)算機(jī)內(nèi)的表示;此外討論一個(gè)數(shù)據(jù)結(jié)構(gòu)必須同時(shí)討論在該類數(shù)據(jù)上執(zhí)行的運(yùn)算才有意義。在許多類型的程序的設(shè)計(jì)中,數(shù)據(jù)結(jié)構(gòu)的選擇是一個(gè)基本的設(shè)計(jì)考慮因素。許多大型系統(tǒng)的構(gòu)造經(jīng)驗(yàn)表明,系統(tǒng)實(shí)現(xiàn)的困難程度和系統(tǒng)構(gòu)造的質(zhì)量都嚴(yán)
125、重的依賴于是否選擇了最優(yōu)的數(shù)據(jù)結(jié)構(gòu)。許多時(shí)候,確定了數(shù)據(jù)結(jié)構(gòu)后,算法就容易得到了。有些時(shí)候事情也會反過來,我們根據(jù)特定算法來選擇數(shù)據(jù)結(jié)構(gòu)與之適應(yīng)。不論哪種情況,選擇合適的數(shù)據(jù)結(jié)構(gòu)都是非常重要的。選擇了數(shù)據(jù)結(jié)構(gòu),算法也隨之確定,是數(shù)據(jù)而不是算法是系統(tǒng)構(gòu)造的關(guān)鍵因素。這種洞見導(dǎo)致了許多種軟件設(shè)計(jì)方法和程序設(shè)計(jì)語言的出現(xiàn),面向?qū)ο蟮某绦蛟O(shè)計(jì)語言就是其中之一。</p><p> 通過本次數(shù)據(jù)結(jié)構(gòu)的課程設(shè)計(jì),我初步學(xué)會了
126、設(shè)計(jì)報(bào)告的基本方法,學(xué)會了怎樣去借鑒別人的方法和經(jīng)驗(yàn),知道了如何整合資料和處理這些資料的能力,這位以后做畢設(shè)的論文打下了基礎(chǔ),使我感覺比較好的是有一種成功的喜悅,雖然在編譯的時(shí)候會經(jīng)常因?yàn)橐恍┬〉腻e(cuò)誤而心煩意亂,但是也不失為一件好事,失敗的越多積累的經(jīng)驗(yàn)越豐富,對人的考驗(yàn)也比較多,那么在最后編譯成功時(shí)的喜悅就越濃烈,也是自己的能力有了進(jìn)一步的提高。由于知識和經(jīng)驗(yàn)的不足,所以在以后還是需要較多的努力的,還是會在以后的學(xué)習(xí)過程中不斷地提高和
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告
- 《數(shù)據(jù)結(jié)構(gòu)》課程設(shè)計(jì)報(bào)告
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)--數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)----huffman編碼
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)——課程設(shè)計(jì)報(bào)告模板
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告 (2)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告 (4)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)實(shí)習(xí)報(bào)告
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告.doc
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告 (3)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告 (2)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告 (2)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告--鏈表
評論
0/150
提交評論