版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p><b> 課程設(shè)計(jì)(論文)</b></p><p> 題 目 名 稱 一元多項(xiàng)式的加法、減法、乘法的實(shí)現(xiàn) </p><p> 課 程 名 稱 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì) </p><p> 學(xué) 生 姓 名 </p>
2、;<p> 學(xué) 號(hào) </p><p> 系 、專 業(yè) 信息工程系、通信工程 </p><p> 指 導(dǎo) 教 師 </p><p> 2012年 12 月 23 日&
3、lt;/p><p><b> 摘 要</b></p><p> 設(shè)有一元多項(xiàng)式Am(x)和Bn(x):</p><p> Am(x)=A0+A1x+A2x2+A3x3+… +Amxm</p><p> Bn(x)=B0+B1x1+B2x2+B3x3+… +Bnxn</p><p> 分別采
4、用順序和鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)實(shí)現(xiàn):M(x)=Am(x)+Bn(x)、M(x)=Am(x)-Bn(x)和M(x)=Am(x)×Bn(x)。并要結(jié)果M(x)中無(wú)重復(fù)階項(xiàng)和無(wú)零系數(shù)項(xiàng),且輸出結(jié)果用升冪和降冪兩種排列情況。</p><p> 關(guān)鍵詞:一元多項(xiàng)式;順序存儲(chǔ);鏈?zhǔn)酱鎯?chǔ);升冪;降冪</p><p><b> 目 錄</b></p><p&
5、gt;<b> 1 問(wèn)題描述1</b></p><p><b> 2 需求分析1</b></p><p><b> 3 概要設(shè)計(jì)1</b></p><p> 3.1抽象數(shù)據(jù)類型定義1</p><p><b> 3.2模塊劃分2</b>&
6、lt;/p><p><b> 4 詳細(xì)設(shè)計(jì)3</b></p><p> 4.1數(shù)據(jù)類型的定義3</p><p> 4.2主要模塊的算法描述3</p><p><b> 5 測(cè)試分析7</b></p><p> 6 課程設(shè)計(jì)總結(jié)10</p><
7、;p><b> 參考文獻(xiàn)10</b></p><p> 附錄(源程序清單)11</p><p><b> 1 問(wèn)題描述</b></p><p> 設(shè)有一元多項(xiàng)式Am(x)和Bn(x):</p><p> Am(x)=A0+A1x+A2x2+A3x3+… +Amxm</p&g
8、t;<p> Bn(x)=B0+B1x1+B2x2+B3x3+… +Bnxn</p><p> 實(shí)現(xiàn)M(x)=Am(x)+Bn(x)、M(x)=Am(x)-Bn(x)、M(x)=Am(x)×Bn(x)。</p><p><b> 要求: </b></p><p> ?。?)分別采用順序和鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)實(shí)現(xiàn);</
9、p><p> ?。?)結(jié)果M(x)中無(wú)重復(fù)階項(xiàng)和無(wú)零系數(shù)項(xiàng);</p><p> ?。?)要求輸出結(jié)果用升冪和降冪兩種排列情況。</p><p><b> 2 需求分析</b></p><p> ?。?)用一維數(shù)組cp1[n1]和cp2[n2]存儲(chǔ)一元多項(xiàng)式Am(x)和Bn(x)的系數(shù),用for循環(huán)來(lái)計(jì)算順序結(jié)構(gòu)中的加法、減
10、法、乘法的結(jié)果。</p><p> (2)用指針*d,*q來(lái)存儲(chǔ)一元多項(xiàng)式的內(nèi)容,再利用指針計(jì)算動(dòng)態(tài)鏈表下一元多項(xiàng)式的加法、減法、乘法的結(jié)果。</p><p> (3)在用降冪升冪兩種排列輸出結(jié)果時(shí),用expn和coef表示一元多項(xiàng)式的系數(shù)和指數(shù),輸出兩種排列結(jié)果。</p><p><b> 3 概要設(shè)計(jì)</b></p>&
11、lt;p> 3.1抽象數(shù)據(jù)類型定義</p><p> (1)順序存儲(chǔ)結(jié)構(gòu)的抽象數(shù)據(jù)類型定義</p><p> int n1,n2;</p><p> 利用一維數(shù)組cp1[n1]和cp2[n2]存儲(chǔ)多項(xiàng)式的系數(shù)</p><p><b> 基本操作:</b></p><p> voi
12、d creatpoly1(double *a,int pt)</p><p> 操作結(jié)果:建立順序結(jié)構(gòu)</p><p> void addpoly(double *a,double *b,double *c)</p><p> 初始條件:一維數(shù)組cp1[n1]和cp2[n2]已建立</p><p> 操作結(jié)果:順序結(jié)構(gòu)相加</p
13、><p> void subpoly(double *a,double *b,double *c)</p><p> 初始條件:一維數(shù)組cp1[n1]和cp2[n2]已建立</p><p> 操作結(jié)果:順序結(jié)構(gòu)相減 </p><p> void mulpoly(double *a,double *b,double *c) </p&g
14、t;<p> 初始條件:一維數(shù)組cp1[n1]和cp2[n2]已建立</p><p> 操作結(jié)果:順序結(jié)構(gòu)相乘</p><p> void ansprint(double *a,int n) </p><p> 初始條件: 一維數(shù)組cp1[n1]和cp2[n2]已建立</p><p> 操作結(jié)果:選用升冪或降冪排列打印
15、出結(jié)果</p><p> ?。?)動(dòng)態(tài)鏈表結(jié)構(gòu)的抽象數(shù)據(jù)類型定義</p><p> typedef struct p_pol{ double coef; int expn; p_pol *next;}MPP;</p><p><b> 基本操作:</b></p><p> MPP * creatlink(MPP *
16、p,int n,int pt)</p><p> 初始條件:動(dòng)態(tài)鏈表已定義</p><p> 操作結(jié)果:構(gòu)造動(dòng)態(tài)鏈表結(jié)構(gòu)</p><p> void addlink(MPP *p1,MPP *p2,MPP *p3)</p><p> 初始條件:動(dòng)態(tài)鏈表已定義</p><p> 操作結(jié)果:動(dòng)態(tài)鏈表相加</
17、p><p> void sublink(MPP *p1,MPP *p2,MPP *p3)</p><p> 初始條件:動(dòng)態(tài)鏈表已定義</p><p> 操作結(jié)果:動(dòng)態(tài)鏈表相減</p><p> void mullink(MPP *p1,MPP *p2,MPP *p3)</p><p> 初始條件:動(dòng)態(tài)鏈表已定義&
18、lt;/p><p> 操作結(jié)果:動(dòng)態(tài)鏈表相乘</p><p> void printlink(MPP * p)</p><p> 初始條件:動(dòng)態(tài)鏈表已定義</p><p> 操作結(jié)果:選用升冪或降冪排列打印結(jié)果</p><p> void deletelink(MPP *p)</p><p&g
19、t; 初始條件:動(dòng)態(tài)鏈表已定義</p><p> 操作結(jié)果:刪除結(jié)點(diǎn)釋放內(nèi)存</p><p><b> 3.2模塊劃分</b></p><p> 本程序包括三個(gè)模塊:</p><p><b> ?。?)主程序模塊</b></p><p> void main()&l
20、t;/p><p><b> {</b></p><p> 輸入第一個(gè)多項(xiàng)式的項(xiàng)數(shù);</p><p> 分別輸入各項(xiàng)的系數(shù)和指數(shù);</p><p> 輸入第二個(gè)多項(xiàng)式的項(xiàng)數(shù);</p><p> 分別輸入各項(xiàng)的系數(shù)和指數(shù);</p><p> 請(qǐng)選擇實(shí)現(xiàn)結(jié)構(gòu):1 順序結(jié)構(gòu)
21、 2 動(dòng)態(tài)鏈表結(jié)構(gòu)</p><p> 選擇操作方式:1 相加 2 相減 3 相乘</p><p><b> }</b></p><p> ?。?)順序存儲(chǔ)結(jié)構(gòu)模塊——實(shí)現(xiàn)順序存儲(chǔ)結(jié)構(gòu)的抽象數(shù)據(jù)類型</p><p> ?。?)動(dòng)態(tài)鏈表結(jié)構(gòu)模塊——實(shí)現(xiàn)動(dòng)態(tài)鏈表結(jié)構(gòu)的抽象數(shù)據(jù)類型</p><p>&
22、lt;b> 4 詳細(xì)設(shè)計(jì)</b></p><p> 4.1數(shù)據(jù)類型的定義</p><p> (1)順序存儲(chǔ)結(jié)構(gòu)類型</p><p> int n1,n2;</p><p> int cp1[n1]; intcp2[n2]</p><p> ?。?)動(dòng)態(tài)鏈表結(jié)構(gòu)類型</p>&l
23、t;p> #define INFEX 10000</p><p> #define INFCO 10000</p><p> double coef;</p><p><b> int expn;</b></p><p> p_pol *next;</p><p> 4.2主要模
24、塊的算法描述</p><p> 該題可畫三個(gè)流程圖:(1)一元多項(xiàng)式的計(jì)算主流程圖;(2)順序存儲(chǔ)結(jié)構(gòu)流程圖;(3)動(dòng)態(tài)鏈表結(jié)構(gòu)流程圖。流程圖如下:</p><p> ?。?)一元多項(xiàng)式的計(jì)算主流程圖:</p><p><b> 如圖4.1所示</b></p><p> 圖4.1一元多項(xiàng)式的計(jì)算主流程圖</p
25、><p> (2)順序存儲(chǔ)結(jié)構(gòu)流程圖</p><p><b> 如圖4.2所示</b></p><p> 圖4.2順序存儲(chǔ)結(jié)構(gòu)流程圖</p><p> ?。?)動(dòng)態(tài)鏈表結(jié)構(gòu)流程圖</p><p><b> 如圖4.3所示</b></p><p>
26、 圖4.3動(dòng)態(tài)鏈表結(jié)構(gòu)流程圖</p><p><b> 5 測(cè)試分析</b></p><p> 測(cè)試數(shù)據(jù)及結(jié)果如下:</p><p><b> 6 課程設(shè)計(jì)總結(jié)</b></p><p> 通過(guò)這次課程設(shè)計(jì)使我了解到編寫的程序不但要拿來(lái)使用,還要讓人看得懂。所以,代碼編寫的風(fēng)格要盡量規(guī)范,清晰
27、。變量要盡量少定義,結(jié)構(gòu)體采用簡(jiǎn)單的。另外,對(duì)指針的使用要小心,盡量在定義的時(shí)候就進(jìn)行初始化,避免出現(xiàn)沒(méi)有被定義的指針。該程序主要實(shí)現(xiàn)了順序結(jié)構(gòu)、動(dòng)態(tài)鏈表結(jié)構(gòu)下的一元多項(xiàng)式的加法、減法、乘法等運(yùn)算功能。同時(shí),也應(yīng)用了升冪和降冪的輸出方法,輸出程序的結(jié)果。雖然此次的程序不是很完備,但是總體還是一個(gè)比較能體現(xiàn)數(shù)據(jù)結(jié)構(gòu)知識(shí)點(diǎn)的程序了,當(dāng)然只是相對(duì)于我這個(gè)初學(xué)者來(lái)說(shuō)。這次設(shè)計(jì)中我發(fā)現(xiàn)了自己的許多不足,如對(duì)指針的機(jī)制掌握的還不是很透徹,有的時(shí)候會(huì)
28、出現(xiàn)指針指向錯(cuò)誤以及空指針的錯(cuò)誤,還有不能很好地分析自己算法地復(fù)雜度以及不能很好地使用控制機(jī)制使自己的程序流暢地運(yùn)行。因此,在今后我會(huì)更加努力地。</p><p> 在此我要非常感謝的是我的指導(dǎo)老師黃同成老師,感謝老師的細(xì)心認(rèn)真的輔導(dǎo),讓我對(duì)數(shù)據(jù)結(jié)構(gòu)這門課程有了更多的了解,也讓我對(duì)這門課程產(chǎn)生了濃厚的興趣。在這次課程設(shè)計(jì)中我又進(jìn)一步地了解了數(shù)據(jù)結(jié)構(gòu)中算法的核心思想的重要性,懂得了一個(gè)程序地好壞關(guān)鍵在于算法是否優(yōu)
29、秀,一個(gè)好的優(yōu)秀的算法可以使我們的程序更加完善,安全性更高以及有更高的效率。</p><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</
30、p><p> [3] 嚴(yán)蔚敏,吳偉民. 數(shù)據(jù)結(jié)構(gòu)(C語(yǔ)言版)[M]. 北京:清華大學(xué)出版社,2002</p><p> [4] 劉振鵬,張曉莉,郝杰.?dāng)?shù)據(jù)結(jié)構(gòu)[M].北京:中國(guó)鐵道出版社,2003</p><p><b> 附錄(源程序清單)</b></p><p> #include<stdio.h>&
31、lt;/p><p> #include<math.h></p><p> #include<stdlib.h></p><p> #define INFEX 10000</p><p> #define INFCO 10000</p><p> typedef struct pol<
32、/p><p><b> {</b></p><p> double coef;</p><p><b> int expn;</b></p><p><b> }MPOL;</b></p><p> MPOL *cp1,*cp2;</p>
33、;<p> //-----順序結(jié)構(gòu)部分-----</p><p> int n1,n2;</p><p> void ansprint(double *a,int n) //打印出結(jié)果</p><p><b> {</b></p><p> int choose;</p><
34、p> puts("請(qǐng)選擇輸出順序:1 升冪 2 降冪:");</p><p> scanf("%d",&choose);</p><p> int i,num;</p><p> if(choose!=2) //升冪打印</p><p><b> {&l
35、t;/b></p><p> if(choose!=1)</p><p> printf("沒(méi)有%d選項(xiàng),系統(tǒng)將默認(rèn)輸出升序:\nM(X)=",choose);</p><p><b> else</b></p><p> printf("M(X)=");</p
36、><p><b> num=0;</b></p><p> for(i=0;i<=n;i++)</p><p> if(fabs(a[i])>1e-8)</p><p><b> {</b></p><p><b> if(num++)</b
37、></p><p> putchar('+');</p><p> printf("%lfX^%d",a[i],i);</p><p><b> }</b></p><p><b> }</b></p><p> else
38、 //降冪打印</p><p><b> {</b></p><p> printf("M(X)=");</p><p><b> num=0;</b></p><p> for(i=n;i>=0;i--)</p><p> if
39、(fabs(a[i])>1e-8)</p><p><b> {</b></p><p><b> if(num++)</b></p><p> putchar('+');</p><p> printf("%lfX^%d",a[i],i);<
40、/p><p><b> }</b></p><p><b> }</b></p><p> putchar(10);</p><p><b> }</b></p><p> void addpoly(double *a,double *b,doub
41、le *c) //順序結(jié)構(gòu)相加</p><p><b> {</b></p><p> int min=(cp1[n1-1].expn>cp2[n2-1].expn?cp2[n2-1].expn:cp1[n1-1].expn);</p><p> int max=(cp1[n1-1].expn<cp2[n2-1].expn
42、?cp2[n2-1].expn:cp1[n1-1].expn);</p><p><b> int i;</b></p><p> for(i=0;i<=min;i++)</p><p> c[i]=a[i]+b[i];</p><p> for(;i<=max;i++)</p><
43、;p> if(cp1[n1-1].expn>cp2[n2-1].expn)</p><p> c[i]=a[i];</p><p><b> else</b></p><p> c[i]=b[i];</p><p> puts("相加結(jié)果為:");</p><
44、p> ansprint(c,max);</p><p><b> }</b></p><p> void subpoly(double *a,double *b,double *c) //順序結(jié)構(gòu)相減</p><p><b> {</b></p><p> int min=(cp
45、1[n1-1].expn>cp2[n2-1].expn?cp2[n2-1].expn:cp1[n1-1].expn);</p><p> int max=(cp1[n1-1].expn<cp2[n2-1].expn?cp2[n2-1].expn:cp1[n1-1].expn);</p><p><b> int i;</b></p>&l
46、t;p> for(i=0;i<=min;i++)</p><p> c[i]=a[i]-b[i];</p><p> for(;i<=max;i++)</p><p> if(cp1[n1-1].expn>cp2[n2-1].expn)</p><p> c[i]=a[i];</p><p
47、><b> else</b></p><p> c[i]=-b[i];</p><p> puts("相減結(jié)果為:");</p><p> ansprint(c,max);</p><p><b> }</b></p><p> void
48、 mulpoly(double *a,double *b,double *c) //順序結(jié)構(gòu)相乘</p><p><b> {</b></p><p> int max=cp1[n1-1].expn+cp2[n2-1].expn+2;</p><p><b> int i,j;</b></p>&l
49、t;p> for(i=0;i<max;i++)</p><p><b> c[i]=0;</b></p><p> for(i=0;i<=cp1[n1-1].expn;i++)</p><p> for(j=0;j<=cp2[n2-1].expn;j++)</p><p> c[i+j]
50、+=a[i]*b[j];</p><p> puts("相乘結(jié)果為:");</p><p> ansprint(c,max-1);</p><p><b> }</b></p><p> void creatpoly1(double *a,int pt) //建立順序結(jié)構(gòu)</p&g
51、t;<p><b> {</b></p><p><b> int i;</b></p><p><b> if(pt==1)</b></p><p><b> {</b></p><p> for(i=0;i<=cp1[n1
52、-1].expn;i++)</p><p><b> a[i]=0;</b></p><p> for(i=0;i<n1;i++)</p><p> a[cp1[i].expn]=cp1[i].coef;</p><p><b> }</b></p><p>&
53、lt;b> else</b></p><p><b> {</b></p><p> for(i=0;i<=cp2[n2-1].expn;i++)</p><p><b> a[i]=0;</b></p><p> for(i=0;i<n2;i++)</
54、p><p> a[cp2[i].expn]=cp2[i].coef;</p><p><b> }</b></p><p><b> }</b></p><p> //-----動(dòng)態(tài)鏈?zhǔn)浇Y(jié)構(gòu)部分-----</p><p> typedef struct p_pol
55、//結(jié)點(diǎn)定義</p><p><b> {</b></p><p> double coef;</p><p><b> int expn;</b></p><p> p_pol *next;</p><p><b> }MPP;</b><
56、;/p><p> MPP * creatlink(MPP *p,int n,int pt) //構(gòu)造動(dòng)態(tài)鏈表結(jié)構(gòu)</p><p><b> {</b></p><p> MPP *d,*q;</p><p><b> int i;</b></p><p> q=(M
57、PP *)malloc(sizeof(MPP));</p><p> if(q==NULL)</p><p><b> exit(0);</b></p><p> q->next=NULL;</p><p> q->coef=INFCO;</p><p> q->exp
58、n=-INFEX;</p><p><b> p=q;</b></p><p> for(i=0;i<n;i++)</p><p><b> {</b></p><p> d=(MPP *)malloc(sizeof(MPP));</p><p> if(d=
59、=NULL)</p><p><b> exit(0);</b></p><p> d->next=NULL;</p><p><b> if(pt==1)</b></p><p><b> {</b></p><p> d->co
60、ef=cp1[i].coef;</p><p> d->expn=cp1[i].expn;</p><p><b> }</b></p><p><b> else</b></p><p><b> {</b></p><p> d-&g
61、t;coef=cp2[i].coef;</p><p> d->expn=cp2[i].expn;</p><p><b> }</b></p><p> q->next=d;</p><p><b> q=d;</b></p><p><b>
62、 }</b></p><p><b> return p;</b></p><p><b> }</b></p><p> void printlink1(MPP * p) //打印結(jié)果Am(x)</p><p><b> {</b></p&g
63、t;<p> int num=0,i=0,choose,count;</p><p> puts("請(qǐng)選擇輸出順序:1 升冪 2 降冪:");</p><p> scanf("%d",&choose);</p><p> MPP *tp=p;</p><p> p=p-&
64、gt;next;</p><p> while(p!=NULL)</p><p><b> {</b></p><p><b> num++;</b></p><p> p=p->next;</p><p><b> }</b></
65、p><p> MPOL *d=new MPOL[num];</p><p> p=tp->next;</p><p> while(p!=NULL)</p><p><b> {</b></p><p> d[i].coef=p->coef;</p><p&g
66、t; d[i].expn=p->expn;</p><p><b> i++;</b></p><p> p=p->next;</p><p><b> }</b></p><p> if(choose==2) //降冪打印</p><p><
67、b> {</b></p><p><b> count=0;</b></p><p> printf("Am(X)=");</p><p> for(i=num-1;i>=0;i--)</p><p><b> {</b></p>
68、<p> if(count++)</p><p> putchar('+');</p><p> printf("%lfX^%d",d[i].coef,d[i].expn);</p><p><b> }</b></p><p><b> }</b&
69、gt;</p><p> else //升冪打印</p><p><b> {</b></p><p> if(choose!=1)</p><p> printf("沒(méi)有%d選項(xiàng),系統(tǒng)將默認(rèn)輸出升序:\nAm(X)=",choose);</p><p><
70、b> else</b></p><p> printf("Am(X)=");</p><p> for(i=0;i<num;i++)</p><p><b> {</b></p><p> if(count++)</p><p> putch
71、ar('+');</p><p> printf("%lfX^%d",d[i].coef,d[i].expn);</p><p><b> }</b></p><p><b> }</b></p><p> putchar(10);</p>
72、<p><b> }</b></p><p> void printlink2(MPP * p) //打印結(jié)果Bn(x)</p><p><b> {</b></p><p> int num=0,i=0,choose,count;</p><p> puts("
73、請(qǐng)選擇輸出順序:1 升冪 2 降冪:");</p><p> scanf("%d",&choose);</p><p> MPP *tp=p;</p><p> p=p->next;</p><p> while(p!=NULL)</p><p><b>
74、 {</b></p><p><b> num++;</b></p><p> p=p->next;</p><p><b> }</b></p><p> MPOL *d=new MPOL[num];</p><p> p=tp->next
75、;</p><p> while(p!=NULL)</p><p><b> {</b></p><p> d[i].coef=p->coef;</p><p> d[i].expn=p->expn;</p><p><b> i++;</b></
76、p><p> p=p->next;</p><p><b> }</b></p><p> if(choose==2) //降冪打印</p><p><b> {</b></p><p><b> count=0;</b></p&g
77、t;<p> printf("Bn(X)=");</p><p> for(i=num-1;i>=0;i--)</p><p><b> {</b></p><p> if(count++)</p><p> putchar('+');</p>
78、<p> printf("%lfX^%d",d[i].coef,d[i].expn);</p><p><b> }</b></p><p><b> }</b></p><p> else //升冪打印</p><p><b> {<
79、;/b></p><p> if(choose!=1)</p><p> printf("沒(méi)有%d選項(xiàng),系統(tǒng)將默認(rèn)輸出升序:\nBn(X)=",choose);</p><p><b> else</b></p><p> printf("Bn(X)=");</
80、p><p> for(i=0;i<num;i++)</p><p><b> {</b></p><p> if(count++)</p><p> putchar('+');</p><p> printf("%lfX^%d",d[i].coef,
81、d[i].expn);</p><p><b> }</b></p><p><b> }</b></p><p> putchar(10);</p><p><b> }</b></p><p> void printlink(MPP * p
82、) //打印結(jié)果M(x)</p><p><b> {</b></p><p> int num=0,i=0,choose,count;</p><p> puts("請(qǐng)選擇輸出順序:1 升冪 2 降冪:");</p><p> scanf("%d",&cho
83、ose);</p><p> MPP *tp=p;</p><p> p=p->next;</p><p> while(p!=NULL)</p><p><b> {</b></p><p><b> num++;</b></p><p&
84、gt; p=p->next;</p><p><b> }</b></p><p> MPOL *d=new MPOL[num];</p><p> p=tp->next;</p><p> while(p!=NULL)</p><p><b> {</b&
85、gt;</p><p> d[i].coef=p->coef;</p><p> d[i].expn=p->expn;</p><p><b> i++;</b></p><p> p=p->next;</p><p><b> }</b><
86、/p><p> if(choose==2) //降冪打印</p><p><b> {</b></p><p><b> count=0;</b></p><p> printf("M(X)=");</p><p> for(i=num-1;i&
87、gt;=0;i--)</p><p><b> {</b></p><p> if(count++)</p><p> putchar('+');</p><p> printf("%lfX^%d",d[i].coef,d[i].expn);</p><p&
88、gt;<b> }</b></p><p><b> }</b></p><p> else //升冪打印</p><p><b> {</b></p><p> if(choose!=1)</p><p> printf("
89、沒(méi)有%d選項(xiàng),系統(tǒng)將默認(rèn)輸出升序:\nM(X)=",choose);</p><p><b> else</b></p><p> printf("M(X)=");</p><p> for(i=0;i<num;i++)</p><p><b> {</b>
90、;</p><p> if(count++)</p><p> putchar('+');</p><p> printf("%lfX^%d",d[i].coef,d[i].expn);</p><p><b> }</b></p><p><b&
91、gt; }</b></p><p> putchar(10);</p><p><b> }</b></p><p> void addlink(MPP *p1,MPP *p2,MPP *p3) //動(dòng)態(tài)鏈表相加</p><p><b> {</b></p>&
92、lt;p> MPP * p,*head;</p><p> p=(MPP *)malloc(sizeof(MPP));</p><p> if(p==NULL)</p><p><b> exit(0);</b></p><p> p->coef=INFCO;</p><p>
93、; p->expn=-INFEX;</p><p> p->next=NULL;</p><p> head=p3=p;</p><p> p1=p1->next;</p><p> p2=p2->next;</p><p> while(p1!=NULL||p2!=NULL)<
94、;/p><p><b> {</b></p><p> if(fabs(head->coef)>1e-8)</p><p><b> {</b></p><p> p=(MPP *)malloc(sizeof(MPP));</p><p> if(p==NU
95、LL)</p><p><b> exit(0);</b></p><p> head->next=p;</p><p><b> head=p;</b></p><p> head->next=NULL;</p><p><b> }<
96、/b></p><p> if(p1==NULL)</p><p><b> {</b></p><p> head->coef=p2->coef;</p><p> head->expn=p2->expn;</p><p> p2=p2->next;
97、</p><p><b> continue;</b></p><p><b> }</b></p><p> if(p2==NULL)</p><p><b> {</b></p><p> head->coef=p1->coef
98、;</p><p> head->expn=p1->expn;</p><p> p1=p1->next;</p><p><b> continue;</b></p><p><b> }</b></p><p> if(p1->expn=
99、=p2->expn)</p><p><b> {</b></p><p> head->coef=p1->coef+p2->coef;</p><p> head->expn=p1->expn;</p><p> p1=p1->next;</p><
100、p> p2=p2->next;</p><p><b> }</b></p><p> else if(p1->expn<p2->expn)</p><p><b> {</b></p><p> head->coef=p1->coef;</
101、p><p> head->expn=p1->expn;</p><p> p1=p1->next;</p><p><b> }</b></p><p><b> else</b></p><p><b> {</b></p
102、><p> head->coef=p2->coef;</p><p> head->expn=p2->expn;</p><p> p2=p2->next;</p><p><b> }</b></p><p><b> }</b><
103、/p><p> puts("相加結(jié)果為:");</p><p> printlink(p3);</p><p><b> }</b></p><p> void sublink(MPP *p1,MPP *p2,MPP *p3) //動(dòng)態(tài)鏈表相減</p><p><b
104、> {</b></p><p> MPP * p,*head;</p><p> p=(MPP *)malloc(sizeof(MPP));</p><p> if(p==NULL)</p><p><b> exit(0);</b></p><p> p->c
105、oef=INFCO;</p><p> p->expn=-INFEX;</p><p> p->next=NULL;</p><p> head=p3=p;</p><p> p1=p1->next;</p><p> p2=p2->next;</p><p>
106、 while(p1!=NULL||p2!=NULL)</p><p><b> {</b></p><p> if(fabs(head->coef)>1e-8)</p><p><b> {</b></p><p> p=(MPP *)malloc(sizeof(MPP));&
107、lt;/p><p> if(p==NULL)</p><p><b> exit(0);</b></p><p> head->next=p;</p><p><b> head=p;</b></p><p> head->next=NULL;</p&
108、gt;<p><b> }</b></p><p> if(p1==NULL)</p><p><b> {</b></p><p> head->coef=-p2->coef;</p><p> head->expn=p2->expn;</p&
109、gt;<p> p2=p2->next;</p><p><b> continue;</b></p><p><b> }</b></p><p> if(p2==NULL)</p><p><b> {</b></p><p
110、> head->coef=p1->coef;</p><p> head->expn=p1->expn;</p><p> p1=p1->next;</p><p><b> continue;</b></p><p><b> }</b></p&
111、gt;<p> if(p1->expn==p2->expn)</p><p><b> {</b></p><p> head->coef=p1->coef-p2->coef;</p><p> head->expn=p1->expn;</p><p>
112、p1=p1->next;</p><p> p2=p2->next;</p><p><b> }</b></p><p> else if(p1->expn<p2->expn)</p><p><b> {</b></p><p>
113、head->coef=p1->coef;</p><p> head->expn=p1->expn;</p><p> p1=p1->next;</p><p><b> }</b></p><p><b> else</b></p><p&
114、gt;<b> {</b></p><p> head->coef=-p2->coef;</p><p> head->expn=p2->expn;</p><p> p2=p2->next;</p><p><b> }</b></p><
115、;p><b> }</b></p><p> puts("相減結(jié)果為:");</p><p> printlink(p3);</p><p><b> }</b></p><p> void mullink(MPP *p1,MPP *p2,MPP *p3) //動(dòng)
116、態(tài)鏈表相乘</p><p><b> {</b></p><p> MPP *p,*head,*d,*tp;</p><p><b> int i,j;</b></p><p> p=(MPP *)malloc(sizeof(MPP));</p><p> if(p
117、==NULL)</p><p><b> exit(0);</b></p><p> p->coef=INFCO;</p><p> p->expn=-INFEX;</p><p> p->next=NULL;</p><p> tp=head=p3=p;</p&
118、gt;<p> p=(MPP *)malloc(sizeof(MPP));</p><p> if(p==NULL)</p><p><b> exit(0);</b></p><p> p->coef=INFCO;</p><p> p->expn=INFEX;</p>
119、<p> p->next=NULL;</p><p> tp->next=p;</p><p> for(i=0;i<n1;i++)</p><p><b> {</b></p><p> p1=p1->next;</p><p><b>
120、 d=p2;</b></p><p> for(j=0;j<n2;j++)</p><p><b> {</b></p><p> d=d->next;</p><p> p=(MPP *)malloc(sizeof(MPP));</p><p> if(p==N
121、ULL)</p><p><b> exit(0);</b></p><p> p->next=NULL;</p><p> p->coef=p1->coef*d->coef;</p><p> p->expn=p1->expn+d->expn;</p>&
122、lt;p><b> tp=p3;</b></p><p> while(tp->next!=NULL)</p><p><b> {</b></p><p> if(tp->expn==p->expn)</p><p><b> {</b>&l
123、t;/p><p> tp->coef+=p->coef;</p><p><b> free(p);</b></p><p><b> break;</b></p><p><b> }</b></p><p> if(tp->e
124、xpn<p->expn&&tp->next->expn>p->expn)</p><p><b> {</b></p><p> p->next=tp->next;</p><p> tp->next=p;</p><p><b>
125、break;</b></p><p><b> }</b></p><p> tp=tp->next;</p><p><b> }</b></p><p><b> }</b></p><p><b> }<
126、/b></p><p><b> tp=p3;</b></p><p> while(tp->next!=NULL)</p><p><b> {</b></p><p> if(tp->next->expn==INFEX)</p><p>&
127、lt;b> {</b></p><p> free(tp->next);</p><p> tp->next=NULL;</p><p><b> break;</b></p><p><b> }</b></p><p> tp=t
128、p->next;</p><p><b> }</b></p><p> puts("相乘結(jié)果為:");</p><p> printlink(p3);</p><p><b> }</b></p><p> void deletelink
129、(MPP *p) //刪除結(jié)點(diǎn)釋放內(nèi)存</p><p><b> {</b></p><p><b> MPP *d;</b></p><p> while(p!=NULL)</p><p><b> {</b></p><p><
130、b> d=p;</b></p><p> p=p->next;</p><p><b> free(d);</b></p><p><b> }</b></p><p><b> }</b></p><p> int
131、main()</p><p><b> {</b></p><p> int i,choose,choose2;</p><p> puts("輸入第一個(gè)多項(xiàng)式的項(xiàng)數(shù):");</p><p> scanf("%d",&n1);</p><p>
132、; cp1=(MPOL *)malloc(n1*sizeof(MPOL));</p><p> puts("分別輸入各項(xiàng)的系數(shù)和指數(shù):");</p><p> for(i=0;i<n1;i++)</p><p> scanf("%lf%d",&cp1[i].coef,&cp1[i].expn);&
133、lt;/p><p> puts("輸入第二個(gè)多項(xiàng)式的項(xiàng)數(shù):");</p><p> scanf("%d",&n2);</p><p> cp2=(MPOL *)malloc(n2*sizeof(MPOL));</p><p> puts("分別輸入各項(xiàng)的系數(shù)和指數(shù):");
134、</p><p> for(i=0;i<n2;i++)</p><p> scanf("%lf%d",&cp2[i].coef,&cp2[i].expn);</p><p> puts("請(qǐng)選擇實(shí)現(xiàn)結(jié)構(gòu):1 順序結(jié)構(gòu) 2 動(dòng)態(tài)鏈表結(jié)構(gòu)");</p><p> scanf(&
135、quot;%d",&choose);</p><p> double *c1,*c2,*c3;</p><p> MPP *p1=NULL,*p2=NULL,*p3=NULL;</p><p> switch(choose)</p><p><b> {</b></p><p
136、><b> case 1:</b></p><p> c1=(double *)malloc((cp1[n1-1].expn+1)*sizeof(double));</p><p> c2=(double *)malloc((cp1[n2-1].expn+1)*sizeof(double));</p><p> creatpoly
137、1(c1,1);</p><p> creatpoly1(c2,2);</p><p><b> break;</b></p><p><b> case 2:</b></p><p> p1=creatlink(p1,n1,1);</p><p> p2=crea
138、tlink(p2,n2,2);</p><p> printlink1(p1);</p><p> printlink2(p2);</p><p><b> break;</b></p><p><b> default:</b></p><p> printf(&
139、quot;沒(méi)有%d選項(xiàng)系統(tǒng)將自動(dòng)調(diào)用默認(rèn)結(jié)構(gòu)(動(dòng)態(tài)鏈表)!\n",choose);</p><p><b> choose=2;</b></p><p> p1=creatlink(p1,n1,1);</p><p> p2=creatlink(p2,n2,2);</p><p><b> }
140、</b></p><p> puts("選擇操作方式:1 相加 2 相減 3 相乘");</p><p> scanf("%d",&choose2);</p><p> c3=(double*)malloc((cp1[n1-1].expn+cp2[n2-1].expn+2)*sizeof(double
141、));</p><p> if(choose==1)</p><p><b> {</b></p><p> switch(choose2)</p><p><b> {</b></p><p><b> case 1:</b></p&
142、gt;<p> addpoly(c1,c2,c3);</p><p><b> break;</b></p><p><b> case 2:</b></p><p> subpoly(c1,c2,c3);</p><p><b> break;</b>
143、</p><p><b> case 3:</b></p><p> mulpoly(c1,c2,c3);</p><p><b> break;</b></p><p><b> default:</b></p><p> printf(&q
144、uot;沒(méi)有%d選項(xiàng)系統(tǒng)將自動(dòng)調(diào)用默認(rèn)操作(相加)!\n",choose);</p><p> addpoly(c1,c2,c3);</p><p><b> }</b></p><p><b> }</b></p><p><b> else</b><
145、/p><p><b> {</b></p><p> switch(choose2)</p><p><b> {</b></p><p><b> case 1:</b></p><p> addlink(p1,p2,p3);</p>
146、<p><b> break;</b></p><p><b> case 2:</b></p><p> sublink(p1,p2,p3);</p><p><b> break;</b></p><p><b> case 3:</
147、b></p><p> mullink(p1,p2,p3);</p><p><b> break;</b></p><p><b> default:</b></p><p> printf("沒(méi)有%d選項(xiàng)系統(tǒng)將自動(dòng)調(diào)用默認(rèn)操作(相加)!\n",choose);&
148、lt;/p><p> choose2=1;</p><p> addlink(p1,p2,p3);</p><p><b> }</b></p><p> deletelink(p1);</p><p> deletelink(p2);</p><p> dele
149、telink(p3);</p><p><b> }</b></p><p> free(cp1);</p><p> free(cp2);</p><p> if(choose!=2)</p><p><b> {</b></p><p>
150、<b> free(c1);</b></p><p><b> free(c2);</b></p><p><b> free(c3);</b></p><p><b> }</b></p><p> system("pause&quo
溫馨提示
- 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ì)_一元多項(xiàng)式的加法、減法、乘法的實(shí)現(xiàn)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)---一元多項(xiàng)式的加法、減法、乘法的實(shí)現(xiàn)
- 一元多項(xiàng)式的加法、減法、乘法的實(shí)現(xiàn)數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)
- 數(shù)據(jù)結(jié)構(gòu)一元多項(xiàng)式加法器課程設(shè)計(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)式的實(shí)現(xiàn)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)一元多項(xiàng)式的加減法運(yùn)算
- 一元多項(xiàng)式計(jì)算(數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì))
- 算法分析與設(shè)計(jì)的課程設(shè)計(jì)(一元多項(xiàng)式的加法、減法、乘法的實(shí)現(xiàn))
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)---一元多項(xiàng)式計(jì)算
- 一元多項(xiàng)式的計(jì)算數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)-一元多項(xiàng)式的代數(shù)運(yùn)算
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告一元多項(xiàng)式的計(jì)算
- 順序鏈?zhǔn)揭辉囗?xiàng)式加法、減法、乘法運(yùn)算的實(shí)現(xiàn)
- 數(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)一元多項(xiàng)式的實(shí)現(xiàn)
- 一元多項(xiàng)式的計(jì)算數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)-一元多項(xiàng)式的表示及相加
評(píng)論
0/150
提交評(píng)論