版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、<p><b> 計(jì)算機(jī)科學(xué)與技術(shù)系</b></p><p><b> 課程設(shè)計(jì)報(bào)告</b></p><p> 2009 ~2010 學(xué)年第 2 學(xué)期</p><p><b> 2010年6月</b></p><p> 題目:(一元多項(xiàng)式的計(jì)算
2、問題)要求能夠按照指數(shù)降序排列建立并輸出一元多項(xiàng)式;能夠完成兩個(gè)一元多項(xiàng)式的相加、相減,并將結(jié)果輸入。</p><p> 一、問題分析和任務(wù)定義</p><p> 1.問題分析 本程序關(guān)鍵點(diǎn)是如何將輸入的兩個(gè)多項(xiàng)式相加、相減操作。</p><p> ①如何將輸入的一元多項(xiàng)式按指數(shù)的降序排列</p><p> ?、谌绾未_定要輸入的多項(xiàng)式
3、的項(xiàng)數(shù);</p><p> ③如何將輸入的兩個(gè)一元多項(xiàng)式顯示出來。</p><p> ?、苋绾螌⑤斎氲膬蓚€(gè)一元多項(xiàng)式進(jìn)行相加操作。</p><p> ⑤如何將輸入的兩個(gè)一元多項(xiàng)式進(jìn)行相減操作。</p><p> 本程序是通過鏈表實(shí)現(xiàn)一元多項(xiàng)式的相加減操作。</p><p><b> 2、任務(wù)定義<
4、;/b></p><p> 此程序需要完成如下的要求:將多項(xiàng)式按照指數(shù)降序排列建立并輸出,將兩個(gè)一元多項(xiàng)式進(jìn)行相加、相減操作,并將結(jié)果輸入。</p><p> a: 輸入多項(xiàng)式的項(xiàng)數(shù)并建立多項(xiàng)式; b: 輸出多項(xiàng)式,輸出形式分別為浮點(diǎn)和整數(shù)序列,序列按指數(shù)升序排列; c: 多項(xiàng)式a和b相加,建立多項(xiàng)式a+b; d: 多項(xiàng)式a和b相減,建立多項(xiàng)式a-b。 e: 多項(xiàng)式的輸出
5、。 </p><p> 二、數(shù)據(jù)結(jié)構(gòu)的選擇和概要設(shè)計(jì):</p><p><b> 數(shù)據(jù)結(jié)構(gòu)的選用 </b></p><p> A:基于鏈表中的節(jié)點(diǎn)可以動(dòng)態(tài)生成的特點(diǎn),以及鏈表可以靈活的添加或刪除節(jié)點(diǎn)的數(shù)據(jù)結(jié)構(gòu),為了實(shí)現(xiàn)任意多項(xiàng)式的加法,減法,因此選擇單鏈表的結(jié)構(gòu)體,它有一個(gè)系數(shù),指數(shù),下一個(gè)指針3個(gè)元屬;例如,圖1中的兩個(gè)線性鏈表分別表
6、示一元多項(xiàng)式和一元多項(xiàng)式。從圖中可見,每個(gè)結(jié)點(diǎn)表示多項(xiàng)式中的一項(xiàng)。</p><p> 圖1 多項(xiàng)式表的單鏈存儲結(jié)構(gòu)</p><p> B:本設(shè)計(jì)使用了以下數(shù)據(jù)結(jié)構(gòu):</p><p> typedef struct { </p><p> float coef; //系數(shù) </p><p> int ex
7、pn; //指數(shù) </p><p> } ElemType;</p><p> typedef struct LNode</p><p><b> {</b></p><p> ElemType data;</p><p> struct LNode *next;</p>
8、<p><b> }LNode;</b></p><p> C:設(shè)計(jì)本程序需用到九個(gè)模塊,用到以下九個(gè)子函數(shù)如下:</p><p> 1、void Menu()//建立菜單</p><p> 2、LNode *InitList() // 創(chuàng)建鏈表</p><p> 3、void ChaLNode(L
9、Node *L,ElemType x)//插入鏈表</p><p> 4、LNode *AddPolyn(LNode *A,LNode *B)//多項(xiàng)式相加</p><p> 5、void Invert(LNode *L)//逆序輸出鏈表</p><p> 6、void Print(LNode *L)//輸出多項(xiàng)式</p><p>
10、7、main()//主程序模塊調(diào)用鏈一元多項(xiàng)式的各種基本操作模塊。</p><p> ?。?)多項(xiàng)式的輸入 先輸入多項(xiàng)式的項(xiàng)數(shù),采用尾插法的方式,輸入多項(xiàng)式中一個(gè)項(xiàng)的系數(shù)和指數(shù),就產(chǎn)生一個(gè)新的節(jié)點(diǎn),建立起它的右指針,并用頭節(jié)點(diǎn)指向它; (3) 兩個(gè)多項(xiàng)式的加法 “和多項(xiàng)式”鏈表中的結(jié)點(diǎn)無需另生成,而應(yīng)該從兩個(gè)多項(xiàng)式的鏈表中摘取。其運(yùn)算規(guī)則如下:</p><p> 假
11、設(shè)指針A和B分別指向多項(xiàng)式a和多項(xiàng)式b中當(dāng)前進(jìn)行比較的某個(gè)結(jié)點(diǎn),則比較兩個(gè)結(jié)點(diǎn)中的指數(shù)項(xiàng),有下列3種情況:</p><p> ?、僦羔楢所指結(jié)點(diǎn)的指數(shù)值<指針B所指結(jié)點(diǎn)的指數(shù)值,則應(yīng)摘取A指針?biāo)附Y(jié)點(diǎn)插入到“和多項(xiàng)式”鏈表中去;</p><p> ②指針A所指結(jié)點(diǎn)的指數(shù)值>指針B所指結(jié)點(diǎn)的指數(shù)值,則應(yīng)摘取指針A所指結(jié)點(diǎn)插入到“和多項(xiàng)式”鏈表中去;</p><
12、;p> ?、壑羔楢所指結(jié)點(diǎn)的指數(shù)值=指針B所指結(jié)點(diǎn)的指數(shù)值,則將兩個(gè)結(jié)點(diǎn)中的系數(shù)相加,</p><p> 若和數(shù)不為零,則修改A所指結(jié)點(diǎn)的系數(shù)值,同時(shí)釋放B所指結(jié)點(diǎn);反之,從多項(xiàng)式A的鏈表中刪除相應(yīng)結(jié)點(diǎn),并釋放指針A和B所指結(jié)點(diǎn)。例如,由圖2中的兩個(gè)鏈表表示的多項(xiàng)式相加得到的“和多項(xiàng)式”鏈表如圖2所示,圖中的長方框表示已被釋放的結(jié)點(diǎn)。</p><p> 圖2 相加得到的和多項(xiàng)式
13、 上述多項(xiàng)式的相加過程歸并兩個(gè)有序表的過程極其類似,不同之處僅在于,后者在比較數(shù)據(jù)元素時(shí)只出現(xiàn)兩種情況。因此,多項(xiàng)式相加的過程也完全可以利用線性鏈表的基本操作來完成。(4)兩個(gè)多項(xiàng)式的減法 兩個(gè)多項(xiàng)式的減法實(shí)現(xiàn),依然調(diào)用的是多項(xiàng)式加法的函數(shù),只是在調(diào)用前,把多項(xiàng)式二的系數(shù)全部變?yōu)橄喾磾?shù)c.coef=-c.coef;,然后多項(xiàng)式一和多項(xiàng)式二相加,這樣就實(shí)現(xiàn)了多項(xiàng)式的相減。流程圖
14、如上。</p><p><b> (5)流程圖 </b></p><p> ?。?)在主函數(shù)中調(diào)用函數(shù)進(jìn)行多項(xiàng)式的輸入、輸出,運(yùn)用選擇語句來選擇加法、減法進(jìn)行操作,流程圖如圖3:</p><p> 圖3 主函數(shù)流程圖</p><p> ?。?)兩個(gè)多項(xiàng)式相加就是兩個(gè)多項(xiàng)式中同指數(shù)項(xiàng)的對應(yīng)系數(shù)相加,若和不為零,則
15、形成“和多形式”中的一項(xiàng),所有指數(shù)不同的項(xiàng)均直接移位至“和多項(xiàng)式”中,流程圖如圖4:</p><p> 圖4 兩個(gè)一元多項(xiàng)式相加</p><p><b> 三、詳細(xì)設(shè)計(jì)和編碼</b></p><p><b> 1、算法思想</b></p><p> ?。?) 輸入并建立多項(xiàng)式——InitLis
16、t()</p><p> (2) 輸入多項(xiàng)式,輸出形式為整數(shù)序列,這個(gè)輸入功能在主函數(shù)實(shí)現(xiàn)(3) 多項(xiàng)式a和b相加,建立多項(xiàng)式a+b,輸出相加的多項(xiàng)式——AddPolyn(A,B)(4) 多項(xiàng)式a和b相減,建立多項(xiàng)式a-b,相減的功能調(diào)用的依然是相加的子函數(shù)</p><p><b> 2、算法描述:</b></p><p><b&
17、gt; A:建立多項(xiàng)式鏈表</b></p><p> 多項(xiàng)式單鏈表可以用尾插法建表來生成。通過從鍵盤按升冪的次序輸入多項(xiàng)式各項(xiàng)的系數(shù)和指數(shù)</p><p> LNode *InitList()//創(chuàng)建鏈表</p><p><b> {</b></p><p><b> LNode *L;&
18、lt;/b></p><p> L=(LNode*)malloc(sizeof(LNode));</p><p> L->next=NULL;</p><p> return(L);</p><p><b> }</b></p><p> void ChaLNode(LNod
19、e *L,ElemType x)//插入鏈表函數(shù)</p><p><b> {</b></p><p> LNode *s,*p;</p><p> s=(LNode*)malloc(sizeof(LNode));</p><p> s->data=x;</p><p><b&
20、gt; p=L;</b></p><p> while(p->next)</p><p> p=p->next;</p><p> s->next=NULL;</p><p> p->next=s;</p><p><b> }</b></p&
21、gt;<p> B: 按照指數(shù)降序排列</p><p> void Invert(LNode *L)//逆序輸出鏈表</p><p> {LNode *p,*q,*r;</p><p> p=L->next;</p><p> q=p->next;</p><p> while(q
22、!=NULL)</p><p> {r=q->next;</p><p> q->next=p;</p><p><b> p=q;</b></p><p><b> q=r;</b></p><p><b> }</b></
23、p><p> L->next->next=NULL;</p><p> L->next=p;</p><p><b> }</b></p><p><b> C:比較</b></p><p> if (a->expn < b->exp
24、n){ pre=p;</p><p> p=p->next;}//如果多項(xiàng)式a的指數(shù)小于多項(xiàng)式b的指數(shù),則指針P后移</p><p> if (a->expn > b->expn){</p><p> pre->next=q; </p><p> pre=pre->next; </p>
25、<p> q=q->next;} //如果多項(xiàng)式a的指數(shù)小于多項(xiàng)式b的指數(shù),q后移</p><p> 這個(gè)模塊主要是比較兩個(gè)多項(xiàng)式的指數(shù)大小</p><p> D、兩個(gè)一元多項(xiàng)式的相加</p><p> while(p&&q)//判斷q,p是不是為空,如果不為空則繼續(xù)往下進(jìn)行</p><p><
26、b> {</b></p><p> a=p->data.expn;b=q->data.expn;</p><p><b> if(a<b)</b></p><p><b> {</b></p><p> pre=p;p=p->next;//p后移&
27、lt;/p><p><b> }</b></p><p><b> if(a==b)</b></p><p><b> {</b></p><p> sum=p->data.coef+q->data.coef;//當(dāng)a,b相等,即指數(shù)相同,則系數(shù)相加</p
28、><p> if(sum!=0)//判斷sum是為0,如果不為0則保留該節(jié)點(diǎn)</p><p><b> {</b></p><p> p->data.coef=sum; B=q;</p><p> pre=p; p=p->next;</p><p> q=q->next;
29、free(B);</p><p><b> }</b></p><p> Else //如果sum為0即系數(shù)為0,則刪除該節(jié)點(diǎn)</p><p><b> {</b></p><p> temp=p;p=p->next;</p><p> pre
30、->next=p;free(temp);</p><p> B=q;q=q->next;free(B);</p><p><b> }</b></p><p><b> }</b></p><p><b> if(a>b)</b></p>
31、<p><b> {</b></p><p> pre->next=q; pre=pre->next; </p><p> q=q->next; }}</p><p> if(q) //如果q中還有剩余,那么把q中剩余的項(xiàng)加到pre->next中</p><p>
32、 pre->next=q;</p><p> return(A);</p><p><b> }</b></p><p> 兩個(gè)一元多項(xiàng)式相加的法則是:兩個(gè)多項(xiàng)式中同指數(shù)項(xiàng)的對應(yīng)系數(shù)相加,若和不為零,則形成“和多項(xiàng)式”中的一項(xiàng);所有指數(shù)不同的項(xiàng)均直接移位至“和多項(xiàng)式”中。如果和為零,則刪除該節(jié)點(diǎn)。</p><p
33、> E:輸出一個(gè)一元多項(xiàng)式</p><p> void Print(LNode *L)//輸出多項(xiàng)式</p><p><b> {</b></p><p><b> LNode *p;</b></p><p> p=L->next;</p><p>
34、while(p->next)</p><p><b> { </b></p><p> printf("(%fx^%d)+",p->data.coef,p->data.expn);</p><p> p=p->next;</p><p><b> }</
35、b></p><p> printf("(%fx^%d)",p->data.coef,p->data.expn);輸出最后一項(xiàng)</p><p><b> }</b></p><p><b> F:一元多項(xiàng)式相減</b></p><p> 兩個(gè)多項(xiàng)式的減法
36、實(shí)現(xiàn),并沒有單獨(dú)的建立一個(gè)子函數(shù)來實(shí)現(xiàn)這個(gè)功能,和多項(xiàng)式的相加一樣,依然調(diào)用的是多項(xiàng)式加法的函數(shù),只是在調(diào)用前,把多項(xiàng)式二的系數(shù)全部變?yōu)橄喾磾?shù)c.coef=-c.coef;,然后多項(xiàng)式一和多項(xiàng)式二相加,這樣就實(shí)現(xiàn)了多項(xiàng)式的相減,開始我建立一個(gè)實(shí)現(xiàn)多項(xiàng)式減法的子函數(shù),最后為了程序的簡潔最后還是改成了調(diào)用多項(xiàng)式相加函數(shù)</p><p> G:逆序輸出鏈表的實(shí)現(xiàn)</p><p> void
37、Invert(LNode *L)//逆序輸出鏈表</p><p> {LNode *p,*q,*r;</p><p> p=L->next;</p><p> q=p->next;</p><p> while(q!=NULL)</p><p> {r=q->next;</p>
38、<p> q->next=p;</p><p><b> p=q;</b></p><p><b> q=r;</b></p><p><b> }</b></p><p> L->next->next=NULL;</p>
39、<p> L->next=p;</p><p><b> }</b></p><p> H、main()主函數(shù)</p><p> void main()</p><p> {LNode *La,*Lb;ElemType c; int a,i,k;</p><p><
40、b> for(;1;){</b></p><p> La=InitList(); Lb= InitList();</p><p><b> Menu();</b></p><p> printf("請選擇功能:");scanf("%d",&k);printf("
41、\n");</p><p> switch(k){</p><p><b> case 1 :</b></p><p> printf("\t\t===========一元多項(xiàng)式相加===========\t\t");</p><p> printf("\n\n\n輸入多項(xiàng)
42、式一的項(xiàng)數(shù):");</p><p> scanf("%d",&a);</p><p><b> if(a<=0){</b></p><p> printf("a不能小于1!\n");</p><p> printf("請從新輸入多項(xiàng)式一的項(xiàng)
43、數(shù):");</p><p> scanf("%d",&a);</p><p><b> }</b></p><p> for(i=0;i<a;i++)</p><p><b> {</b></p><p> printf(
44、"輸入多項(xiàng)式一第%d項(xiàng)系數(shù)和指數(shù):",i+1);</p><p> scanf("%f%d",&c.coef,&c.expn);</p><p> ChaLNode(La,c);</p><p><b> }</b></p><p> printf(&quo
45、t;輸入多項(xiàng)式二的項(xiàng)數(shù):");</p><p> scanf("%d",&a);</p><p><b> if(a<=0){</b></p><p> printf("a不能小于1!\n");</p><p> printf("請從新輸入
46、多項(xiàng)式一的項(xiàng)數(shù):");</p><p> scanf("%d",&a);</p><p><b> }</b></p><p> for(i=0;i<a;i++)</p><p><b> {</b></p><p> p
47、rintf("輸入多項(xiàng)式二第%d項(xiàng)系數(shù)和指數(shù):",i+1);</p><p> scanf("%f%d",&c.coef,&c.expn);</p><p> ChaLNode(Lb,c);</p><p><b> }</b></p><p> print
48、f("多項(xiàng)式一為:");Print(La);printf("\n");</p><p> printf("多項(xiàng)式二為:"); Print(Lb);printf("\n");</p><p> printf("多項(xiàng)式和為:");AddPolyn(La,Lb);</p><
49、;p> Invert(La); Print(La);printf("\n");break;</p><p><b> case 2:</b></p><p> printf("\t\t===========一元多項(xiàng)式相減===========\t\t");</p><p> printf(&
50、quot;\n\n\n輸入多項(xiàng)式一的項(xiàng)數(shù):");</p><p> scanf("%d",&a);</p><p><b> if(a<=0){</b></p><p> printf("a不能小于1!\n");</p><p> printf(&q
51、uot;請從新輸入多項(xiàng)式一的項(xiàng)數(shù):");</p><p> scanf("%d",&a);}</p><p> for(i=0;i<a;i++)</p><p><b> {</b></p><p> printf("輸入多項(xiàng)式一第%d項(xiàng)系數(shù)和指數(shù):"
52、;,i+1);</p><p> scanf("%f%d",&c.coef,&c.expn);</p><p> ChaLNode(La,c);</p><p><b> }</b></p><p> printf("輸入多項(xiàng)式二的項(xiàng)數(shù):");</p&
53、gt;<p> scanf("%d",&a);</p><p><b> if(a<=0){</b></p><p> printf("a不能小于1!\n");</p><p> printf("請從新輸入多項(xiàng)式一的項(xiàng)數(shù):");</p>
54、<p> scanf("%d",&a);</p><p><b> }</b></p><p> for(i=0;i<a;i++)</p><p><b> {</b></p><p> printf("輸入多項(xiàng)式二第%d項(xiàng)系數(shù)和指數(shù)
55、:",i+1);</p><p> scanf("%f%d",&c.coef,&c.expn);</p><p> c.coef=-c.coef;ChaLNode(Lb,c);</p><p><b> }</b></p><p> printf("多項(xiàng)式一
56、為:");</p><p> Print(La);printf("\n");</p><p> printf("多項(xiàng)式二為:"); Print(Lb);printf("\n");</p><p> printf("多項(xiàng)式差為:");</p><p>
57、; AddPolyn(La,Lb);Invert(La);</p><p> Print(La);printf("\n");break;</p><p> case 0: break;}</p><p> if(k==0)break;</p><p> printf("\n\n\n");}}&
58、lt;/p><p> 在主函數(shù)中調(diào)用函數(shù)進(jìn)行多項(xiàng)式的輸入、輸出,運(yùn)用選擇語句來選擇加法、減法進(jìn)行操作</p><p><b> 四:上機(jī)調(diào)試</b></p><p> 調(diào)試中遇到的問題與解決辦法</p><p> 1、語法錯(cuò)誤及修改,編譯中出現(xiàn)的語法問題主要在于子函數(shù)和變量的定義,括號的配對,關(guān)鍵字和函數(shù)名的書寫,以
59、及庫函數(shù)的規(guī)范使用,這些問題都 可以通過提示,對應(yīng)的將其解決</p><p> 2、我通過調(diào)試運(yùn)行后發(fā)現(xiàn),計(jì)算完成打印結(jié)果后馬上就會(huì)退出。程序在運(yùn)行起來以后,沒有一個(gè)可以讓程序暫時(shí)停止的地方,比如要求用戶輸入,或者什么的,程序順序執(zhí)行之后就退出了。 </p><p> 3、運(yùn)行成功后,但是到最后輸出結(jié)果的時(shí)候總是出現(xiàn)錯(cuò)誤。通過對算法的分析發(fā)現(xiàn),算法不正確,修改后最終完成了程序的調(diào)試。&
60、lt;/p><p><b> 五:設(shè)計(jì)體會(huì)</b></p><p> 在開始看到程序題目的時(shí)候以為一元多項(xiàng)式的加減會(huì)很簡單,可是在課程設(shè)計(jì)的過程中發(fā)現(xiàn)編寫程序并不是開始想象的那樣簡單,在這過程中遇到了難題,比如如何逆序輸出鏈表,經(jīng)過認(rèn)真思考和查相關(guān)的資料最后解決了這個(gè)問題,通過這次課程設(shè)計(jì),我感覺到要真正做出一個(gè)程序并不很容易,但只要用心去做,總會(huì)有收獲,特別是當(dāng)我遇
61、到 一個(gè)問題,想辦法去解決,最后終于找到方法時(shí),心里的那份喜悅之情真是難以形容。編寫程序中遇到問題再所難免,應(yīng)耐心探究其中的原因,從出現(xiàn)問題的地方起,并聯(lián)系前后程序,仔細(xì)推敲,逐個(gè)排查。直到最終搞清為止。</p><p> 六、測試結(jié)果及其分析</p><p> 如圖6:一元多項(xiàng)式相加輸入的項(xiàng)數(shù)小于1時(shí)出現(xiàn)的結(jié)果,運(yùn)行結(jié)果如下:</p><p> 圖6一元多項(xiàng)
62、式相加結(jié)果</p><p> 如圖7:一元多項(xiàng)式減法運(yùn)行結(jié)果如下:</p><p> 圖7一元多項(xiàng)式減法運(yùn)行結(jié)果</p><p> 如圖8:當(dāng)選擇0時(shí)退出如圖:</p><p> 圖8:當(dāng)輸入有錯(cuò)誤時(shí)的情況</p><p><b> 七、用戶使用說明</b></p><
63、;p> 根據(jù)提示選擇多項(xiàng)式的加法還是減法1。相加2相減0.退出,比如選1,然后再根據(jù)提示輸入一個(gè)一元多項(xiàng)式的項(xiàng)數(shù)。按enter鍵,按照指數(shù)遞升的順序依次輸入非零項(xiàng),例如4個(gè)非零項(xiàng),要輸入8個(gè)數(shù),有4個(gè)指數(shù),4個(gè)系數(shù)。按enter鍵,然后就會(huì)自動(dòng)輸出剛才輸入的兩個(gè)多項(xiàng)式及相加后的結(jié)果,然后還可以繼續(xù)選擇運(yùn)算。如果退出選擇0.</p><p><b> 八、參考文獻(xiàn)</b></p
64、><p> [1] 王昆侖等編著《數(shù)據(jù)結(jié)構(gòu)與算法》 中國鐵道出版社 2007年6月第1版</p><p> [2] 鄭莉等編著的《C++語言程序設(shè)計(jì)》(第3版)</p><p> [3] 譚浩強(qiáng)著《C程序設(shè)計(jì)》 北京:清華大學(xué)出版社 2005年7月第三版</p><p><b> 附錄:</b></p>
65、<p><b> 源程序</b></p><p> #include "stdio.h"</p><p> #include"malloc.h"</p><p> typedef struct</p><p><b> {</b>&l
66、t;/p><p> float coef;</p><p><b> int expn;</b></p><p> }ElemType;</p><p> typedef struct LNode</p><p><b> {</b></p><p&
67、gt; ElemType data;</p><p> struct LNode *next;</p><p><b> }LNode;</b></p><p> void Menu()</p><p><b> {</b></p><p> printf(&qu
68、ot; →→→→→\n");</p><p> printf(" ↑ 菜單 ↓\n");</p><p> printf(" ←←←←← \n");</p>
69、;<p> printf(" ★◆★◆★◆★◆★◆★◆★◆★◆★◆★◆★◆★◆★◆★◆\n");</p><p> printf(" ◆ ★\n");</p><p> printf(" ★
70、 ◆\n");</p><p> printf(" ◆ ****************一元多項(xiàng)式的運(yùn)算**************** ★\n");</p><p> printf(" ★ +++++ +++++ ◆\n");</p
71、><p> printf(" ★ +++++ 請選擇功能鍵 +++++ ◆\n");</p><p> printf(" ◆ +++ +++ ★\n");</p><p> printf("
72、★ + + ◆\n");</p><p> printf(" ◆ 1===============一元多項(xiàng)式相加================ ★\n");</p><p> printf(" ◆
73、 ★\n");</p><p> printf(" ★ 2===============一元多項(xiàng)式相減================ ◆\n");</p><p> printf(" ◆
74、 ★\n");</p><p> printf(" ★ 0=====================退出==================== ◆\n");</p><p> printf(" ◆
75、 ★\n");</p><p> printf(" ★ ********************************************** ◆\n\n\n");</p><p><b> }</b></p><p> LNode *In
76、itList()//創(chuàng)建鏈表</p><p><b> {</b></p><p><b> LNode *L;</b></p><p> L=(LNode*)malloc(sizeof(LNode));</p><p> L->next=NULL;</p><p&
77、gt; return(L);</p><p><b> }</b></p><p> void ChaLNode(LNode *L,ElemType x)//插入鏈表函數(shù)</p><p><b> {</b></p><p> LNode *s,*p;</p><p&g
78、t; s=(LNode*)malloc(sizeof(LNode));</p><p> s->data=x;</p><p><b> p=L;</b></p><p> while(p->next)</p><p> p=p->next;</p><p> s-&
79、gt;next=NULL;</p><p> p->next=s;</p><p><b> }</b></p><p> LNode *AddPolyn(LNode *A,LNode *B)//多項(xiàng)式相加</p><p><b> {</b></p><p>
80、 LNode *p,*q,*temp,*pre;</p><p> float sum;int a,b;</p><p> p=A->next;</p><p> q=B->next;</p><p><b> pre=A;</b></p><p><b> fr
81、ee(B);</b></p><p> while(p&&q)</p><p><b> {</b></p><p> a=p->data.expn;b=q->data.expn;</p><p><b> if(a<b)</b></p&g
82、t;<p><b> {</b></p><p><b> pre=p;</b></p><p> p=p->next;</p><p><b> }</b></p><p><b> if(a==b)</b></p&g
83、t;<p><b> {</b></p><p> sum=p->data.coef+q->data.coef;</p><p> if(sum!=0)</p><p><b> {</b></p><p> p->data.coef=sum;</p&
84、gt;<p><b> B=q;</b></p><p><b> pre=p;</b></p><p> p=p->next;</p><p> q=q->next;</p><p><b> free(B);</b></p>
85、<p><b> }</b></p><p><b> else</b></p><p><b> {</b></p><p><b> temp=p;</b></p><p> p=p->next;</p>&l
86、t;p> pre->next=p;</p><p> free(temp);</p><p><b> B=q;</b></p><p> q=q->next;</p><p><b> free(B);</b></p><p><b>
87、 }</b></p><p><b> }</b></p><p><b> if(a>b)</b></p><p><b> {</b></p><p> pre->next=q; </p><p> pre=pre
88、->next; </p><p> q=q->next; </p><p><b> }</b></p><p><b> }</b></p><p><b> if(q)</b></p><p> pre->next=q;&
89、lt;/p><p> return(A);</p><p><b> }</b></p><p> void Invert(LNode *L)//逆序輸出鏈表</p><p> {LNode *p,*q,*r;</p><p> p=L->next;</p><p&
90、gt; q=p->next;</p><p> while(q!=NULL)</p><p> {r=q->next;</p><p> q->next=p;</p><p><b> p=q;</b></p><p><b> q=r;</b>
91、</p><p><b> }</b></p><p> L->next->next=NULL;</p><p> L->next=p;</p><p><b> }</b></p><p> void Print(LNode *L)//輸出多項(xiàng)式
92、</p><p><b> {</b></p><p><b> LNode *p;</b></p><p> p=L->next;</p><p> while(p->next)</p><p><b> { </b></p
93、><p> printf("(%fx^%d)+",p->data.coef,p->data.expn);</p><p> p=p->next;</p><p><b> }</b></p><p> printf("(%fx^%d)",p->data.
94、coef,p->data.expn);</p><p><b> }</b></p><p> void main()</p><p><b> {</b></p><p> LNode *La,*Lb;ElemType c;</p><p> int a,i
95、,k;</p><p><b> for(;1;){</b></p><p> La=InitList();</p><p> Lb= InitList();</p><p><b> Menu();</b></p><p> printf("請選擇功能:
96、");</p><p> scanf("%d",&k);</p><p> printf("\n");</p><p> switch(k){</p><p><b> case 1 :</b></p><p> printf(&
97、quot;\t\t===========一元多項(xiàng)式相加===========\t\t");</p><p> printf("\n\n\n輸入多項(xiàng)式一的項(xiàng)數(shù):");</p><p> scanf("%d",&a);</p><p><b> if(a<=0){</b><
98、/p><p> printf("a不能小于1!\n");</p><p> printf("請從新輸入多項(xiàng)式一的項(xiàng)數(shù):");</p><p> scanf("%d",&a);</p><p><b> }</b></p><p&g
99、t; for(i=0;i<a;i++)</p><p><b> {</b></p><p> printf("輸入多項(xiàng)式一第%d項(xiàng)系數(shù)和指數(shù):",i+1);</p><p> scanf("%f%d",&c.coef,&c.expn);</p><p&g
100、t; ChaLNode(La,c);</p><p><b> }</b></p><p> printf("輸入多項(xiàng)式二的項(xiàng)數(shù):");</p><p> scanf("%d",&a);</p><p><b> if(a<=0){</b&g
101、t;</p><p> printf("a不能小于1!\n");</p><p> printf("請從新輸入多項(xiàng)式一的項(xiàng)數(shù):");</p><p> scanf("%d",&a);</p><p><b> }</b></p>&
102、lt;p> for(i=0;i<a;i++)</p><p><b> {</b></p><p> printf("輸入多項(xiàng)式二第%d項(xiàng)系數(shù)和指數(shù):",i+1);</p><p> scanf("%f%d",&c.coef,&c.expn);</p>&
103、lt;p> ChaLNode(Lb,c);</p><p><b> }</b></p><p> printf("多項(xiàng)式一為:");</p><p> Print(La);printf("\n");</p><p> printf("多項(xiàng)式二為:&quo
104、t;);</p><p> Print(Lb);printf("\n");</p><p> printf("多項(xiàng)式和為:");</p><p> AddPolyn(La,Lb);</p><p> Invert(La);</p><p> Print(La);<
105、/p><p> printf("\n");break;</p><p><b> case 2:</b></p><p> printf("\t\t===========一元多項(xiàng)式相減===========\t\t");</p><p> printf("\n\n\n
106、輸入多項(xiàng)式一的項(xiàng)數(shù):");</p><p> scanf("%d",&a);</p><p><b> if(a<=0){</b></p><p> printf("a不能小于1!\n");</p><p> printf("請從新輸入多項(xiàng)
107、式一的項(xiàng)數(shù):");</p><p> scanf("%d",&a);}</p><p> for(i=0;i<a;i++)</p><p><b> {</b></p><p> printf("輸入多項(xiàng)式一第%d項(xiàng)系數(shù)和指數(shù):",i+1);<
108、/p><p> scanf("%f%d",&c.coef,&c.expn);</p><p> ChaLNode(La,c);</p><p><b> }</b></p><p> printf("輸入多項(xiàng)式二的項(xiàng)數(shù):");</p><p&
109、gt; scanf("%d",&a);</p><p><b> if(a<=0){</b></p><p> printf("a不能小于1!\n");</p><p> printf("請從新輸入多項(xiàng)式一的項(xiàng)數(shù):");</p><p>
110、 scanf("%d",&a);</p><p><b> }</b></p><p> for(i=0;i<a;i++)</p><p><b> {</b></p><p> printf("輸入多項(xiàng)式二第%d項(xiàng)系數(shù)和指數(shù):",i+1
111、);</p><p> scanf("%f%d",&c.coef,&c.expn);</p><p> c.coef=-c.coef;</p><p> ChaLNode(Lb,c);</p><p><b> }</b></p><p> print
112、f("多項(xiàng)式一為:");</p><p> Print(La);printf("\n");</p><p> printf("多項(xiàng)式二為:");</p><p> Print(Lb);printf("\n");</p><p> printf("
113、多項(xiàng)式差為:");</p><p> AddPolyn(La,Lb);</p><p> Invert(La);</p><p> Print(La);</p><p> printf("\n");break;</p><p> case 0: break;}</p>
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 一元多項(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ì)算
- 數(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ì)報(bào)告
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告一元多項(xiàng)式的計(jì)算[1]
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)----一元多項(xiàng)式
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)--一元多項(xiàng)式計(jì)算問題(c語言)
- 一元多項(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)式的實(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)課程設(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)式計(jì)算器
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)---一元稀疏多項(xiàng)式計(jì)算器
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)-一元多項(xiàng)式的代數(shù)運(yùn)算
評論
0/150
提交評論