版權(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><b> 二、主要內(nèi)容</b></p><p> 設(shè)有一元多項(xiàng)式Am(x)和Bn(x).</p><p> Am(x)=A0+A1x1+A2x2+A3x3+… +Amx
2、m</p><p> Bn(x)=B0+B1x1+B2x2+B3x3+… +Bnxn</p><p> 請(qǐng)實(shí)現(xiàn)求M(x)= Am(x)+Bn(x)、M(x)= Am(x)-Bn(x)和M(x)= Am(x)×Bn(x)。 要求: </p><p> 1) 首先判定多項(xiàng)式是否稀疏</p><p> 2)
3、; 采用動(dòng)態(tài)存儲(chǔ)結(jié)構(gòu)實(shí)現(xiàn);</p><p> 3) 結(jié)果M(x)中無(wú)重復(fù)階項(xiàng)和無(wú)零系數(shù)項(xiàng);</p><p> 4) 要求輸出結(jié)果的升冪和降冪兩種排列情況</p><p> 三、具體要求及應(yīng)提交的材料</p><p> 1.每個(gè)同學(xué)以自己的學(xué)號(hào)和姓名建一個(gè)文件夾,如:“3120090
4、80611101張三”。里面應(yīng)包括:學(xué)生按照課程設(shè)計(jì)的具體要求所開(kāi)發(fā)的所有源程序(應(yīng)該放到一個(gè)文件夾中)、任務(wù)書(shū)和課程設(shè)計(jì)說(shuō)明書(shū)的電子文檔。</p><p> 2.打印的課程設(shè)計(jì)說(shuō)明書(shū)(注意:在封面后夾入打印的“任務(wù)書(shū)”以后再裝訂)。</p><p> 四、主要技術(shù)路線提示</p><p> 為把多個(gè)小功能結(jié)合成一個(gè)完整的小軟件,需使用“菜單設(shè)計(jì)”技術(shù)(可以是
5、控制臺(tái)方式下的命令行形式,若能做成圖形方式則更好)。</p><p><b> 五、進(jìn)度安排</b></p><p> 共計(jì)兩周時(shí)間,建議進(jìn)度安排如下:</p><p> 選題,應(yīng)該在上機(jī)實(shí)驗(yàn)之前完成</p><p> 需求分析、概要設(shè)計(jì)可分配4學(xué)時(shí)完成</p><p> 詳細(xì)設(shè)計(jì)可分配
6、4學(xué)時(shí)</p><p> 調(diào)試和分析可分配10學(xué)時(shí)。</p><p> 2學(xué)時(shí)的機(jī)動(dòng),可用于答辯及按教師要求修改課程設(shè)計(jì)說(shuō)明書(shū)。</p><p> 注:只用課內(nèi)上機(jī)時(shí)間一般不能完成設(shè)計(jì)任務(wù),所以需要學(xué)生自行安排時(shí)間做補(bǔ)充。</p><p> 六、推薦參考資料(不少于3篇)</p><p> ?。?]蘇仕華等編著
7、,數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì),機(jī)械工業(yè)出版社,2007</p><p> ?。?]嚴(yán)蔚敏等編著,數(shù)據(jù)結(jié)構(gòu)(C語(yǔ)言版),清華大學(xué)出版社,2003</p><p> [3]嚴(yán)蔚敏等編著,數(shù)據(jù)結(jié)構(gòu)題集(C語(yǔ)言版),清華大學(xué)出版社,2003</p><p> 指導(dǎo)教師 簽名日期 年 月 日</p><p> 系 主 任
8、 審核日期 年 月 日</p><p><b> 摘 要 </b></p><p> 分析了matlab,mathmatic,maple等數(shù)學(xué)軟件對(duì)一元多項(xiàng)式的計(jì)算過(guò)程,步驟后。由于這些軟件比較大功能齊全,但是實(shí)用性不強(qiáng)。因此,利用microsoft visual studio 6.0開(kāi)發(fā)工具,編程實(shí)現(xiàn)了一元多項(xiàng)式的加法、減法、
9、乘法的計(jì)算器系統(tǒng),該系統(tǒng)具有一元多項(xiàng)式的加法、減法、乘法等功能。</p><p> 關(guān)鍵詞:一元多項(xiàng)式; 軟件; 計(jì)算 </p><p><b> 目 錄 </b></p><p><b> 1需求分析1</b></p><p> 2開(kāi)發(fā)及運(yùn)行平臺(tái)2</p><p
10、><b> 3 概要設(shè)計(jì)3</b></p><p><b> 4 詳細(xì)設(shè)計(jì)4</b></p><p><b> 5 調(diào)試分析8</b></p><p><b> 6 測(cè)試結(jié)果9</b></p><p><b> 7 結(jié)論
11、11</b></p><p><b> 致 謝12</b></p><p><b> 參考文獻(xiàn)13</b></p><p><b> 附 錄16</b></p><p><b> 1需求分析</b></p>&
12、lt;p> 動(dòng)態(tài)鏈表結(jié)構(gòu)下的一元多項(xiàng)式的加法、減法、乘法的實(shí)現(xiàn)。 設(shè)有一元多項(xiàng)式Am(x)和Bn(x). Am(x)=A0+A1x1+A2x2+A3x3+… +Amxm Bn(x)=B0+B1x1+B2x2+B3x3+… +Bnxn 實(shí)現(xiàn)求M(x)= Am(x)+Bn(x)、M(x)= Am(x)-Bn(x)和M(x)= Am(x)×Bn(x)。&l
13、t;/p><p> ?。?)輸入形式和輸入值范圍:</p><p> 輸入的系數(shù)為float類型,輸入的冪為int類型</p><p><b> 請(qǐng)選擇:1</b></p><p> 請(qǐng)輸入你要運(yùn)算的第一個(gè)一元多項(xiàng)式的項(xiàng)數(shù):</p><p><b> 2</b></
14、p><p> 請(qǐng)輸入第1項(xiàng)的系數(shù)和指數(shù):</p><p><b> 系數(shù):1</b></p><p><b> 指數(shù):1</b></p><p> 請(qǐng)輸入第2項(xiàng)的系數(shù)和指數(shù):</p><p><b> 系數(shù):1</b></p><
15、;p><b> 指數(shù):2</b></p><p><b> ?。?)輸出形式</b></p><p><b> 請(qǐng)選擇:5</b></p><p><b> 一元多項(xiàng)式A為:</b></p><p><b> x+x^2</b
16、></p><p><b> 一元多項(xiàng)式B為:</b></p><p> 4x^4+5x^5+6x^6</p><p> ?。?)程序所能達(dá)到的功能</p><p> 1) 首先判定多項(xiàng)式是否稀疏;</p><p> 2) 采用動(dòng)態(tài)存儲(chǔ)結(jié)構(gòu)實(shí)現(xiàn);</p>
17、;<p> 3) 結(jié)果M(x)中無(wú)重復(fù)階項(xiàng)和無(wú)零系數(shù)項(xiàng);</p><p> 4) 要求輸出結(jié)果的升冪和降冪兩種排列情況</p><p> ?。?)測(cè)試數(shù)據(jù):包括正確地輸入及其輸出結(jié)果和含有錯(cuò)誤的輸入及其輸出結(jié)果。</p><p><b> 正確的輸入:</b></p><p>&l
18、t;b> 請(qǐng)選擇:5</b></p><p><b> 一元多項(xiàng)式A為:</b></p><p><b> x+x^2</b></p><p><b> 一元多項(xiàng)式B為:</b></p><p> 4x^4+5x^5+6x^6</p>
19、<p><b> 錯(cuò)誤的輸入:</b></p><p> 請(qǐng)輸入第1項(xiàng)的系數(shù)和指數(shù):</p><p><b> 系數(shù):1</b></p><p><b> 指數(shù):1</b></p><p> 請(qǐng)輸入第2項(xiàng)的系數(shù)和指數(shù):</p><p>
20、;<b> 系數(shù):2</b></p><p><b> 指數(shù):1</b></p><p> 輸入的該項(xiàng)指數(shù)與多項(xiàng)式中已存在的某項(xiàng)相同,請(qǐng)重新創(chuàng)建一個(gè)正確的多項(xiàng)式</p><p> 請(qǐng)輸入第1項(xiàng)的系數(shù)和指數(shù):</p><p><b> 2開(kāi)發(fā)及運(yùn)行平臺(tái)</b></
21、p><p> Windows 7 alienware 平臺(tái)上,Microsoft Visual studio 6.0 環(huán)境下開(kāi)發(fā)。所以建議用戶在使用時(shí),在windows 7 平臺(tái)上使用。3 概要設(shè)計(jì)</p><p><b> 數(shù)據(jù)類型的定義:</b></p><p> struct Node</p><p><b
22、> {</b></p><p> float coef;//結(jié)點(diǎn)類型,系數(shù)</p><p> int exp;//指數(shù)</p><p><b> };</b></p><p> typedef Node polynomial;</p><p> struct LNod
23、e</p><p><b> {</b></p><p> polynomial data;//鏈表類型</p><p> LNode *next;</p><p><b> };</b></p><p> typedef LNode* Link;</p>
24、;<p> 模塊調(diào)用關(guān)系如圖1所示:</p><p> 圖 1 一元多項(xiàng)式計(jì)算器模塊調(diào)用圖</p><p><b> 4 詳細(xì)設(shè)計(jì) </b></p><p><b> 加法模塊:</b></p><p> void PolyAdd(Link &pc,Link pa,L
25、ink pb)</p><p><b> { </b></p><p> Link p1,p2,p,pd;</p><p> CopyLink(p1,pa);</p><p> CopyLink(p2,pb);</p><p> pc=new LNode;</p>&l
26、t;p> pc->next<-NULL;</p><p><b> p<-pc;</b></p><p> p1<-p1->next;</p><p> p2<-p2->next;</p><p> while(p1不為空且p2不為空)</p>&l
27、t;p> {if(p1->data.exp<p2->data.exp)</p><p> then: p->next=p1;p=p->next; p1=p1->next;</p><p> else if(p1->data.exp>p2->data.exp)</p><p> then: p->
28、;next<-p2; p<-p->next;p2<-p2->next;</p><p><b> else</b></p><p> {p1->data.coef<-p1->data.coef+p2->data.coef;//指數(shù)相同,系數(shù)想加</p><p> if(p1->
29、data.coef不等于0)</p><p> {p->next<-p1;</p><p> p<-p->next;</p><p> p1<-p1->next;</p><p> p2<-p2->next;</p><p><b> }</b&
30、gt;</p><p><b> else</b></p><p><b> {pd<-p1;</b></p><p> p1<-p1->next;</p><p> p2<-p2->next;</p><p> delete pd;/
31、/如果系數(shù)為0,則刪除該項(xiàng)</p><p><b> } }</b></p><p><b> }</b></p><p> if(p1!=NULL)</p><p> then:p->next=p1;endif</p><p> if(p2!=NULL)&
32、lt;/p><p> then : p->next=p2;endif</p><p><b> }</b></p><p> 減法模塊,如圖2所示:</p><p> 圖 2 減法模塊結(jié)構(gòu)圖</p><p> void PolySubstract(Link &pc,Link
33、pa,Link pb)</p><p><b> {</b></p><p> Link p,pt;</p><p> CopyLink(pt,pb);</p><p><b> p<-pt;</b></p><p> while(p不為空)</p>
34、;<p> { (p->data).coef<- (-(p->data).coef);//被減的多項(xiàng)式前加"-"號(hào)</p><p> p<-(p->next);</p><p><b> }</b></p><p> PolyAdd(pc,pa,pt);//調(diào)用多項(xiàng)式加法運(yùn)
35、算函數(shù)</p><p> DestroyLink(pt);</p><p><b> }</b></p><p> 乘法模塊:如圖3所示</p><p> 圖 3 乘法模塊結(jié)構(gòu)圖</p><p> void PolyMultiply(Link &pc,Link pa,Link p
36、b)</p><p> {Link p1,p2,p,pd,newp,t;</p><p> pc=new LNode;</p><p> pc->next=NULL;</p><p> p1=pa->next;</p><p> p2=pb->next;</p><p&g
37、t; while(p1不為空)</p><p> { pd=new LNode;</p><p> pd->next=NULL;</p><p> p=new LNode;</p><p> p->next=NULL;</p><p><b> t=p;</b></p
38、><p><b> while(p2)</b></p><p> { newp=new LNode;</p><p> newp->next=NULL;</p><p> newp->data.coef=p1->data.coef*p2->data.coef;//系數(shù)相乘</p>
39、<p> newp->data.exp=p1->data.exp+p2->data.exp;//指數(shù)相加</p><p> t->next=newp;</p><p> t=t->next;</p><p> p2=p2->next;</p><p><b> }</b
40、></p><p> PolyAdd(pd,pc,p);//調(diào)用加法函數(shù)</p><p> CopyLink(pc,pd);</p><p> p1=p1->next;</p><p> p2=pb->next;</p><p> DestroyLink(p);</p><
41、;p> DestroyLink(pd);</p><p><b> }</b></p><p><b> }</b></p><p><b> 5 調(diào)試分析</b></p><p> (1)調(diào)試過(guò)程中遇到的問(wèn)題 :</p><p> 獨(dú)
42、立測(cè)試各個(gè)模塊的功能時(shí)發(fā)現(xiàn)在創(chuàng)建鏈表后和另一個(gè)進(jìn)行運(yùn)算后多余的存儲(chǔ)單元沒(méi)有釋放而造成內(nèi)存的泄漏,還有對(duì)于鏈表的運(yùn)算時(shí)結(jié)束條件掌握不透徹導(dǎo)致沒(méi)有按計(jì)劃地去結(jié)束,比如在用For循環(huán)及While循環(huán)時(shí)沒(méi)有正確地判斷指針的移動(dòng)與結(jié)束條件而得不到自己想要的結(jié)果。進(jìn)入函數(shù)內(nèi)部調(diào)試時(shí)發(fā)現(xiàn)有誤用沒(méi)有初始化的變量,還有贅余的語(yǔ)句擾亂了代碼的健壯性。 在主函數(shù)中對(duì)各個(gè)函數(shù)的調(diào)用時(shí)沒(méi)有一個(gè)清晰的思路,使程序顯得很混亂,給調(diào)試造成了很大困難。 對(duì)非法操作控制的
43、不夠完善,例如缺少對(duì)越界訪問(wèn)及其非法數(shù)據(jù)的控制機(jī)制,使程序的安全性下降。</p><p> (2)算法的時(shí)空分析</p><p> 該程序的實(shí)現(xiàn)是用鏈表實(shí)現(xiàn)的,所以時(shí)間復(fù)雜度和空間復(fù)雜度主要來(lái)自于鏈表的操作,都是O(n)。</p><p><b> ?。?)經(jīng)驗(yàn)和體會(huì)</b></p><p> 編寫(xiě)的程序不但要拿來(lái)
44、使用,還要給別人查看,以便代碼的維護(hù)。所以代碼編寫(xiě)的風(fēng)格盡量規(guī)范,清晰。變量要盡量少定義,結(jié)構(gòu)夜采用簡(jiǎn)單的。另外,對(duì)指針的使用要小心,盡量在定義的時(shí)候就進(jìn)行初始化,避免野指針,指針的使用涉及到內(nèi)存的分配。</p><p><b> 6 測(cè)試結(jié)果</b></p><p> 判斷稀疏,如圖4所示:</p><p> 圖 4 判斷多項(xiàng)式是否稀疏
45、</p><p> 加法運(yùn)算,如圖5所示: </p><p><b> 圖 5加法測(cè)試結(jié)果</b></p><p> 減法運(yùn)算,如圖6所示:</p><p> 圖 6 減法測(cè)試結(jié)果</p><p> 乘法運(yùn)算,如圖7所示:</p><p> 圖 7 乘法測(cè)試結(jié)果
46、</p><p> 降冪升冪排序,如圖8所示</p><p> 圖8降冪升冪排序測(cè)試結(jié)果</p><p><b> 7 結(jié)論</b></p><p> 該程序基本實(shí)現(xiàn)了要求的順序結(jié)構(gòu)、動(dòng)態(tài)鏈表結(jié)構(gòu)下的一元多項(xiàng)式的加法、減法、乘法等功能。代碼較為冗余,可讀性較差,可以多添加一些提示語(yǔ)句以及注釋。</p>
47、<p> 在這次課程設(shè)計(jì)中我又進(jìn)一步地了解了數(shù)據(jù)結(jié)構(gòu)中算法的核心思想的重要性,懂得了一個(gè)程序地好壞關(guān)鍵在于算法是否優(yōu)秀,一個(gè)好的優(yōu)秀的算法可以使我們的程序更加完善,安全性更高以及有更高的效率。這次設(shè)計(jì)中我發(fā)現(xiàn)了自己的許多不足,如對(duì)指針的機(jī)制掌握的還不是很透徹,有的時(shí)候會(huì)出現(xiàn)指針指向錯(cuò)誤以及空指針的錯(cuò)誤,還有不能很好地分析自己算法地復(fù)雜度以及不能很好地使用控制機(jī)制使自己的程序流暢地運(yùn)行。</p><p&
48、gt;<b> 致 謝</b></p><p> 感謝指導(dǎo)老師給我的一些重要指導(dǎo)以及提供的資料,感謝嚴(yán)蔚敏編著的數(shù)據(jù)結(jié)構(gòu)等資料,讓我在編寫(xiě)代碼的過(guò)程中少走了很多彎路。</p><p><b> 參考文獻(xiàn)</b></p><p> ?。?]蘇仕華等編著.數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì).機(jī)械工業(yè)出版社.2007</p>
49、<p> ?。?]嚴(yán)蔚敏等編著.數(shù)據(jù)結(jié)構(gòu)(C語(yǔ)言版).清華大學(xué)出版社.2003</p><p> ?。?]嚴(yán)蔚敏等編著.數(shù)據(jù)結(jié)構(gòu)題集(C語(yǔ)言版).清華大學(xué)出版社,2003</p><p> [4].鄭莉等 編著. C++程序設(shè)計(jì)語(yǔ)言(第三版).清華大學(xué)出版社,2005.06北京</p><p> [5].陳清華 朱紅主編. Visual C++課程設(shè)
50、計(jì)案例精選與編程指導(dǎo).東南大學(xué)出版社,2003.06,南京</p><p> [6].劉振安等編著. C++程序設(shè)計(jì)課程設(shè)計(jì).機(jī)械工業(yè)出版社,2004.08,北京</p><p><b> 附 錄</b></p><p> 附錄1 源程序清單</p><p> #include<iostream&g
51、t;//標(biāo)準(zhǔn)輸入輸出流</p><p> #include<conio.h>//使程序中可用鍵盤(pán)輸入函數(shù)</p><p> #include<stdlib.h>//使程序中可用系統(tǒng)標(biāo)準(zhǔn)輸出函數(shù)</p><p> #include<math.h>//調(diào)用數(shù)學(xué)庫(kù)函數(shù)</p><p> using nam
52、espace std;//命名空間std內(nèi)定義的所有標(biāo)識(shí)符均有效</p><p> struct Node{</p><p> float coef;//結(jié)點(diǎn)類型,系數(shù)</p><p> int exp;//指數(shù)</p><p><b> };</b></p><p> typedef
53、Node polynomial;</p><p> struct LNode{</p><p> polynomial data;//鏈表類型</p><p> LNode *next;</p><p><b> };</b></p><p> typedef LNode* Link;&
54、lt;/p><p> void CreateLink(Link &L,int n);</p><p> void PrintList(Link L);</p><p> void PolyAdd(Link &pc,Link pa,Link pb);</p><p> void PolySubstract(Link &
55、;pc,Link pa,Link pb);</p><p> void CopyLink(Link &pc,Link pa);</p><p> void PolyMultiply(Link &pc,Link pa,Link pb);</p><p> int JudgeIfExpSame(Link pa,Link e);</p>
56、<p> void DestroyLink(Link &L);</p><p> int CompareIfNum(int i);</p><p> void DestroyLink(Link &L)</p><p><b> {Link p;</b></p><p> p=L-&g
57、t;next;</p><p><b> while(p)</b></p><p> { L->next=p->next;</p><p><b> delete p;</b></p><p> p=L->next;</p><p><b>
58、; }</b></p><p><b> delete L;</b></p><p><b> L=NULL;</b></p><p><b> }</b></p><p> void CreateLink(Link &L,int n)</p
59、><p> {if(L!=NULL)</p><p> {DestroyLink(L);}</p><p> Link p,newp;</p><p> L=new LNode;</p><p> L->next=NULL;</p><p> (L->data).exp=-1
60、;//創(chuàng)建頭結(jié)點(diǎn)</p><p><b> p=L;</b></p><p> for(int i=1;i<=n;i++)</p><p> { newp=new LNode;</p><p> cout<<"請(qǐng)輸入第"<<i<<"項(xiàng)的系數(shù)和
61、指數(shù):"<<endl;</p><p> cout<<"系數(shù):";</p><p> cin>>(newp->data).coef;</p><p> cout<<"指數(shù):";</p><p> cin>>(newp-&
62、gt;data).exp;</p><p> if(newp->data.exp<0)</p><p> {cout<<"您輸入有誤,指數(shù)不允許為負(fù)值!"<<endl;</p><p> delete newp;</p><p><b> i--;</b>&
63、lt;/p><p><b> continue;</b></p><p><b> }</b></p><p> newp->next=NULL;</p><p><b> p=L;</b></p><p> if(newp->data
64、.coef==0)</p><p> {cout<<"系數(shù)為零,重新輸入!"<<endl;</p><p> delete newp;</p><p><b> i--;</b></p><p><b> continue;</b></p&g
65、t;<p><b> }</b></p><p> while((p->next!=NULL)&&((p->next->data).exp<(newp->data).exp)) </p><p> { p=p->next; //p指向指數(shù)最小的那一個(gè) }</p><p>
66、 if(!JudgeIfExpSame( L, newp))</p><p> {newp->next=p->next;</p><p> p->next=newp;</p><p><b> }</b></p><p><b> else </b></p>
67、<p> {cout<<"輸入的該項(xiàng)指數(shù)與多項(xiàng)式中已存在的某項(xiàng)相同,請(qǐng)重新創(chuàng)建一個(gè)正確的多項(xiàng)式"<<endl;</p><p> delete newp;</p><p> DestroyLink(L);</p><p> CreateLink(L,n); //創(chuàng)建多項(xiàng)式?jīng)]有成功,遞歸調(diào)用重新創(chuàng)建<
68、/p><p><b> break;</b></p><p><b> }</b></p><p><b> }</b></p><p> JudgeIf(L);//判斷稀疏</p><p><b> }</b></p&
69、gt;<p> void JudgeIf(Link L)</p><p><b> {Link p;</b></p><p> int flag=0;//判斷是否為稀疏的標(biāo)志</p><p> p=L->next;</p><p> while(p->next!=NULL)</p
70、><p> {if(abs(p->next->data.exp-p->data.exp)>1)</p><p><b> flag=1;</b></p><p><b> else</b></p><p><b> flag=0;</b></p
71、><p> p=p->next;</p><p><b> }</b></p><p><b> if(flag)</b></p><p> cout<<"該多項(xiàng)式是稀疏的哈"<<endl;</p><p><b&g
72、t; else</b></p><p> cout<<"該多項(xiàng)式是連續(xù)的哈"<<endl;</p><p><b> }</b></p><p> int JudgeIfExpSame(Link L,Link e)</p><p><b> {L
73、ink p;</b></p><p> p=L->next;</p><p> while(p!=NULL&&(e->data.exp!=p->data.exp))</p><p> p=p->next;</p><p> if(p==NULL)</p><p&g
74、t;<b> return 0;</b></p><p> else return 1;</p><p><b> }</b></p><p> void PrintList(Link L)</p><p><b> {Link p;</b></p>&
75、lt;p> if(L==NULL||L->next==NULL) </p><p> cout<<"該一元多項(xiàng)式為空!"<<endl;</p><p><b> else</b></p><p> {p=L->next;</p><p> if((p
76、->data).coef>0)</p><p> { if((p->data).exp==0)</p><p> cout<<(p->data).coef;//如果指數(shù)為0則直接輸出系數(shù)</p><p> else if((p->data).coef==1&&(p->data).exp==1)&l
77、t;/p><p> cout<<"x";//如果系數(shù)和指數(shù)均為1,則輸出x</p><p> else if((p->data).coef==1&&(p->data).exp!=1)</p><p> cout<<"x^"<<(p->data).exp;
78、</p><p> else if((p->data).exp==1&&(p->data).coef!=1)</p><p> cout<<(p->data).coef<<"x"; </p><p> else cout<<(p->data).coef<<
79、;"x^"<<(p->data).exp;</p><p><b> }</b></p><p> if((p->data).coef<0)</p><p> { if((p->data).exp==0)</p><p> cout<<(p
80、->data).coef;//如果指數(shù)為0,則直接輸出系數(shù)</p><p> else if(p->data.coef==-1&&p->data.exp==1)</p><p> cout<<"-x";//如果系數(shù)為-1,指數(shù)為1,則輸出-x</p><p> else if(p->dat
81、a.coef==-1&&p->data.exp!=1)</p><p> cout<<"-x^"<<p->data.exp; </p><p> else if(p->data.exp==1)</p><p> cout<<p->data.coef<<&
82、quot;x";//如果指數(shù)為1,則輸出系數(shù)倍x</p><p> else cout<<(p->data).coef<<"x^"<<(p->data).exp;</p><p><b> }</b></p><p> p=p->next;</p&g
83、t;<p> while(p!=NULL)</p><p> {if((p->data).coef>0)//系數(shù)大于0時(shí)輸出情況</p><p> {if((p->data).exp==0) </p><p> cout<<"+"<<(p->data).coef;</p&
84、gt;<p> else if((p->data).exp==1&&(p->data).coef!=1) </p><p> cout<<"+"<<(p->data).coef<<"x";</p><p> else if((p->data).exp==1
85、&&(p->data).coef==1)</p><p> cout<<"+"<<"x";</p><p> else if((p->data).coef==1&&(p->data).exp!=1)</p><p> cout<<&qu
86、ot;+"<<"x^"<<(p->data).exp;</p><p> else cout<<"+"<<(p->data).coef<<"x^"<<(p->data).exp;</p><p><b> }</
87、b></p><p> if((p->data).coef<0)//系數(shù)小于0時(shí)輸出情況</p><p> { if((p->data).exp==0)</p><p> cout<<(p->data).coef;</p><p> else if(p->data.coef==-1&am
88、p;&p->data.exp==1)</p><p> cout<<"-x";</p><p> else if(p->data.coef==-1&&p->data.exp!=1)</p><p> cout<<"-x^"<<p->dat
89、a.exp;</p><p> else if(p->data.exp==1)</p><p> cout<<p->data.coef<<"x";</p><p> else cout<<(p->data).coef<<"x^"<<(p->
90、;data).exp;</p><p><b> }</b></p><p> p=p->next;</p><p><b> }</b></p><p><b> }</b></p><p> cout<<endl;<
91、/p><p><b> }</b></p><p> void CopyLink(Link &pc,Link pa)</p><p> {Link p,q,r;</p><p> pc=new LNode;</p><p> pc->next=NULL;</p>
92、<p><b> r=pc;</b></p><p><b> p=pa;</b></p><p> while(p->next!=NULL)</p><p> { q=new LNode;</p><p> q->data.coef=p->next->d
93、ata.coef;</p><p> q->data.exp=p->next->data.exp;</p><p> r->next=q;</p><p> q->next=NULL;</p><p><b> r=q;</b></p><p> p=p-&
94、gt;next;}</p><p><b> }</b></p><p> void PolyAdd(Link &pc,Link pa,Link pb)</p><p> { Link p1,p2,p,pd;</p><p> CopyLink(p1,pa);</p><p>
95、 CopyLink(p2,pb);</p><p> pc=new LNode;</p><p> pc->next=NULL;</p><p><b> p=pc;</b></p><p> p1=p1->next;</p><p> p2=p2->next;<
96、;/p><p> while(p1!=NULL&&p2!=NULL)</p><p> {if(p1->data.exp<p2->data.exp)</p><p><b> {</b></p><p> p->next=p1;</p><p> p=
97、p->next;</p><p> p1=p1->next;</p><p><b> }</b></p><p> else if(p1->data.exp>p2->data.exp)</p><p><b> {</b></p><p&g
98、t; p->next=p2;</p><p> p=p->next;</p><p> p2=p2->next;</p><p><b> }</b></p><p><b> else</b></p><p> {p1->data.coe
99、f=p1->data.coef+p2->data.coef; </p><p> if(p1->data.coef!=0)</p><p><b> {</b></p><p> p->next=p1;</p><p> p=p->next;</p><p>
100、 p1=p1->next;</p><p> p2=p2->next;</p><p><b> }</b></p><p><b> else</b></p><p><b> {pd=p1;</b></p><p> p1=p
101、1->next;</p><p> p2=p2->next;</p><p> delete pd;//如果系數(shù)為0,則刪除該項(xiàng)</p><p><b> }</b></p><p><b> }</b></p><p><b> }</
102、b></p><p> if(p1!=NULL)</p><p> { p->next=p1;}</p><p> if(p2!=NULL)</p><p> { p->next=p2;}</p><p><b> }</b></p><p>
103、 void PolySubstract(Link &pc,Link pa,Link pb)</p><p> {Link p,pt;</p><p> CopyLink(pt,pb);</p><p><b> p=pt;</b></p><p> while(p!=NULL)</p>&l
104、t;p> { (p->data).coef=(-(p->data).coef);//被減的多項(xiàng)式前加"-"號(hào)</p><p> p=p->next;</p><p><b> }</b></p><p> PolyAdd(pc,pa,pt);//調(diào)用多項(xiàng)式加法運(yùn)算函數(shù)</p>&
105、lt;p> DestroyLink(pt);</p><p><b> }</b></p><p> void Clear()</p><p> {system("pause");</p><p> system("cls");</p><p&g
106、t; }//讓用戶重新選擇</p><p> void PolyMultiply(Link &pc,Link pa,Link pb)</p><p> {Link p1,p2,p,pd,newp,t;</p><p> pc=new LNode;</p><p> pc->next=NULL;</p>&
107、lt;p> p1=pa->next;</p><p> p2=pb->next;</p><p> while(p1!=NULL)</p><p> {pd=new LNode;</p><p> pd->next=NULL;</p><p> p=new LNode;</p&
108、gt;<p> p->next=NULL;</p><p><b> t=p;</b></p><p><b> while(p2)</b></p><p> {newp=new LNode;</p><p> newp->next=NULL;</p>
109、<p> newp->data.coef=p1->data.coef*p2->data.coef;//系數(shù)相乘</p><p> newp->data.exp=p1->data.exp+p2->data.exp;//指數(shù)相加</p><p> t->next=newp;</p><p> t=t->
110、;next;</p><p> p2=p2->next;</p><p><b> }</b></p><p> PolyAdd(pd,pc,p);</p><p> CopyLink(pc,pd);</p><p> p1=p1->next;</p><
111、p> p2=pb->next;</p><p> DestroyLink(p);</p><p> DestroyLink(pd);</p><p><b> }</b></p><p><b> }</b></p><p> void Menu()&
112、lt;/p><p> {cout<<""<<endl;</p><p> cout<<endl;</p><p> cout<<"***************************一元多項(xiàng)式的加、減、乘運(yùn)算***************************"<&l
113、t;endl;</p><p> cout<<"\t\t\t\t\t\t\t\t "<<endl;</p><p> cout<<"[1] 創(chuàng)建要運(yùn)算的兩個(gè)一元多項(xiàng)式\t\t "<<endl;</p><p> cout<<"[2] 將兩個(gè)一元
114、多項(xiàng)式相加\t\t\t "<<endl;</p><p> cout<<"[3] 將兩個(gè)一元多項(xiàng)式相減\t\t\t "<<endl;</p><p> cout<<"[4] 將兩個(gè)一元多項(xiàng)式相乘\t\t\t "<<endl;</p><p>
115、 cout<<"[5] 顯示兩個(gè)一元多項(xiàng)式\t\t\t "<<endl;</p><p> cout<<"[6] 銷毀所創(chuàng)建的二個(gè)多項(xiàng)式\t\t "<<endl;</p><p> cout<<"[7] 退出\t\t\t\t\t "<<end
116、l;</p><p> cout<<"\t\t\t\t\t\t\t\t "<<endl;</p><p> cout<<"請(qǐng)選擇:";</p><p><b> }</b></p><p> int CompareIfNum(int
117、i)</p><p> {if(i>0&&i<8)</p><p><b> return 0;</b></p><p> else return 1;//返回1時(shí)出錯(cuò),因?yàn)椴藛沃兄挥?~7</p><p><b> }</b></p><p&
118、gt; void main()</p><p><b> {int n;</b></p><p> Link L,La=NULL,Lb=NULL;//La,Lb分別為創(chuàng)建的兩個(gè)多項(xiàng)式</p><p> int choose;</p><p><b> while(1)</b></p&
119、gt;<p> { Menu(); //調(diào)用菜單函數(shù)</p><p> cin>>choose;</p><p> switch(choose)</p><p><b> { case 1:</b></p><p> cout<<"請(qǐng)輸入你要運(yùn)算的第一個(gè)一元多項(xiàng)
120、式的項(xiàng)數(shù):"<<endl;</p><p><b> cin>>n;</b></p><p> if(CompareIfNum(n)==1)</p><p> { cout<<"您的輸入有誤,請(qǐng)重新輸入……"<<endl;</p><p>
121、;<b> Clear();</b></p><p><b> break;</b></p><p><b> }</b></p><p> CreateLink(La,n);</p><p> cout<<"請(qǐng)輸入你要運(yùn)算的第二個(gè)一元多項(xiàng)式的項(xiàng)
122、數(shù):"<<endl;</p><p><b> cin>>n;</b></p><p> if(CompareIfNum(n)==1)</p><p> { cout<<"您的輸入有誤,請(qǐng)重新輸入……"<<endl;</p><p>&l
123、t;b> Clear();</b></p><p><b> break;</b></p><p><b> }</b></p><p> CreateLink(Lb,n);</p><p><b> Clear();</b></p>
124、<p> break; </p><p><b> case 2:</b></p><p> if(La==NULL||Lb==NULL)</p><p> {cout<<"您的多項(xiàng)式創(chuàng)建有誤,請(qǐng)重新選擇……"<<endl;</p><p><
125、;b> Clear();</b></p><p><b> break;</b></p><p><b> }</b></p><p> PolyAdd(L,La,Lb);</p><p> cout<<""<<endl;<
126、;/p><p> cout<<"設(shè)相加的兩個(gè)一元多項(xiàng)式為A和B則:"<<endl;</p><p> cout<<""<<endl;</p><p> cout<<"A的多項(xiàng)式為:";</p><p> PrintLis
127、t(La);</p><p> cout<<""<<endl;</p><p> cout<<"B的多項(xiàng)式為:";</p><p> PrintList(Lb);</p><p> cout<<""<<endl;
128、 </p><p> cout<<"相加后的結(jié)果為:";</p><p> PrintList(L);</p><p> cout<<""<<endl;</p><p><b> Clear();</b></p><
129、p> DestroyLink(L);</p><p><b> break;</b></p><p><b> case 3:</b></p><p> if(La==NULL||Lb==NULL)</p><p> {cout<<"您的多項(xiàng)式創(chuàng)建有誤,請(qǐng)重新選
130、擇……"<<endl;</p><p><b> Clear();</b></p><p><b> break;</b></p><p><b> }</b></p><p> PolySubstract(L,La,Lb);</p>
131、<p> cout<<"設(shè)相減的兩個(gè)一元多項(xiàng)式為A和B則:"<<endl;</p><p> cout<<""<<endl;</p><p> cout<<"A的多項(xiàng)式為:";</p><p> PrintList(La);&l
132、t;/p><p> cout<<""<<endl;</p><p> cout<<"B的多項(xiàng)式為:";</p><p> PrintList(Lb);</p><p> cout<<""<<endl;</p>
133、<p> cout<<"相減后的結(jié)果為:";</p><p> PrintList(L);</p><p> cout<<""<<endl;</p><p><b> Clear();</b></p><p> Destr
134、oyLink(L);</p><p><b> break; </b></p><p><b> case 4:</b></p><p> if(La==NULL||Lb==NULL)</p><p> { cout<<"您的多項(xiàng)式創(chuàng)建有誤,請(qǐng)重新選擇……"
135、<<endl;</p><p><b> Clear();</b></p><p><b> break;</b></p><p><b> }</b></p><p> PolyMultiply(L,La,Lb);</p><p>
136、 cout<<"設(shè)相乘的兩個(gè)一元多項(xiàng)式為A和B則:"<<endl;</p><p> cout<<""<<endl;</p><p> cout<<"A的多項(xiàng)式為:";</p><p> PrintList(La);</p>
137、<p> cout<<""<<endl;</p><p> cout<<"B的多項(xiàng)式為:";</p><p> PrintList(Lb);</p><p> cout<<""<<endl;</p><p>
138、; cout<<"相乘后的結(jié)果為:";</p><p> PrintList(L);</p><p> DestroyLink(L);</p><p> cout<<""<<endl;</p><p><b> Clear();</b>
139、</p><p><b> break;</b></p><p><b> case 5:</b></p><p> if(La==NULL||Lb==NULL)</p><p> {cout<<"您的多項(xiàng)式創(chuàng)建有誤,請(qǐng)重新選擇……"<<endl;
140、</p><p><b> Clear();</b></p><p><b> break;</b></p><p><b> }</b></p><p> cout<<"一元多項(xiàng)式A為:"<<endl;</p>
141、<p> PrintList(La);</p><p> cout<<""<<endl;</p><p> cout<<"一元多項(xiàng)式B為:"<<endl;</p><p> PrintList(Lb);</p><p> cout&l
142、t;<""<<endl;</p><p><b> Clear();</b></p><p><b> break;</b></p><p><b> case 6:</b></p><p> if(La&&Lb)
143、</p><p> {DestroyLink(La);</p><p> DestroyLink(Lb);</p><p> cout<<"多項(xiàng)式銷毀成功!"<<endl;</p><p><b> Clear();</b></p><p>&l
144、t;b> }</b></p><p><b> else </b></p><p> {cout<<"多項(xiàng)式不存在,請(qǐng)重新選擇^^^"<<endl;</p><p><b> Clear();</b></p><p><b&
145、gt; }</b></p><p><b> break;</b></p><p><b> case 7:</b></p><p> exit(0); //exit(0)強(qiáng)制終止程序,返回狀態(tài)碼0表示正常結(jié)束</p><p><b> default:</b&
146、gt;</p><p> cout<<"您的輸入有誤,請(qǐng)重新選擇操作……"<<endl;</p><p><b> Clear();</b></p><p><b> break;</b></p><p><b> }</b>
147、</p><p><b> }</b></p><p><b> }</b></p><p><b> 附錄2 </b></p><p><b> 用戶使用說(shuō)明</b></p><p> 雙擊該軟件目錄下的exe文件即可
溫馨提示
- 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ù)結(jié)構(gòu)課程設(shè)計(jì)---一元多項(xiàng)式計(jì)算
- 算法分析與設(shè)計(jì)的課程設(shè)計(jì)(一元多項(xiàng)式的加法、減法、乘法的實(shí)現(xiàn))
- 一元多項(xiàng)式的計(jì)算數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)-一元多項(xiàng)式的代數(shù)運(yùn)算
- 順序鏈?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)課程設(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)論