版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、<p><b> 《數(shù)據(jù)結(jié)構(gòu)》</b></p><p><b> ---課程設(shè)計(jì)報(bào)告</b></p><p> 題目: 多項(xiàng)式計(jì)算器</p><p> 班級: </p><p> 學(xué)號: </p><p>
2、; 姓名: </p><p> 指導(dǎo)教師: </p><p><b> 目錄</b></p><p> 課程設(shè)計(jì)目的………………………………………….3</p><p> 設(shè)計(jì)內(nèi)容……………………………………………….3</p><p> 總體設(shè)計(jì)…
3、…………………………………………….4</p><p> 詳細(xì)設(shè)計(jì)……………………………………………….4</p><p> 程序調(diào)試……………………………………………….8</p><p> 六、 設(shè)計(jì)總結(jié)………………………………………………11</p><p><b> 一、課程設(shè)計(jì)的目的</b></
4、p><p> 課程設(shè)計(jì)是《數(shù)據(jù)結(jié)構(gòu)》必不可缺的一個重要環(huán)節(jié),它可加深我們對該課程所學(xué)內(nèi)容的進(jìn)一步的理解與鞏固,是將計(jì)算機(jī)課程與實(shí)際問題相聯(lián)接的關(guān)鍵步驟。通過課程設(shè)計(jì),能夠提高學(xué)生分析問題、解決問題,從而運(yùn)用所學(xué)知識解決實(shí)際問題的能力,通過課程設(shè)計(jì)將C語言與數(shù)據(jù)結(jié)構(gòu)結(jié)合在一起實(shí)際應(yīng)用。</p><p><b> 二、設(shè)計(jì)內(nèi)容</b></p><p&g
5、t; 設(shè)計(jì)一個稀疏多項(xiàng)式簡單計(jì)算器</p><p><b> 設(shè)計(jì)要求:</b></p><p> ◆輸入并分別建立多項(xiàng)式A和B</p><p> ◆輸入輸出多項(xiàng)式,輸出形式為整數(shù)序列: n,c1,e1,c2,e2……,其中n是多項(xiàng)式的項(xiàng)數(shù),ci和ei是第i項(xiàng)的系數(shù)和指數(shù),</p><p> ◆序列按指數(shù)降序排
6、列完成兩個多項(xiàng)式的相加、相減、相乘,并將多項(xiàng)式結(jié)果輸出</p><p><b> 【問題描述】</b></p><p> 設(shè)計(jì)一個稀疏多項(xiàng)式簡單計(jì)算器。用戶輸入兩個多項(xiàng)式的項(xiàng)數(shù)、系數(shù)與指數(shù),計(jì)算加減乘除等的結(jié)果。</p><p><b> 【功能設(shè)計(jì)】</b></p><p> 提示用戶輸入
7、兩個多項(xiàng)式A和B,輸入形式為:</p><p> ◆先輸入多項(xiàng)式A的項(xiàng)數(shù),</p><p><b> ◆回車,</b></p><p> ◆輸入多項(xiàng)式A第一項(xiàng)的系數(shù),每一項(xiàng)按照先輸入系數(shù),</p><p><b> ◆空格或回車;</b></p><p> ◆輸入多
8、項(xiàng)式A第一項(xiàng)的指數(shù),</p><p> ◆繼續(xù)輸入多項(xiàng)式A的其他項(xiàng),輸入方式與上同;</p><p> ◆再建立多項(xiàng)式B,數(shù)據(jù)輸入方式與建立多項(xiàng)式A相同。</p><p> 兩個多項(xiàng)式建立完畢后,再選擇以下功能進(jìn)行相應(yīng)的運(yùn)算。</p><p> 1. 輸出多項(xiàng)式A和B </p><p> 2. 計(jì)算多項(xiàng)式A+
9、B </p><p> 3. 計(jì)算多項(xiàng)式A-B </p><p> 4. 計(jì)算多項(xiàng)式A*B </p><p> 5. 重新創(chuàng)建多項(xiàng)式</p><p><b> 6. 退出</b></p><p><b> 【數(shù)據(jù)結(jié)構(gòu)】</b></p><p>
10、; typedef struct Polynomial //結(jié)點(diǎn)類型</p><p> { </p><p> float coef; //系數(shù)</p><p> int exp;
11、 //指數(shù)</p><p> Polynomial *next;</p><p> }*Polyn; //Polyn為結(jié)點(diǎn)指針類型</p><p> void PrintPolyn(Polyn P); //輸出多項(xiàng)式</p>&l
12、t;p> void Insert(Polyn p,Polyn head); //插入結(jié)點(diǎn)</p><p> Polyn CreatePolyn(Polyn head,int m) ; //創(chuàng)建多項(xiàng)式</p><p> void DestroyPolyn(Polyn p); //銷毀多項(xiàng)式<
13、;/p><p> int compare(Polyn a,Polyn b); //多項(xiàng)式指數(shù)比較</p><p> Polyn AddPolyn(Polyn pa,Polyn pb); //加法</p><p> Polyn SubPolyn(Polyn pa,Polyn pb); //
14、減法</p><p> Polyn MultiplyPolyn(Polyn pa,Polyn pb); //乘法</p><p><b> 三、總體設(shè)計(jì)</b></p><p> 圖1 系統(tǒng)功能模塊圖</p><p><b> 四、詳細(xì)設(shè)計(jì)</b></p>&
15、lt;p><b> 【結(jié)點(diǎn)結(jié)構(gòu)】</b></p><p><b> 圖2 結(jié)點(diǎn)結(jié)構(gòu)圖</b></p><p> coef:系數(shù)域,存放非零項(xiàng)的系數(shù);</p><p> exp:指數(shù)域,存放非零項(xiàng)的指數(shù);</p><p> next:指針域,存放只想下一結(jié)點(diǎn)的指針。 </p>
16、;<p> 【多項(xiàng)式的鏈接表示】</p><p> 多項(xiàng)式的項(xiàng)采用單鏈表存儲,每一個非零項(xiàng)對應(yīng)單鏈表的一個結(jié)點(diǎn),且單鏈表按照指數(shù)遞減有序排列</p><p><b> 。</b></p><p> 多項(xiàng)式的邏輯結(jié)構(gòu):視為線性表</p><p> p(x)=3x14-8x8+6x2+2</p&
17、gt;<p><b> 多項(xiàng)式的存儲表示</b></p><p> p(x)=3x14-8x8+6x2+2</p><p> ( (3,14),(-8,8),(6,2),(2,0) )</p><p> 圖3 多項(xiàng)式的鏈表表示</p><p> 【采用帶頭結(jié)點(diǎn)的單鏈表】</p>&
18、lt;p> 設(shè)兩個工作指針pa和pb,分別指向兩個單鏈表的開始結(jié)點(diǎn),兩個多項(xiàng)式求和實(shí)際上是對結(jié)點(diǎn)pa的指數(shù)域和結(jié)點(diǎn)pb的指數(shù)域進(jìn)行比較,這會出現(xiàn)下列三種情況:</p><p> (1)若pa->exp<pb->exp,則結(jié)點(diǎn)pa應(yīng)為結(jié)點(diǎn)中的一個結(jié)點(diǎn),將指針pa后移;</p><p> ?。?)若pa->exp>pb->exp,則結(jié)點(diǎn)pb應(yīng)為結(jié)點(diǎn)
19、中的一個結(jié)點(diǎn),將pb插入到第一個單鏈表中結(jié)點(diǎn)pa之前,再將指針pb后移;</p><p> ?。?)若pa->exp=pb->exp,則pa與pb所指為同類項(xiàng),將pb的系數(shù)加到pa的系數(shù)上, 若相加結(jié)果不為0,則將指針pa后移,刪除結(jié)點(diǎn)pb,若相加結(jié)果為0,則表明結(jié)果中無此項(xiàng),刪除結(jié)點(diǎn)pa和結(jié)點(diǎn)pb,并將指針pa和指針pb分別后移。</p><p><b> 【
20、算法設(shè)計(jì)】</b></p><p> 表一 算法設(shè)計(jì)簡析</p><p><b> 【多項(xiàng)式相加】</b></p><p> 圖4 多項(xiàng)式相加示意圖</p><p><b> 【多項(xiàng)式相乘】</b></p><p> 兩個多項(xiàng)式相乘時(shí)(假設(shè)第一個為m
21、項(xiàng),第二個為n項(xiàng))只要第一個多項(xiàng)式的每一項(xiàng)的系數(shù)乘以第二個多項(xiàng)式每一項(xiàng)的系數(shù),指數(shù)加上第二個多項(xiàng)式的指數(shù)??梢缘玫絤個新的多項(xiàng)式。然后把這m個多項(xiàng)式按照指數(shù)相同的進(jìn)行相加。合并成一個多項(xiàng)式即可。</p><p> 假設(shè)有兩個一元多項(xiàng)式:</p><p> P1(X)=X^2+2X+3</p><p> P2(X)=3X^3+10X+6</p>&
22、lt;p><b> 計(jì)算它們的和:</b></p><p> P1(X)*P2(X)=(X^2+2X+3)*(3X^3+10X+6)</p><p> = 3X^5+6X^4+19X^3+26X^2+42X^1+18</p><p><b> 部分代碼描敘如下:</b></p><p>
23、; for(;qa;qa=qa->next)</p><p><b> {</b></p><p> for(qb=pb->next;qb;qb=qb->next)</p><p><b> {</b></p><p> qc=new Polynomial;</p&
24、gt;<p> qc->coef=qa->coef*qb->coef;</p><p> qc->exp=qa->exp+qb->exp;</p><p> InsertNode(qc,headf); </p><p><b> }</b></p>&l
25、t;p><b> }</b></p><p><b> 【程序詳細(xì)設(shè)計(jì)】</b></p><p> 1、 輸出多項(xiàng)式的函數(shù),必須考慮到多項(xiàng)式所有輸出形勢的情況:</p><p> 如果項(xiàng)數(shù)為零,則直接輸出“0”;</p><p> 若某一項(xiàng)的系數(shù)為0,則不輸出該項(xiàng),若系數(shù)為1,則“1
26、”不用輸出,直接輸出字符“X”;</p><p> 若項(xiàng)的系數(shù)(或指數(shù))大于0,則直接輸出該系數(shù)(或指數(shù)),否則需在系數(shù)(或指數(shù))前輸出一個“—”;</p><p> 若某一項(xiàng)的指數(shù)為1,則該項(xiàng)指數(shù)不用輸出,直接輸出系數(shù),在后面加一個字符“X”;</p><p> 若某一項(xiàng)指數(shù)為0,則只要輸出該項(xiàng)的系數(shù)即可;</p><p> 當(dāng)項(xiàng)數(shù)
27、不為第一項(xiàng)而且該項(xiàng)系數(shù)大于0時(shí),需在系數(shù)前輸出一個“+”;</p><p> 2、 結(jié)點(diǎn)插入并排序的函數(shù)InsertNode(Polyn p,Polyn head) :</p><p> 計(jì)算完成后調(diào)用該函數(shù),將結(jié)果按照指數(shù)降序排列,合并指數(shù)相同的項(xiàng),并釋放計(jì)算后系數(shù)為0的結(jié)點(diǎn),若后一個多項(xiàng)式中的項(xiàng)在前一個多項(xiàng)式中找不到與之指數(shù)相同的項(xiàng),則將該項(xiàng)作為一個新的結(jié)點(diǎn)按照指數(shù)降序插入,合并
28、代碼如下:</p><p> if(q2!=NULL&&p->exp==q2-> //將指數(shù)相同的合并</p><p><b> { </b></p><p> q2->coef+=p->coef; //系數(shù)相加</p&
29、gt;<p> delete p; //釋放p</p><p> if(!q2->coef) //釋放系數(shù)為0的結(jié)點(diǎn)</p><p> {q1->next=q2->next;</p><p> delete q2;}</p>&l
30、t;p><b> }</b></p><p> 3、多項(xiàng)式創(chuàng)建函數(shù)Polyn CreatePolyn(Polyn head,int m):</p><p> 建立頭指針為head,項(xiàng)數(shù)為m的多項(xiàng)式,調(diào)用InsertNode函數(shù)插入結(jié)點(diǎn),返回頭結(jié)點(diǎn)。</p><p> Polyn CreatePolyn(Polyn head,int
31、 m) //頭指針為head、項(xiàng)數(shù)為m</p><p><b> { </b></p><p><b> Polyn p;</b></p><p> p=head=new Polynomial; //生成頭結(jié)點(diǎn)</p><p> h
32、ead->next=NULL;</p><p> for(int i=0;i<m;i++)</p><p> {p=new Polynomial; //建立新結(jié)點(diǎn)</p><p> printf("請輸入第%d項(xiàng)的系數(shù)與指數(shù)(空格或回車隔開):",i+1);</p><
33、p> scanf("%f%d",&p->coef,&p->exp);</p><p> InsertNode(p,head); //調(diào)用InsertNode函數(shù)插入結(jié)點(diǎn)</p><p> }return head;</p><p><b> }</b>
34、;</p><p> 4、兩個多項(xiàng)式在指數(shù)比較函數(shù)int Compare(Polyn a,Polyn b):</p><p> 根據(jù)多項(xiàng)式A的指數(shù)值<、=或>多項(xiàng)式B的指數(shù)值,分別返回-1、0或1。在此,還要考慮到多項(xiàng)式A或B項(xiàng)數(shù)為0的情況。</p><p> int Compare(Polyn a,Polyn b)//依a的指數(shù)值<、=或&
35、gt;b的指數(shù)值,分別返回-1、0或1</p><p><b> {</b></p><p><b> if(a&&b)</b></p><p><b> {</b></p><p> if(!b||a->exp>b->exp)
36、 return 1;</p><p> else if(!a||a->exp<b->exp) return -1;</p><p> else return 0;</p><p><b> }</b></p><p> else if(!a&&b) </p&g
37、t;<p> return -1; //a多項(xiàng)式為空,但b多項(xiàng)式非空</p><p><b> else </b></p><p> return 1; //b多項(xiàng)式為空,但a多項(xiàng)式非空</p><p><b> }<
38、;/b></p><p> 5、多項(xiàng)式的銷毀函數(shù)void DestroyPolyn(Polyn p):</p><p> 運(yùn)算完成后,需銷毀建立的多項(xiàng)式。</p><p> void DestroyPolyn(Polyn p) //銷毀多項(xiàng)式p</p><p><b> { &l
39、t;/b></p><p> Polyn q1,q2;</p><p> q1=p->next;</p><p> if(q1==NULL) //結(jié)果系數(shù)為0的情況</p><p><b> return ;</b></p><p>
40、 q2=q1->next;</p><p> while(q1->next)</p><p><b> {</b></p><p> delete q1;</p><p> q1=q2; //指針后移</p><p> q2=
41、q2->next;</p><p><b> }</b></p><p><b> }</b></p><p><b> 【初步完成程序】</b></p><p> 由上述的加法和乘法的算法可以設(shè)計(jì)出多項(xiàng)式的一元稀疏運(yùn)算器,結(jié)合上述結(jié)構(gòu)體以及指針的設(shè)計(jì)可以初步設(shè)計(jì)
42、出程序,尤其在設(shè)計(jì)程序時(shí)要考慮全面,適當(dāng)例證自己的算法,否則系統(tǒng)讓你容易崩潰。</p><p><b> 【界面設(shè)計(jì)】</b></p><p> 程序運(yùn)行之后,首先顯示本程序的功能提示,以及提示用戶輸入:</p><p> 圖5 系統(tǒng)簡單界面</p><p> 當(dāng)用戶根據(jù)提示輸入完成后,兩個多項(xiàng)式建立完畢,然后
43、根據(jù)輸入對應(yīng)的數(shù)字,選擇相應(yīng)的功能,完成計(jì)算并輸出。</p><p><b> 圖6 多項(xiàng)式的輸出</b></p><p><b> 五、程序調(diào)試</b></p><p><b> 測試數(shù)據(jù):</b></p><p> (1) A=3X^3-5X^2+
44、X+2</p><p> B=2X^3+5X^2-6</p><p><b> 輸入:</b></p><p> 表二 待輸入的多項(xiàng)式</p><p><b> 預(yù)期結(jié)果:</b></p><p> A+B=:5X^3+X-4</p><p&g
45、t; A-B=:X^3-10X^2+X+8</p><p> A*B=:6X^6+5X^5-23X^4-9X^3+40X^2-6X-12</p><p><b> 輸入顯示</b></p><p><b> 圖7 多項(xiàng)式輸入圖</b></p><p><b> 測試結(jié)果:<
46、/b></p><p> 圖8 多項(xiàng)式計(jì)算結(jié)果</p><p> 預(yù)期結(jié)果與測試結(jié)果相同,相加算法正確!</p><p><b> 六、設(shè)計(jì)總結(jié)</b></p><p> 1、設(shè)計(jì)過程的感受與體會</p><p> 雖然數(shù)據(jù)結(jié)構(gòu)是一門公認(rèn)的比較難的課程,自己學(xué)起來也覺得有些吃力,但
47、在本次課程設(shè)計(jì)之前,我系統(tǒng)地把教科書復(fù)習(xí)了一遍,大大加深了對各種數(shù)據(jù)結(jié)構(gòu)的理解,運(yùn)用起來更 加自如。不斷地翻閱各種參考書,以及在老師和同學(xué)的幫助下,基本上考慮到了所有的邊界情況,反復(fù)測試各種類型的數(shù)據(jù),強(qiáng)化程序的健壯性,最終順利完成了本次課程設(shè)計(jì)。</p><p> 2、遇到的問題與解決方法</p><p> 在本次課程設(shè)計(jì)中,遇到的最大問題就是線性表的操作,特別是很多臨界條件的判斷問
溫馨提示
- 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ì)-一元多項(xiàng)式計(jì)算器
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)--一元稀疏多項(xiàng)式計(jì)算器
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)---一元稀疏多項(xiàng)式計(jì)算器
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告一元稀疏多項(xiàng)式計(jì)算器
- 《數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)》報(bào)告---一元稀疏多項(xiàng)式計(jì)算器
- 《數(shù)據(jù)結(jié)構(gòu)》課程設(shè)計(jì)報(bào)告-多項(xiàng)式計(jì)算
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)---多項(xiàng)式問題
- 一元多項(xiàng)式計(jì)算(數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì))
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)---一元多項(xiàng)式計(jì)算
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)---一元多項(xiàng)式
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)----一元多項(xiàng)式
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告一元多項(xiàng)式的計(jì)算
- 一元多項(xiàng)式的計(jì)算數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告一元多項(xiàng)式的計(jì)算
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告一元多項(xiàng)式的計(jì)算
- 一元稀疏多項(xiàng)式計(jì)算器課程設(shè)計(jì)
- 課程設(shè)計(jì)報(bào)告---一元多項(xiàng)式計(jì)算器
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)--一元多項(xiàng)式計(jì)算問題(c語言)
- 一元多項(xiàng)式的計(jì)算數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告一元多項(xiàng)式的計(jì)算[1]
評論
0/150
提交評論