版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p> 數(shù) 據(jù) 結(jié) 構(gòu) 課 程 設(shè) 計(jì)</p><p> 設(shè)計(jì)題目:基于鏈?zhǔn)奖韺?shí)現(xiàn)一元多項(xiàng)式的加減乘運(yùn)算 </p><p> 課題名稱(chēng)基于鏈?zhǔn)奖韺?shí)現(xiàn)一元多項(xiàng)式的加減乘運(yùn)算</p><p> 院 系年級(jí)專(zhuān)業(yè)</p><p> 成 績(jī)</p>&
2、lt;p> 課題設(shè)計(jì)目的與設(shè)計(jì)意義1、課題設(shè)計(jì)目的:通過(guò)多項(xiàng)式運(yùn)算程序設(shè)計(jì)(用C語(yǔ)言實(shí)現(xiàn)),使我們進(jìn)一步掌握和利用C語(yǔ)言進(jìn)行結(jié)構(gòu)化程序設(shè)計(jì)的能力;進(jìn)一步理解和運(yùn)用結(jié)構(gòu)化程設(shè)計(jì)的思想和方法;初步掌握開(kāi)發(fā)一個(gè)小型系統(tǒng)程序設(shè)計(jì)的基本方法;學(xué)會(huì)調(diào)試一個(gè)較長(zhǎng)程序的基本方法;學(xué)會(huì)利用流程圖或N-S圖表示算法;以及掌握書(shū)寫(xiě)課程設(shè)計(jì)開(kāi)發(fā)文檔的能力(書(shū)寫(xiě)課程設(shè)計(jì)報(bào)告)??傊ㄟ^(guò)本課程設(shè)計(jì)加深對(duì)《C語(yǔ)言》及《數(shù)據(jù)結(jié)構(gòu)》課程所學(xué)知識(shí)的理解,進(jìn)一步鞏固
3、C語(yǔ)言語(yǔ)法規(guī)則,在程序中體現(xiàn)出算法的思想,提高程序的運(yùn)行效率。學(xué)會(huì)編制結(jié)構(gòu)清晰、風(fēng)格良好、數(shù)據(jù)結(jié)構(gòu)適當(dāng)?shù)模谜Z(yǔ)言程序,從而具備解決綜合性實(shí)際問(wèn)題的能力。2、課題設(shè)計(jì)意義:通過(guò)這次課程設(shè)計(jì)練習(xí),使我更深刻地理解了C語(yǔ)言的精髓-----指針的使用。完成整個(gè)程序設(shè)計(jì)有,對(duì)指針掌握的更加熟練。同時(shí)通過(guò)直接對(duì)鏈表的操作,加深了對(duì)數(shù)據(jù)結(jié)構(gòu)的理解和認(rèn)識(shí)。并在完成課程設(shè)計(jì)的過(guò)程作主動(dòng)查閱了相關(guān)資料,學(xué)到了不少課本上沒(méi)有的技術(shù)知識(shí)。經(jīng)過(guò)這次課程設(shè)計(jì),我深刻
4、認(rèn)識(shí)到算法在程序設(shè)計(jì)中的重要性,一個(gè)完整的程序總是由若干個(gè)函數(shù)構(gòu)成的,這些相應(yīng)的函數(shù)體現(xiàn)了算法的基本思想。另外也需要提出的是在這次程序設(shè)計(jì)</p><p><b> 目 錄 </b></p><p><b> 問(wèn)題分析11</b></p><p> 1.1 問(wèn)題描述1</p><p>
5、 1.2 問(wèn)題的數(shù)學(xué)模型1</p><p> 1.3 構(gòu)造數(shù)據(jù)結(jié)構(gòu)1</p><p><b> 2 系統(tǒng)分析2</b></p><p> 2.1 可行性研究2</p><p> 2.2 系統(tǒng)結(jié)構(gòu)與主要功能模塊2</p><p><b> 3 系統(tǒng)設(shè)計(jì)4</b&
6、gt;</p><p> 3.1系統(tǒng)設(shè)計(jì)目的與要求4</p><p> 3.2系統(tǒng)設(shè)計(jì)內(nèi)容4</p><p> 3.3功能算法描述與數(shù)據(jù)結(jié)構(gòu)說(shuō)明4</p><p><b> 4 系統(tǒng)實(shí)現(xiàn)7</b></p><p> 5 調(diào)試及運(yùn)行結(jié)果11</p><p>
7、; 6 收獲和體會(huì)12</p><p><b> 附錄13</b></p><p><b> 問(wèn)題分析1 </b></p><p><b> 1.1 問(wèn)題描述</b></p><p> 設(shè)計(jì)一個(gè)n元多項(xiàng)式程序,并完成多項(xiàng)式的乘法運(yùn)算。從實(shí)際的角度出發(fā),這里設(shè)計(jì)的程
8、序是基于一元n次多項(xiàng)式的數(shù)學(xué)模型。</p><p> 1.2 問(wèn)題的數(shù)學(xué)模型</p><p> 在數(shù)學(xué)上,一個(gè)一元多項(xiàng)式Pn(x)可按升冪寫(xiě)成:Pn(x)=a 0+a1 x+a2 x^2 +…+an x^n-1 .它由n+1個(gè)系數(shù)惟一確定,因此,在計(jì)算機(jī)里,它可用一個(gè)線性表P來(lái)表示:Pn=(a0,a1,a2,…,an)每一項(xiàng)的指數(shù)i隱含在其系數(shù)ai的序號(hào)里。</p>&l
9、t;p> 多項(xiàng)式的乘法規(guī)則:多次運(yùn)用單項(xiàng)式與多項(xiàng)式相乘的法則得到的.計(jì)算時(shí)(a+b)(m+n),先把(m+n)看成一個(gè)單項(xiàng)式,(a+b) 是一個(gè)多項(xiàng)式,運(yùn)用單項(xiàng)式與多項(xiàng)式相乘的法則,得到(a+b)(m+n)=a(m+n)+b(m+n),然后再次運(yùn)用單項(xiàng)式與多項(xiàng)式相乘的法則。</p><p> 1.3 構(gòu)造數(shù)據(jù)結(jié)構(gòu)</p><p> 通過(guò)分析多項(xiàng)式的特征,不難看出多項(xiàng)式是由單項(xiàng)式
10、構(gòu)成的,而每個(gè)單項(xiàng)式都具有系數(shù)和指數(shù),當(dāng)系數(shù)為0時(shí),該項(xiàng)就失去了意義,在計(jì)算機(jī)內(nèi)要表示一個(gè)多項(xiàng)式,至少以下數(shù)據(jù)信息:系數(shù)信息、指數(shù)信息和指向下一個(gè)單項(xiàng)式的指針。通過(guò)指針,我們就可以把多個(gè)單項(xiàng)式連接起來(lái),形式一個(gè)多項(xiàng)式,需要說(shuō)明的是從廣義的角度講,單項(xiàng)式也是一個(gè)多項(xiàng)式?;谝陨系姆治?,我們定義多項(xiàng)式的數(shù)據(jù)結(jié)構(gòu)為如下結(jié)構(gòu)體形式:</p><p> typedef struct Polynomial{</p&g
11、t;<p> float coef;//系數(shù)</p><p> int expn;//指數(shù)</p><p> struct Polynomial *next;//指向下一個(gè)結(jié)點(diǎn)</p><p> }*Polyn,Polynomial; //Polyn為結(jié)點(diǎn)指針類(lèi)型</p><p><b&
12、gt; 2 系統(tǒng)分析</b></p><p><b> 2.1 可行性研究</b></p><p> 該程序主要從技術(shù)的角度來(lái)分析可行性。技術(shù)上的可行性研究主要分析技術(shù)條件能否順利完成開(kāi)發(fā)工作,硬、軟件能否滿(mǎn)足開(kāi)發(fā)者的需要等。該系統(tǒng)采用了Windows XP操作系統(tǒng)結(jié)合Visual C++ 6.0,TC 2.0等軟件開(kāi)發(fā)平臺(tái)已成熟可行。硬件方面,科技
13、飛速發(fā)展的今天,硬件更新的速度越來(lái)越快,容量越來(lái)越大,可靠性越來(lái)越高,其硬件平臺(tái)也比較能滿(mǎn)足此系統(tǒng)的需要。此外,還有經(jīng)濟(jì)可行性,用戶(hù)使用可行性,法律可行性等可行性研究,這里從簡(jiǎn)省去。</p><p> 2.2 系統(tǒng)結(jié)構(gòu)與主要功能模塊</p><p> 從實(shí)現(xiàn)多項(xiàng)式式運(yùn)算過(guò)程的角度來(lái)分析,至少需要這樣一些子功能模塊。如:</p><p> 1. 多項(xiàng)式創(chuàng)建功能;
14、</p><p> 2. 多項(xiàng)式運(yùn)算功能;</p><p> 3. 操作界面顯示功能;</p><p> 4. 銷(xiāo)毀多項(xiàng)式的功能;</p><p> 5. 多項(xiàng)式復(fù)制功能等。</p><p> 系統(tǒng)的整體流程和主要功能模塊如圖2-1所示</p><p><b> 3 系統(tǒng)設(shè)
15、計(jì)</b></p><p> 3.1系統(tǒng)設(shè)計(jì)目的與要求</p><p> 通過(guò)多項(xiàng)式運(yùn)算程序設(shè)計(jì)(用C語(yǔ)言實(shí)現(xiàn)),使我們進(jìn)一步掌握和利用C語(yǔ)言進(jìn)行結(jié)構(gòu)化程序設(shè)計(jì)的能力;進(jìn)一步理解和運(yùn)用結(jié)構(gòu)化程設(shè)計(jì)的思想和方法;初步掌握開(kāi)發(fā)一個(gè)小型系統(tǒng)程序設(shè)計(jì)的基本方法;學(xué)會(huì)調(diào)試一個(gè)較長(zhǎng)程序的基本方法;學(xué)會(huì)利用流程圖或N-S圖表示算法;以及掌握書(shū)寫(xiě)課程設(shè)計(jì)開(kāi)發(fā)文檔的能力(書(shū)寫(xiě)課程設(shè)計(jì)報(bào)告)。
16、總之,通過(guò)本課程設(shè)計(jì)加深對(duì)《C語(yǔ)言》及《數(shù)據(jù)結(jié)構(gòu)》課程所學(xué)知識(shí)的理解,進(jìn)一步鞏固C語(yǔ)言語(yǔ)法規(guī)則,在程序中體現(xiàn)出算法的思想,提高程序的運(yùn)行效率。學(xué)會(huì)編制結(jié)構(gòu)清晰、風(fēng)格良好、數(shù)據(jù)結(jié)構(gòu)適當(dāng)?shù)模谜Z(yǔ)言程序,從而具備解決綜合性實(shí)際問(wèn)題的能力。</p><p><b> 3.2系統(tǒng)設(shè)計(jì)內(nèi)容</b></p><p> 多項(xiàng)式運(yùn)算程序具有以下基本功能:</p><
17、;p> 1.界面輸出,提示如何輸入數(shù)據(jù)。要求先輸入多項(xiàng)式的項(xiàng)數(shù)。</p><p> 2.創(chuàng)建多項(xiàng)式。接收輸入的數(shù)據(jù),并保存到鏈表中。</p><p> 3.顯示程序的功能表,允許使用者選擇運(yùn)算類(lèi)型。</p><p> 4.顯示已經(jīng)創(chuàng)建好的多項(xiàng)式。</p><p><b> 6.實(shí)現(xiàn)加法運(yùn)算。</b><
18、;/p><p><b> 7.實(shí)現(xiàn)減法運(yùn)算。</b></p><p><b> 8.實(shí)現(xiàn)乘法運(yùn)算。</b></p><p> 9.清除內(nèi)存內(nèi)容,銷(xiāo)毀創(chuàng)建的鏈表,退出程序。</p><p> 3.3功能算法描述與數(shù)據(jù)結(jié)構(gòu)說(shuō)明</p><p> 該多項(xiàng)式程序除了main()
19、函數(shù)外,主要有以下函數(shù):</p><p> void Insert(Polyn p,Polyn h)</p><p> Polyn CreatePolyn(Polyn head,int m)</p><p> void DestroyPolyn(Polyn p)</p><p> void PrintPolyn(Polyn P)<
20、;/p><p> int compare(Polyn a,Polyn b)</p><p> Polyn AddPolyn(Polyn pa,Polyn pb)</p><p> Polyn SubtractPolyn(Polyn pa,Polyn pb)</p><p> Polyn MultiplyPolyn(Polyn pa,Pol
21、yn pb)</p><p> 下面對(duì)這些函數(shù)逐一介紹。</p><p> 3.3. 系統(tǒng)主要功能函數(shù)的詳細(xì)設(shè)計(jì)</p><p> 1. main()函數(shù)</p><p> main函數(shù)用來(lái)實(shí)現(xiàn)提示使用者輸入、顯示功能列表、調(diào)用其他運(yùn)算函數(shù)實(shí)現(xiàn)運(yùn)算功能。</p><p> 在main()函數(shù)中,定義m、n用來(lái)
22、保存兩個(gè)多項(xiàng)式的項(xiàng)數(shù),pa、pb、pc、pd、pf定義程序所需鏈表的頭指針。在程序開(kāi)始要求輸入兩個(gè)多項(xiàng)式的項(xiàng)數(shù),隨后根據(jù)項(xiàng)數(shù)創(chuàng)建兩個(gè)鏈表以保存多項(xiàng)式,再顯示出功能列表后通過(guò)if語(yǔ)句來(lái)實(shí)現(xiàn)功能的選擇,從而對(duì)整個(gè)程序流程進(jìn)行控制。</p><p> 2. Polyn CreatePolyn(Polyn head,int m)</p><p> 該函數(shù)功能是創(chuàng)建新的多項(xiàng)式鏈表。int m保
23、存的多項(xiàng)式的項(xiàng)數(shù),使用for語(yǔ)句,控制輸入多項(xiàng)式的每一項(xiàng)。當(dāng)創(chuàng)建的鏈表長(zhǎng)度為m時(shí),將不再提示用戶(hù)繼續(xù)輸入多項(xiàng)式的系數(shù)和指數(shù)。</p><p> 在該函數(shù)中要用到分配空間的函數(shù)malloc()為新建鏈表分配空間。</p><p> 3. void DestroyPolyn(Polyn p)</p><p> 該函數(shù)的功能是銷(xiāo)毀掉創(chuàng)建的兩個(gè)鏈表,釋放內(nèi)存。以輔助
24、退出程序。</p><p> 4. void Insert(Polyn p,Polyn h)</p><p> 該函數(shù)功能:將新的節(jié)點(diǎn)p插入到現(xiàn)有鏈表的后面,并確保多項(xiàng)式的指數(shù)exp是升序。將s節(jié)點(diǎn)插入到head所指向的鏈表。在該函數(shù)的操作中,要注意指針是如何移動(dòng)的。</p><p> 5. Polyn AddPolyn(Polyn pa,Polyn pb
25、)</p><p> 該函數(shù)功能:實(shí)現(xiàn)兩個(gè)多項(xiàng)式pa、pb相加,并將計(jì)算結(jié)果存儲(chǔ)于新建立的pc中,</p><p> 它的原理是將指數(shù)相同的單項(xiàng)式相加,系數(shù)相加后為0,則pa、pb的指針都后移。在加法計(jì)算中要求pa,與pb的冪次序都是升序,否則可能得到錯(cuò)誤的結(jié)果。</p><p> 該函數(shù)調(diào)用了int compare(Polyn a,Polyn b)的結(jié)果,用
26、來(lái)判斷多項(xiàng)式在同一指數(shù)下a、b是否有為系數(shù)為0。同樣也使用了malloc()關(guān)鍵字,為新鏈表創(chuàng)建空間。</p><p> 6. int compare(Polyn a,Polyn b)</p><p> 該函數(shù)功能:判斷兩個(gè)多項(xiàng)式在同一指數(shù)下是否有其中一個(gè)為系數(shù)為0。用來(lái)輔助加法和乘法運(yùn)算。</p><p> 7. Polyn SubtractPolyn(
27、Polyn pa,Polyn pb)</p><p> 該函數(shù)功能:實(shí)現(xiàn)兩個(gè)多項(xiàng)式pa、pb相減,其原理根加法類(lèi)似,將指數(shù)相同的指數(shù)相減。與加法不同的是在送在減法中,創(chuàng)建了新的鏈表來(lái)存放結(jié)果,并返回該鏈表的頭指針。</p><p> 8. void PrintPolyn(Polyn P)</p><p> 該函數(shù)功能:顯示多項(xiàng)式鏈表。在該函數(shù)中較復(fù)雜的是如何
28、控制鏈表的輸出,尤其是第一項(xiàng)的輸出,同時(shí)還有符號(hào)的控制。在輸出第一項(xiàng)時(shí)要判斷是不是常數(shù)項(xiàng),若是,則不要輸出字符x。</p><p> 9. Polyn MultiplyPolyn(Polyn pa,Polyn pb)</p><p> 函數(shù)功能:實(shí)現(xiàn)兩個(gè)多項(xiàng)式相乘,A(X) * B(x) 。計(jì)算時(shí)運(yùn)用單項(xiàng)式與多項(xiàng)式相乘的法則,然后再次運(yùn)用單項(xiàng)式與多項(xiàng)式相乘的法則。</p>
29、<p><b> 4 系統(tǒng)實(shí)現(xiàn)</b></p><p> 該程序?qū)崿F(xiàn)了多項(xiàng)式的創(chuàng)建、多項(xiàng)式的加法、減法、乘法運(yùn)算以及多項(xiàng)式的清除。為完成這些功能,還用到了一些輔助函數(shù)。</p><p> 下面討論重要函數(shù)具體實(shí)現(xiàn)過(guò)程及其參數(shù)的意義:</p><p> 1. Polyn CreatePolyn(Polyn head,int
30、m)該函數(shù)的兩個(gè)參數(shù),head表示為創(chuàng)建的鏈表的頭指針,m表示為鏈表的長(zhǎng)度,即多項(xiàng)式的項(xiàng)數(shù)。定義int i計(jì)數(shù),當(dāng)i<m時(shí),for語(yǔ)句反復(fù)提示用戶(hù)輸入該多項(xiàng)式的每一項(xiàng)的指數(shù)和系數(shù),并保存。當(dāng)i=m時(shí),輸入完畢,該鏈表也創(chuàng)建完畢。詳細(xì)的實(shí)現(xiàn)過(guò)程如下:</p><p> Polyn CreatePolyn(Polyn head,int m){</p><p> int i;//用來(lái)計(jì)
31、數(shù)</p><p> Polyn p;//定義一個(gè)p鏈表</p><p> p=head=(Polyn)malloc(sizeof(struct Polynomial));</p><p> head->next=NULL;</p><p> for(i=0;i<m;i++){</p><p>
32、p=(Polyn)malloc(sizeof(struct Polynomial));//建立新結(jié)點(diǎn)以接收數(shù)據(jù)</p><p> printf("請(qǐng)輸入第%d項(xiàng)的系數(shù)與指數(shù):",i+1);</p><p> scanf("%f %d",&p->coef,&p->expn);</p><p>
33、Insert(p,head); //調(diào)用Insert函數(shù)插入結(jié)點(diǎn)}</p><p> return head;</p><p> }//CreatePolyn</p><p> 2. void Insert(Polyn p,Polyn h) 該函數(shù)具有兩個(gè)參數(shù),用來(lái)實(shí)現(xiàn)鏈表的順序排列和合并相同的項(xiàng)。以下是實(shí)現(xiàn)插入的關(guān)鍵代碼:</p><
34、p> void Insert(Polyn p,Polyn h){ </p><p> if(p->coef==0) free(p); //系數(shù)為0的話釋放結(jié)點(diǎn)</p><p> else{//如果系數(shù)不為0</p><p> Polyn q1,q2;</p><p> q1=h;q2=h->ne
35、xt;</p><p> while(q2&&p->expn<q2->expn){ //查找插入位置</p><p><b> q1=q2;</b></p><p> q2=q2->next; }</p><p> if(q2&&p->expn==
36、q2->expn){ //將指數(shù)相同相合并</p><p> q2->coef+=p->coef;</p><p><b> free(p);</b></p><p> if(!q2->coef){ //系數(shù)為0的話釋放結(jié)點(diǎn)</p><p> q1->
37、next=q2->next;</p><p> free(q2); }</p><p><b> }</b></p><p> else{ //指數(shù)為新時(shí)將結(jié)點(diǎn)插入</p><p> p->next=q2;</p><p>
38、 q1->next=p; </p><p><b> }</b></p><p><b> }</b></p><p><b> }//Insert</b></p><p> 3. Polyn AddPolyn(Polyn pa,Polyn pb) 該函數(shù)有兩個(gè)參
39、數(shù),其類(lèi)型均為polyn,分別表示要相加的兩個(gè)不同的多項(xiàng)式。其計(jì)算的結(jié)果存放在新建的pc所指向的鏈表中。函數(shù)中調(diào)用了int compare(Polyn a,Polyn b)的結(jié)果。下面是實(shí)現(xiàn)加法的關(guān)鍵代碼:</p><p> Polyn AddPolyn(Polyn pa,Polyn pb){//求解并建立多項(xiàng)式a+b,返回其頭指針</p><p> Polyn qa=pa->n
40、ext;</p><p> Polyn qb=pb->next;</p><p> Polyn headc,hc,qc;</p><p> hc=(Polyn)malloc(sizeof(struct Polynomial));//建立頭結(jié)點(diǎn)</p><p> hc->next=NULL;</p><p
41、><b> headc=hc;</b></p><p> while(qa||qb){</p><p> qc=(Polyn)malloc(sizeof(struct Polynomial));</p><p> switch(compare(qa,qb)){</p><p><b> case
42、 1: {</b></p><p> qc->coef=qa->coef;</p><p> qc->expn=qa->expn;</p><p> qa=qa->next;</p><p><b> break;</b></p><p><
43、b> }</b></p><p> case 0: { </p><p> qc->coef=qa->coef+qb->coef;</p><p> qc->expn=qa->expn;</p><p> qa=qa->next;</p><p> qb
44、=qb->next;</p><p><b> break;</b></p><p><b> }</b></p><p><b> case -1:{</b></p><p> qc->coef=qb->coef;</p><p&
45、gt; qc->expn=qb->expn;</p><p> qb=qb->next;</p><p><b> break;</b></p><p><b> }</b></p><p><b> }//switch</b></p>
46、<p> if(qc->coef!=0){</p><p> qc->next=hc->next;</p><p> hc->next=qc;</p><p><b> hc=qc;</b></p><p><b> }</b></p>&
47、lt;p> else free(qc);//當(dāng)相加系數(shù)為0時(shí),釋放該結(jié)點(diǎn)</p><p><b> }//while</b></p><p> return headc;</p><p> }//AddPolyn</p><p> int compare(Polyn a,Polyn b){</p&g
48、t;<p><b> if(a&&b){</b></p><p> if(!b||a->expn>b->expn) return 1;</p><p> else if(!a||a->expn<b->expn) return -1;</p><p> else retur
49、n 0;</p><p><b> }</b></p><p> else if(!a&&b) return -1;//a多項(xiàng)式已空,但b多項(xiàng)式非空</p><p> else return 1;//b多項(xiàng)式已空,但a多項(xiàng)式非空</p><p> }//compare</p><
50、;p> 4. Polyn MultiplyPolyn(Polyn pa,Polyn pb) 該函數(shù)同加法一樣,擁有相同的參數(shù)并且同樣將新建立的鏈表pf的指針?lè)祷兀脕?lái)實(shí)現(xiàn)輸出乘法結(jié)果。下面給出關(guān)鍵代碼:</p><p> Polyn MultiplyPolyn(Polyn pa,Polyn pb){</p><p> Polyn hf,pf;</p><p&
51、gt; Polyn qa=pa->next;</p><p> Polyn qb=pb->next;</p><p> hf=(Polyn)malloc(sizeof(struct Polynomial));//建立頭結(jié)點(diǎn)</p><p> hf->next=NULL;</p><p> for(;qa;qa=qa
52、->next){</p><p> for(qb=pb->next;qb;qb=qb->next){</p><p> pf=(Polyn)malloc(sizeof(struct Polynomial));</p><p> pf->coef=qa->coef*qb->coef;</p><p>
53、 pf->expn=qa->expn+qb->expn;</p><p> Insert(pf,hf);//調(diào)用Insert函數(shù)以合并指數(shù)相同的項(xiàng)</p><p><b> } </b></p><p><b> }</b></p><p> return hf;</
54、p><p> }//MultiplyPolyn</p><p> 5. 其它函數(shù)的介紹請(qǐng)參見(jiàn)附錄中詳細(xì)代碼.</p><p><b> 5 調(diào)試及運(yùn)行結(jié)果</b></p><p> 該程序在VC6.0中調(diào)試通過(guò),沒(méi)有錯(cuò)誤和警告,運(yùn)行結(jié)果經(jīng)過(guò)檢驗(yàn)為正確。以下圖5-1即為該程序運(yùn)行結(jié)果效果圖。圖中采用的是計(jì)算多項(xiàng)式4x^
55、5+2x^2+3x和x^10+7x^2的加減乘三種運(yùn)算進(jìn)行演示:</p><p> 算法調(diào)試,運(yùn)行結(jié)果圖 </p><p><b> 6 收獲和體會(huì)</b></p><p> 通過(guò)這次課程設(shè)計(jì)練習(xí),使我更深刻地理解了C語(yǔ)言的精髓-----指針的使用。完成整個(gè)程序設(shè)計(jì)有,對(duì)指針掌握的更加熟練。</p><p> 同
56、時(shí)通過(guò)直接對(duì)鏈表的操作,加深了對(duì)數(shù)據(jù)結(jié)構(gòu)的理解和認(rèn)識(shí)。并在完成課程設(shè)計(jì)的過(guò)程作主動(dòng)查閱了相關(guān)資料,學(xué)到了不少課本上沒(méi)有的技術(shù)知識(shí)。</p><p> 經(jīng)過(guò)這次課程設(shè)計(jì),我深刻認(rèn)識(shí)到算法在程序設(shè)計(jì)中的重要性,一個(gè)完整的程序總是由若干個(gè)函數(shù)構(gòu)成的,這些相應(yīng)的函數(shù)體現(xiàn)了算法的基本思想。</p><p> 編程是一件枯燥乏味工作,但是只要認(rèn)真專(zhuān)研,我們會(huì)從中學(xué)到很多在課本上學(xué)不到或者無(wú)法在課堂
57、上掌握的知識(shí),同時(shí)也能從中感受到編程的樂(lè)趣。興趣是可以培養(yǎng)的,只要堅(jiān)持下去,面對(duì)困難我們總能夠找到解決問(wèn)題的方法。</p><p> 計(jì)算多項(xiàng)式的加、減、乘法運(yùn)算-----該程序雖然不是很大,這次還是由幾位同學(xué)合作才完成這一任務(wù)。在這個(gè)小組中我是組長(zhǎng),通過(guò)分工與合作,使我充分認(rèn)識(shí)到在項(xiàng)目團(tuán)隊(duì)開(kāi)發(fā)過(guò)程中合作的重要性,也更加理解了溝通協(xié)作能力在軟件開(kāi)發(fā)行業(yè)中的重要性。</p><p> 另
58、外也需要提出的是在這次程序設(shè)計(jì)的過(guò)程中,非常感謝老師對(duì)我們的耐心指導(dǎo)。老師在教學(xué)過(guò)程中表現(xiàn)出來(lái)的對(duì)學(xué)術(shù)專(zhuān)研一絲不茍的精神讓我非常有收獲。同樣也是老師的嚴(yán)格要求才使得小組成員能夠順利的完成任務(wù)。</p><p><b> 附錄</b></p><p> #include<stdio.h></p><p> #include<
59、;malloc.h></p><p> /******************************************************/</p><p> typedef struct Polynomial{</p><p> float coef;//系數(shù)</p><p> int expn;//指數(shù)</
60、p><p> struct Polynomial *next;//指向下一個(gè)結(jié)點(diǎn)</p><p> }*Polyn,Polynomial; //Polyn為結(jié)點(diǎn)指針類(lèi)型</p><p> /**********************************************************/</p><
61、;p> void Insert(Polyn p,Polyn h){ </p><p> if(p->coef==0) free(p); //系數(shù)為0的話釋放結(jié)點(diǎn)</p><p> else{//如果系數(shù)不為0</p><p> Polyn q1,q2;</p><p> q1=h;q2=h->n
62、ext;</p><p> while(q2&&p->expn<q2->expn){ //查找插入位置</p><p><b> q1=q2;</b></p><p> q2=q2->next;</p><p><b> }</b></p&g
63、t;<p> if(q2&&p->expn==q2->expn){ //將指數(shù)相同相合并</p><p> q2->coef+=p->coef;</p><p><b> free(p);</b></p><p> if(!q2->coef){
64、//系數(shù)為0的話釋放結(jié)點(diǎn)</p><p> q1->next=q2->next;</p><p><b> free(q2);</b></p><p><b> }</b></p><p><b> }</b></p><p> e
65、lse{ //指數(shù)為新時(shí)將結(jié)點(diǎn)插入</p><p> p->next=q2;</p><p> q1->next=p;</p><p><b> }</b></p><p><b> }</b></p><p&
66、gt;<b> }//Insert</b></p><p> /*********************以下函數(shù)實(shí)現(xiàn)建立一個(gè)多項(xiàng)式****************/</p><p> Polyn CreatePolyn(Polyn head,int m){//建立一個(gè)頭指針為head、項(xiàng)數(shù)為m的一元多項(xiàng)式</p><p> //在主程
67、序初始時(shí),先輸入的多項(xiàng)式中的項(xiàng)數(shù)m、n 在這里為m。主程序中的pa、pb在此為head</p><p> int i;//用來(lái)計(jì)數(shù)</p><p> Polyn p;//定義一個(gè)p鏈表</p><p> p=head=(Polyn)malloc(sizeof(struct Polynomial));</p><p> head->
68、;next=NULL;</p><p> for(i=0;i<m;i++){</p><p> p=(Polyn)malloc(sizeof(struct Polynomial));//建立新結(jié)點(diǎn)以接收數(shù)據(jù)</p><p> printf("請(qǐng)輸入第%d項(xiàng)的系數(shù)與指數(shù):",i+1);</p><p> sca
69、nf("%f %d",&p->coef,&p->expn);</p><p> Insert(p,head); //調(diào)用Insert函數(shù)插入結(jié)點(diǎn)</p><p><b> }</b></p><p> return head;</p><p> }//Creat
70、ePolyn</p><p> /**********************以下函數(shù)實(shí)現(xiàn)多項(xiàng)式的銷(xiāo)毀**********************/</p><p> void DestroyPolyn(Polyn p){//銷(xiāo)毀多項(xiàng)式p</p><p> Polyn q1,q2;</p><p> q1=p->next;<
71、;/p><p> q2=q1->next;</p><p> while(q1->next){</p><p><b> free(q1);</b></p><p> q1=q2;//指針后移</p><p> q2=q2->next;</p><p&g
72、t;<b> }</b></p><p><b> }</b></p><p> /*******************以下函數(shù)實(shí)現(xiàn)顯示輸出多項(xiàng)式**************** ***/</p><p> void PrintPolyn(Polyn P){ </p><p> Poly
73、n q=P->next; </p><p> int flag=1;//項(xiàng)數(shù)計(jì)數(shù)器</p><p> if(!q) { //若多項(xiàng)式為空,輸出0</p><p> putchar('0'); </p><p> printf("\n");</p><p><b&g
74、t; return;</b></p><p><b> } </b></p><p> while (q){</p><p> if(q->coef>0&&flag!=1) putchar('+'); //系數(shù)大于0且不是第一項(xiàng)</p><p> if
75、(q->coef!=1&&q->coef!=-1){//系數(shù)非1或-1的普通情況</p><p> printf("%g",q->coef); </p><p> if(q->expn==1) putchar('X');</p><p> else if(q->expn) pri
76、ntf("X^%d",q->expn);</p><p><b> }</b></p><p><b> else{</b></p><p> if(q->coef==1){</p><p> if(!q->expn) putchar('1
77、9;); </p><p> else if(q->expn==1) putchar('X'); </p><p> else printf("X^%d",q->expn);</p><p><b> }</b></p><p> if(q->coef==-1
78、){</p><p> if(!q->expn) printf("-1"); </p><p> else if(q->expn==1) printf("-X"); </p><p> else printf("-X^%d",q->expn);</p><p>
79、;<b> }</b></p><p><b> }</b></p><p> q=q->next; </p><p><b> flag++;</b></p><p><b> }//while</b></p><p&
80、gt; printf("\n");</p><p> }//PrintPolyn</p><p> /*********************在下面的輔助乘法和加法運(yùn)算****************/</p><p> int compare(Polyn a,Polyn b){</p><p><b>
81、; if(a&&b){</b></p><p> if(!b||a->expn>b->expn) return 1;</p><p> else if(!a||a->expn<b->expn) return -1;</p><p> else return 0;</p><p
82、><b> }</b></p><p> else if(!a&&b) return -1;//a多項(xiàng)式已空,但b多項(xiàng)式非空</p><p> else return 1;//b多項(xiàng)式已空,但a多項(xiàng)式非空</p><p> }//compare</p><p> /************
83、*********以下函數(shù)實(shí)現(xiàn)加法*********************/</p><p> Polyn AddPolyn(Polyn pa,Polyn pb){//求解并建立多項(xiàng)式a+b,返回其頭指針</p><p> Polyn qa=pa->next;</p><p> Polyn qb=pb->next;</p><
84、p> Polyn headc,hc,qc;</p><p> hc=(Polyn)malloc(sizeof(struct Polynomial));//建立頭結(jié)點(diǎn)</p><p> hc->next=NULL;</p><p><b> headc=hc;</b></p><p> while(q
85、a||qb){</p><p> qc=(Polyn)malloc(sizeof(struct Polynomial));</p><p> switch(compare(qa,qb)){</p><p><b> case 1:</b></p><p><b> {</b></p&g
86、t;<p> qc->coef=qa->coef;</p><p> qc->expn=qa->expn;</p><p> qa=qa->next;</p><p><b> break;</b></p><p><b> }</b></
87、p><p><b> case 0:</b></p><p><b> { </b></p><p> qc->coef=qa->coef+qb->coef;</p><p> qc->expn=qa->expn;</p><p> qa=
88、qa->next;</p><p> qb=qb->next;</p><p><b> break;</b></p><p><b> }</b></p><p><b> case -1:</b></p><p><b>
89、; {</b></p><p> qc->coef=qb->coef;</p><p> qc->expn=qb->expn;</p><p> qb=qb->next;</p><p><b> break;</b></p><p><b
90、> } </b></p><p><b> }//switch</b></p><p> if(qc->coef!=0){</p><p> qc->next=hc->next;</p><p> hc->next=qc;</p><p><
91、;b> hc=qc;</b></p><p><b> }</b></p><p> else free(qc);//當(dāng)相加系數(shù)為0時(shí),釋放該結(jié)點(diǎn)</p><p><b> }//while</b></p><p> return headc;</p>&l
92、t;p> }//AddPolyn</p><p> /********************以下函數(shù)實(shí)現(xiàn)減法***********************/</p><p> Polyn SubtractPolyn(Polyn pa,Polyn pb){//求解并建立多項(xiàng)式a+b,返回其頭指針</p><p> Polyn h=pb;</p&g
93、t;<p> Polyn p=pb->next;</p><p><b> Polyn pd;</b></p><p> while(p){ //將pb的系數(shù)取反</p><p> p->coef*=-1;</p><p> p=p->next;</p&
94、gt;<p><b> }</b></p><p> pd=AddPolyn(pa,h);</p><p> for(p=h->next;p;p=p->next) //恢復(fù)pb的系數(shù)</p><p> p->coef*=-1;</p><p> return pd;<
95、/p><p> }//SubtractPolyn</p><p> /*******************以下函數(shù)實(shí)現(xiàn)乘法*********************/</p><p> Polyn MultiplyPolyn(Polyn pa,Polyn pb){//求解并建立多項(xiàng)式a*b,返回其頭指針(該函數(shù)實(shí)現(xiàn)乘法)</p><p>
96、 Polyn hf,pf;</p><p> Polyn qa=pa->next;</p><p> Polyn qb=pb->next;</p><p> hf=(Polyn)malloc(sizeof(struct Polynomial));//建立頭結(jié)點(diǎn)</p><p> hf->next=NULL;<
97、/p><p> for(;qa;qa=qa->next){</p><p> for(qb=pb->next;qb;qb=qb->next){</p><p> pf=(Polyn)malloc(sizeof(struct Polynomial));</p><p> pf->coef=qa->coef*qb
98、->coef;</p><p> pf->expn=qa->expn+qb->expn;</p><p> Insert(pf,hf);//調(diào)用Insert函數(shù)以合并指數(shù)相同的項(xiàng)</p><p><b> }</b></p><p><b> }</b></p&
99、gt;<p> return hf;</p><p> }//MultiplyPolyn</p><p> /********************主函數(shù)實(shí)現(xiàn)顯示與功能選擇**********************/</p><p> int main(){</p><p> int m,n,flag=0;//m、
100、n為分別為a、b兩個(gè)多項(xiàng)式的項(xiàng)數(shù)</p><p> Polyn pa=0,pb=0,pc,pd,pf;//定義各式的頭指針,pa與pb在使用前付初值NULL</p><p> //pc頭指針?biāo)诘亩囗?xiàng)式用在加法中作為結(jié)果,pd用在加法中,pf乘法中</p><p> printf("****************歡迎使用一元多項(xiàng)式運(yùn)算程序*****
101、************\n");</p><p> printf("請(qǐng)輸入第一個(gè)多項(xiàng)式a的項(xiàng)數(shù):");</p><p> scanf("%d",&m);</p><p> pa=CreatePolyn(pa,m);//建立第一個(gè)多項(xiàng)式a</p><p> printf(&qu
102、ot;請(qǐng)輸入第二個(gè)多項(xiàng)式b的項(xiàng)數(shù):");</p><p> scanf("%d",&n);</p><p> pb=CreatePolyn(pb,n);//建立第二個(gè)多項(xiàng)式b</p><p><b> //輸出菜單</b></p><p> printf("****
103、******************************************\n");</p><p> printf("情選擇您要進(jìn)行的操作:\n\t1.輸出多項(xiàng)式a和b\n\t2.建立多項(xiàng)式a+b\n\t3.建立多項(xiàng)式a-b\n");</p><p> printf("\t4.計(jì)算多項(xiàng)式a*b的值\n\t5.退出\n");&
104、lt;/p><p> for(;;flag=0){</p><p> printf("\n");</p><p> scanf("%d",&flag);</p><p> if(flag==1){</p><p> printf("多項(xiàng)式a:")
105、;PrintPolyn(pa);</p><p> printf("多項(xiàng)式b:");PrintPolyn(pb);continue;</p><p><b> }</b></p><p> if(flag==2){</p><p> pc=AddPolyn(pa,pb);</p>
106、<p> printf("多項(xiàng)式a+b:");PrintPolyn(pc);</p><p> DestroyPolyn(pc);continue;</p><p><b> }</b></p><p> if(flag==3){</p><p> pd=SubtractPoly
107、n(pa,pb);</p><p> printf("多項(xiàng)式a-b:");PrintPolyn(pd);</p><p> DestroyPolyn(pd);continue;</p><p><b> }</b></p><p> if(flag==4){</p><p&
108、gt; pf=MultiplyPolyn(pa,pb);</p><p> printf("多項(xiàng)式a*b:");PrintPolyn(pf);</p><p> DestroyPolyn(pf);continue;</p><p><b> }</b></p><p> if(flag==5
109、) break;</p><p> if(flag<1||flag>5) printf("Error!!!\n");continue;</p><p><b> }//for</b></p><p> DestroyPolyn(pa);</p><p> DestroyPolyn(
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告-一元多項(xiàng)式加減運(yùn)算
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告-一元多項(xiàng)式加減運(yùn)算
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)一元多項(xiàng)式的加減法運(yùn)算
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告一元多項(xiàng)式的實(shí)現(xiàn)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)-一元多項(xiàng)式的代數(shù)運(yùn)算
- 數(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ì)---一元多項(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ì)算
- 一元多項(xiàng)式運(yùn)算課程設(shè)計(jì)報(bào)告
- 一元多項(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]
- 數(shù)據(jù)結(jié)構(gòu)線性表多項(xiàng)式加減實(shí)驗(yàn)報(bào)告
- 一元多項(xiàng)式運(yùn)算課程設(shè)計(jì)
- 一元多項(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)一元多項(xiàng)式加法器課程設(shè)計(jì)
評(píng)論
0/150
提交評(píng)論