一元多項式運算課程設計報告_第1頁
已閱讀1頁,還剩34頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

1、<p><b>  課 程 設 計</b></p><p><b>  課程設計任務書</b></p><p>  2011 ~2012 學年第 1 學期</p><p>  學生姓名: 專業(yè)班級: 10級計科1班 </p><p>  指導教師:

2、 工作部門: 計算機學院 </p><p><b>  一、課程設計題目</b></p><p><b>  一元多項式的運算</b></p><p><b>  二、課程設計內(nèi)容</b></p><p>  1.一元多項式的存儲</

3、p><p>  2.一元多項式的加法與減法</p><p>  3.一元多項式的乘法</p><p><b>  三、進度安排</b></p><p>  1、2011年12月19日,設計動員,布置任務</p><p>  2、2011年12月20日到21日,查閱資料,分析、討論與設計</p&g

4、t;<p>  3、2011年12月22日到27日,編寫程序,進行調試</p><p>  4、2011年12月28日到29日完成模塊聯(lián)調,進行測試</p><p>  5、2011年12月30日,成果驗收,完成設計報告</p><p><b>  四、基本要求</b></p><p>  1.用C語言實現(xiàn)

5、一元多項式的運算.</p><p>  2.利用鏈表實現(xiàn)一元多項式運算的存儲.</p><p>  3.該程序具有加法、減法、乘法基本運算功能.</p><p>  4. 程序的各個功能模塊要求用函數(shù)的形式實現(xiàn).</p><p>  5. 完成設計任務并書寫課程設計報告。</p><p><b>  目 錄

6、</b></p><p><b>  一 概述3</b></p><p>  二 總體方案設計4</p><p><b>  三 詳細設計6</b></p><p>  四 程序的調試與運行結果說明12</p><p>  五 課程設計總結16</

7、p><p><b>  參考文獻17</b></p><p>  附錄:程序源代碼18</p><p><b>  一 概述</b></p><p><b>  課程設計的目的</b></p><p>  1.理解和掌握該課程中的有關基本概念,程序設計思

8、想和方法。</p><p>  2.培養(yǎng)綜合運用所學知識獨立完成課題的能力。</p><p>  3.培養(yǎng)勇于探索、嚴謹推理、實事求是、有錯必改,用實踐來檢驗理論,全方位考慮問題等科學技術人員應具有的素質。</p><p>  4.掌握從資料文獻、科學實驗中獲得知識的能力,提高學生從別人經(jīng)驗中找到解決問題的新途徑的悟性,初步培養(yǎng)工程意識和創(chuàng)新能力。</p>

9、;<p><b>  課程設計的要求</b></p><p>  1.用C語言實現(xiàn)一元多項式的運算.</p><p>  2.利用鏈表實現(xiàn)一元多項式運算的存儲.</p><p>  3.該程序具有加法、減法、乘法基本運算功能.</p><p>  4. 程序的各個功能模塊要求用函數(shù)的形式實現(xiàn).</p&

10、gt;<p>  5. 完成設計任務并書寫課程設計報告。</p><p><b>  二 總體方案設計</b></p><p><b>  1程序設計</b></p><p>  對多項式存儲的解釋與說明:多項式,顧名思義是含有多個單項式的,所以很容易讓程序員聯(lián)想到的是鏈式單鏈表,因為鏈式的單鏈表比順序的操作

11、靈活,鏈式的便于插入和刪除。</p><p>  我對多項式的存儲思考了很多常見的輸入錯誤,必須要對輸入的每個單項式進行校驗,符合條件的就存入,反之就刪除并提示重新輸入,所以我的程序中也是選擇鏈式單鏈表來存儲多項式的,這樣就給我程序后期的算法設計帶來了很多的好處。</p><p><b>  頭結點</b></p><p>  如上頭結點,是采

12、用的結構體形式,其中大的方面分為兩個域,分別為data域和next域,其中data域又是一個嵌套的結構體,里面又分為coef 和expn兩個域,而next域是指向下一個結點的指針域。初始化頭結點時,我將coef 和expn賦初值為 0 和 -1,因為頭結點在整個算法中都沒有參與計算,只是起到一個連接的作用,而其指數(shù)域expn為 -1 是起標志性的作用。</p><p>  整體設計思路:模仿DOS界面,用命令行來

13、操控整個程序的運行;</p><p>  算法的整體思路:先寫命令行函數(shù),然后將一元多項式運算的函數(shù)插入到命令行函數(shù)中,以達到函數(shù)調用的目的;</p><p>  主要特點:可以實現(xiàn)一元多項式的DOS界面命令操控;</p><p>  具體功能:用命令調用函數(shù),以實現(xiàn)一元多項式的存儲、相加、相減、相乘的功能,還有顯示、銷毀、清屏、幫助、退出等命令。</p>

14、;<p><b>  2.主要問題解決</b></p><p>  我所承擔的設計工作是實現(xiàn)一元多項式的存儲、相加、相減、相乘的功能,而我就想到了模仿DOS界面命令形式,采用命令操作來實現(xiàn)本次課程設計的要求,其中還加入了一些另外的功能,比如DOS界面的幫助、清屏、退出等命令。</p><p><b>  3.程序的主要模塊</b>&

15、lt;/p><p>  如上1、2所提到的,我采用的是模仿DOS命令界面來實現(xiàn)多項式的存儲以及其相加、相減、相乘等功能。所以我設計的程序模塊主要有兩大模塊,其分別為命令行調用模塊和一元多項式的存儲、運算模塊。</p><p>  3.1命令行調用模塊</p><p>  在此模塊中,我也使用了結構體來存儲相關命令,但這里采用的是順序的鏈表,因為在使用命令行函數(shù)的時候會有

16、指針偏移尋找相關命令的函數(shù)指針,所以用順序有利益控制循環(huán)使用。</p><p>  命令行的節(jié)點形式,pCmdName為命令名,pCmdInfo為命令的功能說明,pFun是自定義的一個函數(shù)指針內(nèi)型,也就是存儲相關命令的函數(shù)指針。</p><p>  然后就寫了一個命令行輸入函數(shù)CmdProc,在此函數(shù)里面用while循環(huán)來輸入相關的命令,用庫函數(shù)strcmp來核對輸入的命令,以達到調用相關

17、命令函數(shù)的效果。而相關命令函數(shù)里面就調用下面模塊中的相關函數(shù)。</p><p>  3.2一元多項式的存儲、運算模塊</p><p>  在此模塊中,我使用的鏈式單鏈表來存儲多項式的,相關的介紹看上面的 1.程序設計 中的詳細說明。 </p><p>  此模塊主要的幾大功能函數(shù)為createLink創(chuàng)建鏈表,printList輸出鏈表,addPolyn相加函數(shù),s

18、ubstractPolyn相減函數(shù),mulPolyn相乘函數(shù)。</p><p>  還有相關的輔助函數(shù)copyLink復制多項式函數(shù),locateLink核對單項式函數(shù),destroyLink銷毀結點函數(shù)。</p><p>  相關的主要函數(shù)和輔助函數(shù)之間的聯(lián)系如上所示。</p><p><b>  三 詳細設計</b></p>

19、<p>  1.一元多項式運算函數(shù)設計</p><p>  1.1創(chuàng)建多項式的過程</p><p>  編寫此過程中,我采用了鏈式單鏈表的形式,固然最后一個區(qū)域是指針next域,其中多項式結點中data域里又嵌套了一個結構體,即將data域劃分為系數(shù)coef和指數(shù)expn兩個區(qū)域。</p><p><b>  頭結點</b></

20、p><p>  這是創(chuàng)建多項式的過程,此多項式為15*x^2+23x^23+17x^8 ,當然了在創(chuàng)建多項式的過程中還有更為細密的校驗,如:(在輸入的過程中)</p><p><b>  1.指數(shù)為負校驗:</b></p><p>  2.系數(shù)為 0 的校驗:</p><p>  3.輸入指數(shù)相同的校驗:</p>

21、<p>  黑體函數(shù)locateLink是一個判斷指數(shù)是否與多項式中已存在的某項相同。</p><p><b>  補充:</b></p><p>  在校驗3之前必須將每次輸入的單項式按從小到大的順序排列,這也為locateLink和下面的相加、相減函數(shù)做了簡單的鋪墊。我采用的遍歷發(fā)找到每次輸入的單項式應在的位置,然后插入。</p>&l

22、t;p>  1.2 多項式輸出實現(xiàn)過程</p><p>  在輸出之前必須對傳入?yún)?shù)指針進行校驗:</p><p>  本來一開始我想的是從多項式的第一個結點一次輸出,這樣很簡單啊,可是我發(fā)現(xiàn)這樣的通用性很差,所以我就想到了先將第一個結點分開輸出,然后再依次用循環(huán)輸出其它結點,這樣就大大地提高了此函數(shù)的通用效果。同時在輸出各結點時,我還對系數(shù)、指數(shù)進行了討論,(系數(shù)不可能為0)以多項

23、式的第一項系數(shù)大于0的情況輸出為例,如下:</p><p>  如果指數(shù)為0時,只輸出系數(shù)</p><p>  如果系數(shù)和指數(shù)都為1時就不用輸出1,只輸出x</p><p>  如果系數(shù)或指數(shù)其中一個為1的時候,也不用輸出1,其它的照原樣輸出:</p><p>  1.3多項式相加過程</p><p>  在兩個多項式

24、相加對其進行了保護,將兩個多項式分別復制給了另外兩個多項式中。</p><p>  同樣也對兩個多項式進行了校驗:</p><p>  如果校驗正確,則進行相加,如下:</p><p>  兩個多項式?jīng)]有指數(shù)相同時,算法中結點的變化如下:</p><p> ?。ā吧咝芜B接”的尾是“和”的next域,而頭就從在“加數(shù)”和“被加數(shù)”中尋找指數(shù)小的

25、項,然后通過指針偏移連接。)</p><p>  兩個多項式中如果有指數(shù)相同的的項,則先相加存到其中一個多項式, 然后再用上面1的“蛇形連接”的方法連接,不過唯一要注意的就是要將指數(shù)相同的項中未被累加存儲的那項給跳過,不用連接。</p><p>  3. 但是在指數(shù)相同的項相加時還要注意一點,那就核對相加的結果,即對存到其中一個多項式中的項的系數(shù),必須進行非0 的校驗。因為兩種情況

26、的結點連接方式不同:</p><p>  當然了如果校驗不正確,則有:</p><p>  1.4多項式相減過程</p><p>  相減函數(shù)就很簡單了,就是想將第二個多項式的所有項的系數(shù)化為負號,然后再與第一個多項式相加,同樣在函數(shù)之前使用了“復制copyLink”多項式結點的操作:</p><p><b>  補充:</b

27、></p><p>  黑體函數(shù)destroyLink是銷毀單鏈表的函數(shù),是為了釋放內(nèi)存空間的:</p><p>  具體的函數(shù)代碼如下:</p><p>  同時destroyLink函數(shù)也是命令行DesPolyn調用的主要函數(shù)。</p><p>  1.5多項式相乘過程</p><p>  由于相乘過程中只需

28、用其中一個多項式的每一項依次去乘另一個多項式的每一項,依次形成多項式,并累加到同一個多項式中,這樣最后得到了所要的結果了,并及時銷毀臨時的多項式:</p><p>  2.模仿DOS命令行設計</p><p>  命令行函數(shù)中定義的是順序單鏈表,第一個域為字符串指針(命令名),第</p><p>  二個域也是字符串指針域(命令功能),第三個域為函數(shù)指針域(命令函數(shù)

29、)。</p><p>  然后分別寫了以上9個函數(shù),并用函數(shù)指針執(zhí)行了對應的函數(shù),隨后寫了個調用命令的函數(shù)CmdProc,在這里面進行循環(huán)輸入命令字符串,然后用strcmp比較輸入的字符串與命令名,如果相同則調用相應函數(shù)指針所指向的函數(shù)。</p><p>  四 程序的調試與運行結果說明</p><p>  1.程序的源代碼:(見附錄)</p><

30、;p>  2. 程序的調試與運行結果說明:</p><p><b>  運行結果圖片一:</b></p><p>  說明:第一次輸入的命令有誤,所以緊接著就是提示語句。在使用Help之后就 </p><p>  顯示了該模擬DOS界面內(nèi)的命令與其功能,而后如果之前沒有創(chuàng)建多項式,則你輸入的其它要用到多項式的命令都會無效,而且還會給予相應

31、的提示,要我們先創(chuàng)建多項式。隨后我創(chuàng)建了兩個相同的多項式(1+x),然后把兩個多項式顯示出來。</p><p><b>  運行結果圖片二:</b></p><p>  說明:由于界面內(nèi)容太多,所以我就輸入了Clear命令。按下回車后結果如上圖。</p><p><b>  運行結果圖片三:</b></p>

32、<p>  說明:雖然上面的采用了Clear清屏操作,但是其不影響原有多項式的內(nèi)容,所以我有一次顯示了原來輸入的兩個多項式,隨后操作了相加、相減、相乘的命令,最后銷毀了多項式。如果在銷毀多項式之后還想進行操作,就應該再次創(chuàng)建多項式,不然系統(tǒng)會再次提醒你未創(chuàng)建多項式。</p><p><b>  運行結果圖片四:</b></p><p>  說明:這是未創(chuàng)建多

33、項式之前的錯誤命令操作,以及退出命令Exit。</p><p><b>  運行結果圖片五:</b></p><p>  說明:第二次操作,創(chuàng)建了不同的兩個多項式,已經(jīng)其相關命令操作。</p><p>  3.算法的改進設想:</p><p>  最開始想到的創(chuàng)建多項式方法很簡單,并沒有對多項式進行指數(shù)由小到大的排列,最

34、后到多項式相加的時候才發(fā)現(xiàn)有點麻煩了,每次都要用兩個指針分別從兩個多項式的鏈表的頭遍歷到尾,找其有沒有指數(shù)相同的兩項,然后對其系數(shù)相加。這樣就很消耗時間,而且還改變了原有的兩個多項式。所以我又寫了個“復制函數(shù)”,就是將一個多項式復制到另一個里面,已達到保護原有的多項式的作用。而且一早將多項式進行了排序,在相加時將兩個原多項式進行“保護”,隨后只需要判斷兩個復制過來的多項式最前面的指數(shù)是不是相等,采用“蛇形連接”的方式將兩個復制多項式中的

35、結點連接到另一個多項式中。</p><p>  對于相減函數(shù)就簡單多了,只需將第二個多項式的系數(shù)全部變?yōu)樨摂?shù),然后再將其與第一個多項式進行相加。</p><p>  對于相乘的函數(shù),就是采用一般的算法,用其中一個多項式中每一項依次去乘另一個多項式,然后將其都相加起來。</p><p>  對于命令行的函數(shù),由于這個這需要定義一個屬于命令行的結構體,里面含有三個內(nèi)容:

36、1.命令名稱;2.命令功能;3.命令名對應的函數(shù)指針。再寫一個輸入命令的函數(shù)進行調用相關的命令函數(shù)。</p><p>  4.時間復雜度分析:</p><p>  在createPolyn創(chuàng)建多項式的函數(shù)中,用了個while對多項式進行指數(shù)由小到大的排序,是為后面的相加函數(shù)做鋪墊。時間復雜度為O(n) 。</p><p>  由于addPolyn函數(shù)中采用的是“蛇形

37、連接”,所以其時間復雜度為O(m+n)。</p><p>  由于mulPolyn函數(shù)中采用的是用其中一個多項式中每一項依次去乘另一個多項式,所以時間復雜度為O(n*m)。</p><p>  其它的輔助函數(shù),如:輸出多項式函數(shù)printList、復制多項式函數(shù)copyLink</p><p>  、校驗輸入單項式有沒有指數(shù)相同的函數(shù)locateLink 的時間復雜

38、度都為O(n)。</p><p><b>  五 課程設計總結</b></p><p><b>  1.程序總結:</b></p><p>  通過這個的課程設計,我進一步的鞏固了鏈式單鏈表的使用,以及寫命令行的大致步驟。而且我已掌握一元多項式所要求的基本算法。</p><p>  我的程序代碼完全

39、符合這次的課程要求,我通過模仿DOS命令行的形式來實現(xiàn)一元多項式的具體功能,其中的命令基本上很完善,初步的展現(xiàn)了我對命令行的理解與使用。在一元多項式的算法實現(xiàn)中,也幾乎是盡善盡美的,由于整個過程是采用的鏈式單鏈表,所以全部輸入和輸出的過程都有指針或者是數(shù)據(jù)的校驗內(nèi)容,這樣就更加增強了代碼的可行性。</p><p>  2.程序進一步設想:</p><p>  我的程序代碼滿足了這次課程設計

40、的要求,但我想我還沒有做到最完美的,因為在一元多項式的運算中應該是有除法的,所以這樣就有問題了,那我的程序里面還應該加上指數(shù)為負數(shù)的操作,也就是除法的間接性實現(xiàn)的步驟。</p><p>  對于一元多項式的除法以及指數(shù)為負的運算提出假設:我想應該可以寫個一元多項式相除的函數(shù),是乘法函數(shù)的逆過程,只不過要在相除之前先確定兩者之間的關系是能夠除得盡的,不然這樣就很麻煩了。</p><p>  

41、對《數(shù)據(jù)結構》課程的思考:</p><p>  通過這次課程,我更深入的了解到《數(shù)據(jù)結構》這門課程對于程序員來說很重要,因為程序的兩大組成成員之一就是數(shù)據(jù)結構。程序的核心是算法,同時程序的實現(xiàn)也要靠數(shù)據(jù)結構,所以數(shù)據(jù)結構也是程序的主要成員,所以說學好數(shù)據(jù)結構是必須的。</p><p><b>  參考文獻</b></p><p>  [1] 譚

42、浩強,C程序設計題解與上機指導(第二版),北京,清華大學出版社,2000年9月。</p><p>  [2] 嚴蔚敏 吳偉民 ,數(shù)據(jù)結構(C語言版),北京,清華大學出版社,2007年</p><p>  [3] [美] James P.Cohoon ,Jack W.Davidson 著,劉瑞挺 韓毅剛 盛素英 劉海嘉 等譯 , C++ 程序設計(第三版),北京,電子工業(yè)出版社,2002年1

43、月</p><p>  [4] 繆淮扣 顧訓穰 沈俊 ,數(shù)據(jù)結構(C++實現(xiàn)) ,北京,科學出版社,2001年</p><p><b>  附錄:程序源代碼</b></p><p>  #include <iostream></p><p>  using namespace std;</p>

44、<p>  #include <stdlib.h></p><p>  #include <string.h></p><p>  #include "stdio.h"</p><p>  typedef struct</p><p><b>  { </b><

45、;/p><p>  float coef;//結點類型</p><p><b>  int expn;</b></p><p>  }polynomial;</p><p>  typedef struct LNode</p><p><b>  { </b></p>

46、<p>  polynomial data;//鏈表類型</p><p>  struct LNode *next;</p><p>  }LNode,*Link;</p><p>  typedef int (*PFUN)();</p><p>  struct CMDINFO</p><p><

47、b>  {</b></p><p>  const char *pCmdName;</p><p>  const char *pCmdInfo;</p><p>  PFUN pFun;</p><p><b>  };</b></p><p><b>  /*調用的

48、函數(shù)*/</b></p><p>  void createLink(Link &L,int n);</p><p>  void printList(Link L);</p><p>  void addPolyn(Link &pc,Link pa,Link pb);</p><p>  void substra

49、ctPolyn(Link &pc,Link pa,Link pb);</p><p>  void mulPolyn(Link &pc,Link pa,Link pb);</p><p>  void copyLink(Link &pc,Link pa);</p><p>  int locateLink(Link pa,Link e);&l

50、t;/p><p>  void destroyLink(Link &L);</p><p><b>  /*命令行函數(shù)*/</b></p><p>  void CmdProc(const char *pTitle);</p><p>  int CreatePolyn();</p><p>

51、  int ShowPolyn();</p><p>  int AddPolyn();</p><p>  int SubPolyn();</p><p>  int MulPolyn();</p><p>  int DesPolyn();</p><p>  int Clear();</p><

52、;p>  int Help();</p><p>  int Exit();</p><p>  CMDINFO g_CmdInfo[] = { "CreatePolyn", "創(chuàng)建多項式", CreatePolyn,</p><p>  "ShowPolyn", "顯示

53、多項式", ShowPolyn,</p><p>  "AddPolyn", "多項式相加", AddPolyn,</p><p>  "SubPolyn", "多項式相減", SubPolyn,</p><p>  "M

54、ulPolyn", "多項式相乘", MulPolyn,</p><p>  "DesPolyn", "銷毀多項式", DesPolyn,</p><p>  "Clear", "清屏操作", Clear,<

55、;/p><p>  "Help", "幫助信息", Help,</p><p>  "Exit", "退出", Exit};</p><p>  int g_nCmdSize = sizeof(g_CmdInfo)/sizeof(CMDIN

56、FO);</p><p>  Link La = NULL,Lb = NULL;</p><p>  void main()</p><p><b>  {</b></p><p>  CmdProc("多項式");</p><p><b>  }</b>

57、</p><p>  void CmdProc(const char *pTitle) //Dos界面命令行函數(shù)</p><p><b>  {</b></p><p>  char szCmdBuf[50] = "";</p><p>  int i = 0;</p><p

58、>  if(NULL == pTitle)</p><p><b>  {</b></p><p>  cout<<"xxx空系統(tǒng) v 2.0"<<endl;</p><p><b>  }</b></p><p><b>  else&l

59、t;/b></p><p><b>  {</b></p><p>  cout<<pTitle<<"系統(tǒng) v 2.0"<<endl;</p><p><b>  }</b></p><p>  while(true)</p>

60、<p><b>  {</b></p><p>  cout<<">";</p><p>  cin>>szCmdBuf;</p><p>  for(i = 0; i < g_nCmdSize; i++)</p><p><b>  {&l

61、t;/b></p><p>  if(!strcmp(szCmdBuf, g_CmdInfo[i].pCmdName))</p><p><b>  {</b></p><p>  g_CmdInfo[i].pFun();</p><p><b>  break;</b></p>

62、<p><b>  }</b></p><p><b>  }</b></p><p>  if(i == g_nCmdSize)</p><p><b>  {</b></p><p>  cout<<"您輸入的命令有誤,請用Help命令查詢

63、!"<<endl;</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  int CreatePolyn() //創(chuàng)建多項式</p><p>

64、<b>  {</b></p><p>  if(La != NULL && Lb != NULL) //多項式校驗</p><p><b>  {</b></p><p>  cout<<"您已經(jīng)創(chuàng)建了多項式,請使用其它命令!"<<endl;<

65、;/p><p><b>  return 0;</b></p><p><b>  }</b></p><p><b>  int n;</b></p><p>  cout<<"請輸入你要運算的第一個一元多項式的項數(shù): ";</p>

66、<p><b>  cin>>n;</b></p><p>  createLink(La,n);</p><p>  cout<<"請輸入你要運算的第二個一元多項式的項數(shù): ";</p><p><b>  cin>>n;</b></p>&

67、lt;p>  createLink(Lb,n);</p><p><b>  return 0;</b></p><p><b>  }</b></p><p>  int ShowPolyn() //顯示多項式</p><p><b>  {</b><

68、;/p><p>  if(La == NULL || Lb == NULL) //多項式校驗</p><p><b>  {</b></p><p>  cout<<"您還未創(chuàng)建多項式,請先創(chuàng)建!"<<endl;</p><p><b>  return 0;

69、</b></p><p><b>  }</b></p><p>  cout<<"第一個一元多項式為:"<<endl;</p><p>  printList(La);</p><p>  cout<<"第二個一元多項式為:"<

70、;<endl;</p><p>  printList(Lb);</p><p><b>  return 0;</b></p><p><b>  }</b></p><p>  int AddPolyn() //多項式相加</p><p><b>

71、;  {</b></p><p><b>  Link L;</b></p><p>  if(La == NULL || Lb == NULL) //多項式校驗</p><p><b>  {</b></p><p>  cout<<"您還未創(chuàng)建多項式,請先創(chuàng)

72、建!"<<endl;</p><p><b>  return 0;</b></p><p><b>  }</b></p><p>  addPolyn(L,La,Lb);</p><p>  cout<<"兩個多項式相加后的結果為:"<

73、<endl;</p><p>  printList(L);</p><p>  destroyLink(L);</p><p><b>  return 0;</b></p><p><b>  }</b></p><p>  int SubPolyn()

74、 //多項式相減</p><p><b>  {</b></p><p><b>  Link L;</b></p><p>  if(La == NULL || Lb == NULL) //多項式校驗</p><p><b>  {</b></p><

75、;p>  cout<<"您還未創(chuàng)建多項式,請先創(chuàng)建!"<<endl;</p><p><b>  return 0;</b></p><p><b>  }</b></p><p>  substractPolyn(L,La,Lb);</p><p&g

76、t;  cout<<"兩個多項式相減后的結果為:"<<endl;</p><p>  printList(L);</p><p>  destroyLink(L);</p><p><b>  return 0;</b></p><p><b>  }</b&g

77、t;</p><p>  int MulPolyn() //多項式相乘</p><p><b>  {</b></p><p><b>  Link L;</b></p><p>  if(La == NULL || Lb == NULL) //多項式校驗</p>

78、<p><b>  {</b></p><p>  cout<<"您還未創(chuàng)建多項式,請先創(chuàng)建!"<<endl;</p><p><b>  return 0;</b></p><p><b>  }</b></p><p>

79、  mulPolyn(L,La,Lb);</p><p>  cout<<"兩個多項式相乘后的結果為:"<<endl;</p><p>  printList(L);</p><p>  destroyLink(L);</p><p><b>  return 0;</b>&l

80、t;/p><p><b>  }</b></p><p>  int DesPolyn() //銷毀多項式</p><p><b>  {</b></p><p>  if(La == NULL || Lb == NULL) //多項式校驗</p><p&g

81、t;<b>  {</b></p><p>  cout<<"您還未創(chuàng)建多項式,請先創(chuàng)建!"<<endl;</p><p><b>  return 0;</b></p><p><b>  }</b></p><p>  if(La

82、 && Lb)</p><p><b>  {</b></p><p>  destroyLink(La);</p><p>  destroyLink(Lb);</p><p>  cout<<"銷毀成功!"<<endl;</p><p&g

83、t;<b>  }</b></p><p><b>  else </b></p><p><b>  { </b></p><p>  cout<<"您還未創(chuàng)建多項式,請先創(chuàng)建!"<<endl;</p><p><b> 

84、 }</b></p><p><b>  return 0;</b></p><p><b>  }</b></p><p>  int Clear() //清屏函數(shù)</p><p><b>  {</b></p><p><

85、;b>  char a;</b></p><p>  a = getchar();</p><p>  system("cls"); //system是DOS界面命令行操作函數(shù) cls是清屏命令 ,format d: /q 是格式化D盤命令</p><p>  cout<<"多項式系統(tǒng) v 2.0"

86、;<<endl;</p><p><b>  return 0;</b></p><p><b>  }</b></p><p>  int Help() //幫助函數(shù)</p><p><b>  {</b></p><p>  i

87、nt i = 0;</p><p>  int j = 0;</p><p>  int nSize = 0;</p><p>  cout<<"相關命令信息: "<<endl;</p><p>  for(i = 0; i < g_nCmdSize; i++)</p><

88、p><b>  { </b></p><p>  cout<<" "<<g_CmdInfo[i].pCmdName;</p><p>  nSize = strlen(g_CmdInfo[i].pCmdName);</p><p>  for(j = 0; j < 20 - nSi

89、ze; j++)</p><p><b>  {</b></p><p>  cout<<" ";</p><p><b>  }</b></p><p>  cout<<g_CmdInfo[i].pCmdInfo<<endl;</p&g

90、t;<p><b>  }</b></p><p><b>  return 0;</b></p><p><b>  }</b></p><p>  int Exit() //退出函數(shù)</p><p><b>  {</b>&

91、lt;/p><p><b>  exit(0);</b></p><p><b>  return 0;</b></p><p><b>  }</b></p><p>  void destroyLink(Link &L) //清空鏈表</p><p

92、><b>  {</b></p><p><b>  Link p;</b></p><p>  p = L->next;</p><p><b>  while(p)</b></p><p><b>  { </b></p>

93、<p>  L->next = p->next;</p><p><b>  delete p;</b></p><p>  p = L->next;</p><p><b>  }</b></p><p><b>  delete L;</b>&l

94、t;/p><p><b>  L = NULL;</b></p><p><b>  }</b></p><p>  /*判斷指數(shù)是否與多項式中已存在的某項相同*/</p><p>  int locateLink(Link L,Link e)</p><p><b>

95、  {</b></p><p><b>  Link p;</b></p><p>  p = L->next;</p><p>  while(p != NULL && (e->data.expn != p->data.expn))</p><p><b>  {

96、</b></p><p>  p = p->next;</p><p><b>  }</b></p><p>  if(p == NULL)</p><p><b>  {</b></p><p><b>  return 0;</b>

97、;</p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p><b>  return 1;</b></p><p><b>  }<

98、;/b></p><p><b>  }</b></p><p>  void createLink(Link &L,int n) //創(chuàng)建鏈表</p><p><b>  {</b></p><p>  Link p,newp;</p><p>  L =

99、 new LNode;</p><p>  L->next = NULL;</p><p>  (L->data).expn = -1;//創(chuàng)建頭結點</p><p><b>  p = L;</b></p><p>  for(int i = 1; i <= n; i++)</p>&l

100、t;p><b>  {</b></p><p>  newp = new LNode;</p><p>  cout<<"請輸入第"<<i<<"項的系數(shù)和指數(shù):"<<endl;</p><p>  cout<<"系數(shù): "

101、;;</p><p>  cin>>(newp->data).coef;</p><p>  cout<<"指數(shù): ";</p><p>  cin>>(newp->data).expn;</p><p>  if(newp->data.expn < 0)

102、//指數(shù)校驗</p><p><b>  {</b></p><p>  cout<<"您輸入有誤,指數(shù)不允許為負值!"<<endl;</p><p>  delete newp;</p><p><b>  i--;</b></p><

103、;p><b>  continue;</b></p><p><b>  }</b></p><p>  newp->next = NULL;</p><p><b>  p = L;</b></p><p>  if(newp->data.coef == 0

104、) //系數(shù)校驗</p><p><b>  {</b></p><p>  cout<<"系數(shù)為零,重新輸入!"<<endl;</p><p>  delete newp;</p><p><b>  i--;</b></p><p

105、><b>  continue;</b></p><p><b>  }</b></p><p>  while((p->next != NULL) && ((p->next->data).expn < (newp->data).expn)) </p><p>  {

106、 //指數(shù)排序</p><p>  p = p->next;</p><p><b>  }</b></p><p>  if(!locateLink( L, newp))</p><p><b>  {</b></p><p&g

107、t;  newp->next = p->next;</p><p>  p->next = newp;</p><p><b>  }</b></p><p><b>  else </b></p><p><b>  {</b></p><

108、;p>  cout<<"輸入的該項指數(shù)與多項式中已存在的某項相同,請重新創(chuàng)建一個正確的多項式"<<endl;</p><p>  delete newp;</p><p>  destroyLink(L);</p><p>  createLink(L,n);</p><p><b>

109、;  break;</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  /*輸出鏈表*/</b></p><p> 

110、 void printList(Link L)</p><p><b>  {</b></p><p><b>  Link p;</b></p><p>  if(L == NULL || L->next == NULL) //校驗</p><p><b>  {</b&g

111、t;</p><p>  cout<<"該一元多項式為空 !";</p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p>  p = L

112、->next; //跳過頭結點</p><p>  if((p->data).coef > 0 )</p><p><b>  { </b></p><p>  if((p->data).expn == 0)</p><p><b>  {</b></p>&

113、lt;p>  cout<<(p->data).coef;</p><p><b>  }</b></p><p><b>  else </b></p><p><b>  {</b></p><p>  if((p->data).coef ==

114、1 && (p->data).expn == 1)</p><p><b>  {</b></p><p>  cout<<"x";</p><p><b>  }</b></p><p><b>  else </b>&l

115、t;/p><p><b>  {</b></p><p>  if((p->data).coef == 1 && (p->data).expn != 1)</p><p><b>  {</b></p><p>  cout<<"x^"<

116、<(p->data).expn;</p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p>  if((p->data).expn == 1 && (p->

117、;data).coef != 1)</p><p><b>  {</b></p><p>  cout<<(p->data).coef<<"x";</p><p><b>  }</b></p><p><b>  else </b

118、></p><p><b>  {</b></p><p>  cout<<(p->data).coef<<"x^"<<(p->data).expn;</p><p><b>  }</b></p><p><b>

119、  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  if((p->data).coef < 0)</p><p><b&

120、gt;  { </b></p><p>  if((p->data).expn == 0)</p><p><b>  {</b></p><p>  cout<<(p->data).coef;</p><p><b>  }</b></p>

121、<p><b>  else </b></p><p><b>  { </b></p><p>  if(p->data.coef == -1 && p->data.expn == 1)</p><p><b>  {</b></p><p&

122、gt;  cout<<"-x";</p><p><b>  }</b></p><p><b>  else </b></p><p><b>  {</b></p><p>  if(p->data.coef == -1 &&a

123、mp; p->data.expn != 1)</p><p><b>  {</b></p><p>  cout<<"-x^"<<p->data.expn;</p><p><b>  }</b></p><p><b>  els

124、e </b></p><p><b>  {</b></p><p>  if(p->data.expn == 1)</p><p><b>  { </b></p><p>  cout<<p->data.coef<<"x";&l

125、t;/p><p><b>  }</b></p><p><b>  else </b></p><p><b>  {</b></p><p>  cout<<(p->data).coef<<"x^"<<(p->

126、;data).expn;</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }<

127、;/b></p><p>  p = p->next;</p><p>  while(p != NULL)</p><p><b>  {</b></p><p>  if((p->data).coef > 0)</p><p><b>  {</b>

128、;</p><p>  if((p->data).expn == 0) </p><p><b>  {</b></p><p>  cout<<"+"<<(p->data).coef;</p><p><b>  }</b></p>

129、;<p><b>  else </b></p><p><b>  {</b></p><p>  if((p->data).expn == 1 && (p->data).coef != 1) </p><p><b>  {</b></p>

130、<p>  cout<<"+"<<(p->data).coef<<"x";</p><p><b>  }</b></p><p><b>  else </b></p><p><b>  {</b><

131、/p><p>  if((p->data).expn == 1 && (p->data).coef == 1)</p><p><b>  {</b></p><p>  cout<<"+x";</p><p><b>  }</b></

132、p><p><b>  else </b></p><p><b>  {</b></p><p>  if((p->data).coef == 1 && (p->data).expn != 1)</p><p><b>  {</b></p&g

133、t;<p>  cout<<"+x^"<<(p->data).expn;</p><p><b>  }</b></p><p><b>  else </b></p><p><b>  {</b></p><p&g

134、t;  cout<<"+"<<(p->data).coef<<"x^"<<(p->data).expn;</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  

135、}</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  if((p->data).coef < 0)</p><p><b>  { </b></p><p>  if((p

136、->data).expn == 0)</p><p><b>  {</b></p><p>  cout<<(p->data).coef;</p><p><b>  }</b></p><p><b>  else </b></p>&

137、lt;p><b>  {</b></p><p>  if(p->data.coef == -1 && p->data.expn == 1)</p><p><b>  {</b></p><p>  cout<<"-x";</p><p

138、><b>  }</b></p><p><b>  else </b></p><p><b>  {</b></p><p>  if(p->data.coef == -1 && p->data.expn != 1)</p><p><

139、;b>  {</b></p><p>  cout<<"-x^"<<p->data.expn;</p><p><b>  }</b></p><p><b>  else </b></p><p><b>  {<

140、/b></p><p>  if(p->data.expn == 1)</p><p><b>  {</b></p><p>  cout<<p->data.coef<<"x";</p><p><b>  }</b></p>

141、;<p><b>  else </b></p><p><b>  {</b></p><p>  cout<<(p->data).coef<<"x^"<<(p->data).expn;</p><p><b>  }</

142、b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  p=p->next;</p&

143、gt;<p><b>  }</b></p><p><b>  }</b></p><p>  cout<<endl;</p><p><b>  }</b></p><p>  /*把一個鏈表的內(nèi)容復制給另一個鏈表*/</p><

144、;p>  void copyLink(Link &pc,Link pa)</p><p><b>  {</b></p><p>  Link p,q,r;</p><p>  pc = new LNode;</p><p>  pc->next = NULL;</p><p>

145、;<b>  r = pc;</b></p><p><b>  p = pa;</b></p><p>  while(p->next != NULL)</p><p><b>  {</b></p><p>  q = new LNode;</p>&l

146、t;p>  q->data.coef = p->next->data.coef; //跳過頭結點</p><p>  q->data.expn = p->next->data.expn;</p><p>  r->next = q;</p><p>  q->next = NULL;</p>

147、<p><b>  r = q;</b></p><p>  p = p->next;</p><p><b>  }</b></p><p><b>  }</b></p><p>  /*將兩個一元多項式相加*/</p><p>  

148、void addPolyn(Link &pc,Link pa,Link pb)</p><p><b>  { </b></p><p>  Link p1,p2,p,pd;</p><p>  /*以下為保護原多項式操作 分別復制到 p1、p2里*/</p><p>  copyLink(p1,pa);&l

149、t;/p><p>  copyLink(p2,pb);</p><p>  pc = new LNode;</p><p>  pc->next = NULL;</p><p><b>  p = pc;</b></p><p>  p1 = p1->next; //跳過頭結點</

溫馨提示

  • 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論