版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、<p><b> 課程名稱:數(shù)據(jù)結構</b></p><p> 題 目:一元多項式計算</p><p> 學 院 信息工程學院 </p><p> 學生姓名 </p><p>
2、學 號 *** </p><p> 專業(yè)層次 2012級本科 </p><p> 班 級 本科信息管理 </p><p> 任課教師
3、 </p><p><b> 年 月 日</b></p><p> 一、課程設計題目分析</p><p> 本課程設計要求利用C語言或C++編寫,本程序?qū)崿F(xiàn)了一元多項式的加法、減法、乘法、除法運算等功能。</p><p><b> 二、設計思路</b></p&
4、gt;<p> 本程序采用C語言來完成課程設計。</p><p> 1、首先,利用順序存儲結構來構造兩個存儲多項式A(x)和 B(x)的結構。</p><p> 2、然后把輸入,加,減,乘,除運算分成五個主要的模塊:實現(xiàn)多項式輸入模塊、實現(xiàn)加法的模塊、實現(xiàn)減法的模塊、實現(xiàn)乘法的模塊、實現(xiàn)除法的模塊。</p><p> 3、然后各個模塊里面還要分
5、成若干種情況來考慮并通過函數(shù)的嵌套調(diào)用來實現(xiàn)其功能,盡量減少程序運行時錯誤的出現(xiàn)。 </p><p> 4、最后編寫main()主函數(shù)以實現(xiàn)對多項式輸入輸出以及加、減、乘、除,調(diào)試程序并將不足的地方加以修改。</p><p><b> 三、算法分析</b></p><p><b> 1、相關函數(shù)說明:</b><
6、/p><p> (1)定義數(shù)據(jù)結構類型為線性表的鏈式存儲結構類型變量</p><p> typedef struct Polynomial{}</p><p><b> (2)其他功能函數(shù)</b></p><p> 插入函數(shù)void Insert(Polyn p,Polyn h)</p><p&g
7、t; 比較函數(shù)int compare(Polyn a,Polyn b)</p><p> 建立一元多項式函數(shù)Polyn Create(Polyn head,int m)</p><p> 求解并建立多項式a+b,Polyn Add(Polyn pa,Polyn pb)</p><p> 求解并建立多項式a-b,Polyn Subtract(Polyn pa,
8、Polyn pb)</p><p> 求解并建立多項式a*b,Polyn Multiply(Polyn pa,Polyn pb)</p><p> 求解并建立多項式a/b,void Device(Polyn pa,Polyn pb)</p><p> 輸出函數(shù)輸出多項式,void Print(Polyn P)</p><p> 銷毀多
9、項式函數(shù)釋放內(nèi)存,void Destroy(Polyn p)</p><p> 主函數(shù),void main()</p><p> 2、主程序的流程基函數(shù)調(diào)用說明 </p><p> (1)typedef struct Polynomial</p><p><b> {</b></p>&l
10、t;p> float coef;</p><p><b> int expn;</b></p><p> struct Polynomial *next;</p><p> } *Polyn,Polynomial; </p><p> 在這個結構體變量中coef表示每一項前的系數(shù),ex
11、pn表示每一項的指數(shù),polyn為結點指針類型,屬于抽象數(shù)據(jù)類型通常由用戶自行定義,Polynomial表示的是結構體中的數(shù)據(jù)對象名。</p><p> (2)當用戶輸入兩個一元多項式的系數(shù)和指數(shù)后,建立鏈表,存儲這兩個多項式,主要說明如下: </p><p> Polyn CreatePolyn(Polyn head,int m)建立一個頭指針為head、項數(shù)為m的一元多項式 <
12、;/p><p> p=head=(Polyn)malloc(sizeof(struct Polynomial));為輸入的多項式申請足夠的存儲空間 </p><p> p=(Polyn)malloc(sizeof(struct Polynomial));建立新結點以接收數(shù)據(jù) </p><p> Insert(p,head); 調(diào)用Insert函數(shù)插入結點 &l
13、t;/p><p> 這就建立一元多項式的關鍵步驟</p><p> (3)由于多項式的系數(shù)和指數(shù)都是隨即輸入的,所以根據(jù)要求需要對多項式按指數(shù)進行降冪排序。在這個程序模塊中,使用鏈表,根據(jù)對指數(shù)大小的比較,對各種情況進行處理,此處由于反復使用指針對各個結點進行定位,找到合適的位置再利用void Insert(Polyn p,Polyn h)進行插入操作。<
14、;/p><p> (4)加、減、乘、除、的算法實現(xiàn): </p><p> 在該程序中,最關鍵的一步是實現(xiàn)四則運算和輸出,由于加減算法原則是一樣,減法可通過系數(shù)為負的加法實現(xiàn);對于乘除算法的大致流程都是:首先建立多項式a*b,a/b,然后使用鏈表存儲所求出的乘積,商和余數(shù)。這就實現(xiàn)了多項式計算模塊的主要功能。</p><p> (5)另一個子函數(shù)是輸出函數(shù)
15、 PrintPolyn();</p><p> 輸出最終的結果,算法是將最后計算合并的鏈表逐個結點依次輸出,便得到整鏈表,也就是最后的計算式計算結果。由于考慮各個結點的指數(shù)情況不同,分別進行了判斷處理。</p><p><b> 四、程序新點</b></p><p> 通過多次寫程序,發(fā)現(xiàn)程序在控制臺運行時總是黑色的,本次寫程序
16、就想著改變一下,于是經(jīng)過查資料利用system("Color E0");函數(shù)可以解決,這里“E0”,E是控制臺背景顏色,0是控制臺輸出字體顏色。</p><p> 五、設計中遇到的問題及解決辦法 </p><p> 首先是,由于此次課程設計里使用指針使用比較多,自己在指針多的時候易腦子混亂出錯,對于此問題我是采取比較笨的辦法在稿紙上寫明白后開始進行代碼編寫。其次是,
17、在寫除法模塊時比較復雜,自己通過查資料最后成功寫出除法模塊功能。最后是,前期分析不足開始急于寫代碼,中途出現(xiàn)各種問題,算是給自己以后設計時的一個經(jīng)驗吧。 </p><p> 六、測試(程序截圖)</p><p> 1.數(shù)據(jù)輸入及主菜單</p><p> 2.加法和減法模塊 </p><p><b> 3.乘法和除法模塊<
18、;/b></p><p><b> 七、總結</b></p><p> 通過本次應用C語言設計一元多項式基本計算程序,使我更加鞏固了C語言程序設計的知識,以前對指針這一點使用是比較模糊,現(xiàn)在通過此次課程設計對指針理解的比較深刻了。而且對于數(shù)據(jù)結構的相關算法和函數(shù)的調(diào)用方面知識的加深。本次的課程設計,一方面提高了自己獨立思考處理問題的能力;另一方面使自己再設計
19、開發(fā)程序方面有了一定的小經(jīng)驗和想法,對自己以后學習其他語言程序設計奠定了一定的基礎。</p><p> 八、指導老師評語及成績</p><p> 附錄:(課程設計代碼)</p><p> #include<stdio.h></p><p> #include<malloc.h></p><p
20、> #include<stdlib.h></p><p> typedef struct Polynomial</p><p><b> {</b></p><p> float coef;</p><p><b> int expn;</b></p>&l
21、t;p> struct Polynomial *next;</p><p> } *Polyn,Polynomial; //Polyn為結點指針類型</p><p> void Insert(Polyn p,Polyn h)</p><p><b> { </b></p><
22、p> if(p->coef==0) free(p); //系數(shù)為0的話釋放結點</p><p><b> else</b></p><p><b> {</b></p><p> Polyn q1,q2;</p><p> q1=h;q2=h->next;&l
23、t;/p><p> while(q2&&p->expn<q2->expn)//查找插入位置</p><p> { q1=q2; q2=q2->next; }</p><p> if(q2&&p->expn==q2->expn)//將指數(shù)相同相合并</p><p><
24、;b> { </b></p><p> q2->coef+=p->coef;</p><p><b> free(p);</b></p><p> if(!q2->coef)//系數(shù)為0的話釋放結點</p><p> { q1->next=q2->nex
25、t; free(q2); } </p><p><b> }</b></p><p><b> else</b></p><p> { p->next=q2; q1->next=p; }//指數(shù)為新時將結點插入 </p><p><b> }</b
26、></p><p><b> }</b></p><p> //建立一個頭指針為head、項數(shù)為m的一元多項式</p><p> Polyn Create(Polyn head,int m)</p><p><b> {</b></p><p><b>
27、; int i;</b></p><p><b> Polyn p;</b></p><p> p=head=(Polyn)malloc(sizeof(struct Polynomial));</p><p> head->next=NULL;</p><p> for(i=0;i<m;
28、i++)</p><p><b> {</b></p><p> p=(Polyn)malloc(sizeof(struct Polynomial));//建立新結點以接收數(shù)據(jù)</p><p> printf("請輸入第%d項的系數(shù)與指數(shù):",i+1);</p><p> scanf(&quo
29、t;%f %d",&p->coef,&p->expn);</p><p> Insert(p,head); //調(diào)用Insert函數(shù)插入結點</p><p><b> }</b></p><p> return head;</p><p><b> }</
30、b></p><p><b> //銷毀多項式p</b></p><p> void Destroy(Polyn p)</p><p><b> {</b></p><p> Polyn q1,q2;</p><p> q1=p->next;</p
31、><p> q2=q1->next;</p><p> while(q1->next)</p><p><b> {</b></p><p><b> free(q1);</b></p><p> q1=q2;//指針后移</p><p&
32、gt; q2=q2->next;</p><p><b> }</b></p><p><b> }</b></p><p><b> //輸出多項式p</b></p><p> int Print(Polyn P)</p><p>&l
33、t;b> { </b></p><p> Polyn q=P->next; </p><p> int flag=1;//項數(shù)計數(shù)器</p><p> if(!q) //若多項式為空,輸出0</p><p><b> { </b></p><p> putcha
34、r('0'); </p><p> printf("\n");</p><p><b> return;</b></p><p><b> } </b></p><p><b> while(q)</b></p>&
35、lt;p><b> {</b></p><p> if(q->coef>0&&flag!=1) putchar('+'); //系數(shù)大于0且不是第一項</p><p> if(q->coef!=1&&q->coef!=-1)//系數(shù)非1或-1的普通情況</p><p
36、><b> {</b></p><p> printf("%g",q->coef); </p><p> if(q->expn==1) putchar('X');</p><p> else if(q->expn) printf("X^%d",q->e
37、xpn);</p><p><b> }</b></p><p><b> else</b></p><p><b> {</b></p><p> if(q->coef==1)</p><p><b> {</b>
38、</p><p> if(!q->expn) putchar('1'); </p><p> else if(q->expn==1) putchar('X'); </p><p> else printf("X^%d",q->expn);</p><p><b&
39、gt; }</b></p><p> if(q->coef==-1)</p><p><b> {</b></p><p> if(!q->expn) printf("-1"); </p><p> else if(q->expn==1) printf(&quo
40、t;-X"); </p><p> else printf("-X^%d",q->expn);</p><p><b> }</b></p><p><b> }</b></p><p> q=q->next; </p><p&g
41、t;<b> flag++;</b></p><p><b> }</b></p><p> printf("\n");</p><p><b> }</b></p><p> int compare(Polyn a,Polyn b)</p&
42、gt;<p><b> {</b></p><p><b> if(a&&b)</b></p><p><b> {</b></p><p> if(!b||a->expn>b->expn) return 1;</p><p&
43、gt; else if(!a||a->expn<b->expn) return -1;</p><p> else return 0;</p><p><b> }</b></p><p> else if(!a&&b) return -1;//a多項式已空,但b多項式非空</p><
44、;p> else return 1;//b多項式已空,但a多項式非空</p><p><b> }</b></p><p> //求解并建立多項式a+b,返回其頭指針</p><p> Polyn Add(Polyn pa,Polyn pb)</p><p><b> {</b>&l
45、t;/p><p> Polyn qa=pa->next;</p><p> Polyn qb=pb->next;</p><p> Polyn headc,hc,qc;</p><p> hc=(Polyn)malloc(sizeof(struct Polynomial));//建立頭結點</p><p&g
46、t; hc->next=NULL;</p><p><b> headc=hc;</b></p><p> while(qa||qb){</p><p> qc=(Polyn)malloc(sizeof(struct Polynomial));</p><p> switch(compare(qa,qb)
47、)</p><p><b> {</b></p><p><b> case 1:</b></p><p> qc->coef=qa->coef;</p><p> qc->expn=qa->expn;</p><p> qa=qa->
48、next;</p><p><b> break;</b></p><p><b> case 0:</b></p><p> qc->coef=qa->coef+qb->coef;</p><p> qc->expn=qa->expn;</p>
49、<p> qa=qa->next;</p><p> qb=qb->next;</p><p><b> break;</b></p><p><b> case -1:</b></p><p> qc->coef=qb->coef;</p>
50、<p> qc->expn=qb->expn;</p><p> qb=qb->next;</p><p><b> break;</b></p><p><b> }</b></p><p> if(qc->coef!=0)</p>&l
51、t;p><b> {</b></p><p> qc->next=hc->next;</p><p> hc->next=qc;</p><p><b> hc=qc;</b></p><p><b> }</b></p><
52、;p> else free(qc);//當相加系數(shù)為0時,釋放該結點</p><p><b> }</b></p><p> return headc;</p><p><b> }</b></p><p> //求解并建立多項式a-b,返回其頭指針</p><p
53、> Polyn Subtract(Polyn pa,Polyn pb)</p><p><b> {</b></p><p> Polyn h=pb;</p><p> Polyn p=pb->next;</p><p><b> Polyn pd;</b></p>
54、<p> while(p)//將pb的系數(shù)取反</p><p> { p->coef*=-1; p=p->next; }</p><p> pd=Add(pa,h);</p><p> for(p=h->next;p;p=p->next) //恢復pb的系數(shù)</p><p> p-&g
55、t;coef*=-1;</p><p> return pd;</p><p><b> }</b></p><p> //求解并建立多項式a*b,返回其頭指針</p><p> Polyn Multiply(Polyn pa,Polyn pb)</p><p><b> {&
56、lt;/b></p><p> Polyn hf,pf;</p><p> Polyn qa=pa->next;</p><p> Polyn qb=pb->next;</p><p> hf=(Polyn)malloc(sizeof(struct Polynomial));//建立頭結點</p>&l
57、t;p> hf->next=NULL;</p><p> for(;qa;qa=qa->next)</p><p><b> {</b></p><p> for(qb=pb->next;qb;qb=qb->next)</p><p><b> {</b>&l
58、t;/p><p> pf=(Polyn)malloc(sizeof(struct Polynomial));</p><p> pf->coef=qa->coef*qb->coef;</p><p> pf->expn=qa->expn+qb->expn;</p><p> Insert(pf,hf);
59、//調(diào)用Insert函數(shù)以合并指數(shù)相同的項</p><p><b> }</b></p><p><b> }</b></p><p> return hf;</p><p><b> }</b></p><p> //求解并建立多項式a/b,
60、返回其頭指針</p><p> void Device(Polyn pa,Polyn pb)</p><p><b> {</b></p><p> Polyn hf,pf,temp1,temp2;</p><p> Polyn qa=pa->next;</p><p> Poly
61、n qb=pb->next;</p><p> hf=(Polyn)malloc(sizeof(struct Polynomial));//建立頭結點,存儲商</p><p> hf->next=NULL;</p><p> pf=(Polyn)malloc(sizeof(struct Polynomial));//建立頭結點,存儲余數(shù)</p
62、><p> pf->next=NULL;</p><p> temp1=(Polyn)malloc(sizeof(struct Polynomial));</p><p> temp1->next=NULL;</p><p> temp2=(Polyn)malloc(sizeof(struct Polynomial));<
63、;/p><p> temp2->next=NULL;</p><p> temp1=Add(temp1,pa);</p><p> while(qa!=NULL&&qa->expn>=qb->expn)</p><p><b> {</b></p><p&g
64、t; temp2->next=(Polyn)malloc(sizeof(struct Polynomial));</p><p> temp2->next->coef=(qa->coef)/(qb->coef);</p><p> temp2->next->expn=(qa->expn)-(qb->expn);</p>
65、<p> Insert(temp2->next,hf);</p><p> pa=Subtract(pa,Multiply(pb,temp2));</p><p> qa=pa->next;</p><p> temp2->next=NULL;</p><p><b> }</b>
66、;</p><p> pf=Subtract(temp1,Multiply(hf,pb));</p><p><b> pb=temp1;</b></p><p> printf("商是:");</p><p> Print(hf);</p><p> printf(
67、"余數(shù)是:");</p><p> Print(pf);</p><p><b> }</b></p><p> void main()</p><p><b> {</b></p><p> int choose=1;</p>&
68、lt;p> int m,n,flag=0;</p><p> system("Color E0");</p><p> Polyn pa=0,pb=0,pc,pd,pf;//定義各式的頭指針,pa與pb在使用前付初值NULL</p><p> printf("請輸入A(x)的項數(shù):");</p>&
69、lt;p> scanf("%d",&m);</p><p> printf("\n");</p><p> pa=Create(pa,m);//建立多項式A</p><p> printf("\n");</p><p> printf("請輸入B(x
70、)的項數(shù):");</p><p> scanf("%d",&n);</p><p> printf("\n");</p><p> pb=Create(pb,n);//建立多項式B</p><p> printf("\n");</p><
71、p> printf("**********************************************\n");</p><p> printf("* 多項式操作菜單 *\n");</p><p> printf("***********************
72、***********************\n");</p><p> printf("\t\t 1.輸出操作\n");</p><p> printf("\t\t 2.加法操作\n");</p><p> printf("\t\t 3.減法操作\n");</p>&
73、lt;p> printf("\t\t 4.乘法操作\n");</p><p> printf("\t\t 5.除法操作\n");</p><p> printf("\t\t 6.退出操作\n");</p><p> printf("***********************
74、***********************\n");</p><p> while(choose)</p><p><b> {</b></p><p> printf("執(zhí)行操作:");</p><p> scanf("%d",&flag);<
75、/p><p> switch(flag)</p><p><b> {</b></p><p><b> case 1:</b></p><p> printf("多項式A(x):");Print(pa);</p><p> printf("
76、;多項式B(x):");Print(pb);</p><p><b> break;</b></p><p><b> case 2:</b></p><p> pc=Add(pa,pb);</p><p> printf("多項式A(x)+B(x):");&l
77、t;/p><p> Print(pc);</p><p> Destroy(pc);</p><p><b> break;</b></p><p><b> case 3:</b></p><p> pd=Subtract(pa,pb);</p><
78、;p> printf("多項式A(x)-B(x):");</p><p> Print(pd);</p><p> Destroy(pd);</p><p><b> break;</b></p><p><b> case 4:</b></p>&
79、lt;p> pf=Multiply(pa,pb);</p><p> printf("多項式A(x)*B(x):");</p><p> Print(pf);</p><p> Destroy(pf);</p><p><b> break;</b></p><p&
80、gt;<b> case 5:</b></p><p> Device(pa,pb);</p><p><b> break;</b></p><p><b> case 6:</b></p><p><b> exit(0);</b></
81、p><p><b> break;</b></p><p><b> }</b></p><p><b> }</b></p><p> Destroy(pa);</p><p> Destroy(pb);</p><p>
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 數(shù)據(jù)結構課程設計---一元多項式計算
- 數(shù)據(jù)結構課程設計---一元多項式
- 數(shù)據(jù)結構課程設計----一元多項式
- 一元多項式的計算數(shù)據(jù)結構課程設計
- 數(shù)據(jù)結構課程設計-一元多項式計算器
- 數(shù)據(jù)結構課程設計報告一元多項式的計算
- 數(shù)據(jù)結構課程設計報告一元多項式的計算
- 數(shù)據(jù)結構課程設計報告一元多項式的計算
- 一元多項式的計算數(shù)據(jù)結構課程設計報告
- 數(shù)據(jù)結構課程設計--一元稀疏多項式計算器
- 數(shù)據(jù)結構課程設計--一元多項式計算問題(c語言)
- 數(shù)據(jù)結構課程設計報告一元多項式的計算[1]
- 數(shù)據(jù)結構課程設計---一元稀疏多項式計算器
- 數(shù)據(jù)結構課程設計報告一元稀疏多項式計算器
- 《數(shù)據(jù)結構課程設計》報告---一元稀疏多項式計算器
- 數(shù)據(jù)結構課程設計-一元多項式的代數(shù)運算
- 數(shù)據(jù)結構課程設計報告一元多項式的實現(xiàn)
- 數(shù)據(jù)結構課程設計報告-一元多項式加減運算
- 數(shù)據(jù)結構一元多項式加法器課程設計
- 數(shù)據(jù)結構課程設計報告-一元多項式加減運算
評論
0/150
提交評論