一元多項(xiàng)式的計(jì)算課程設(shè)計(jì)報(bào)告_第1頁
一元多項(xiàng)式的計(jì)算課程設(shè)計(jì)報(bào)告_第2頁
一元多項(xiàng)式的計(jì)算課程設(shè)計(jì)報(bào)告_第3頁
一元多項(xiàng)式的計(jì)算課程設(shè)計(jì)報(bào)告_第4頁
一元多項(xiàng)式的計(jì)算課程設(shè)計(jì)報(bào)告_第5頁
已閱讀5頁,還剩5頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

合肥學(xué)院

計(jì)算機(jī)科學(xué)與技術(shù)系課程設(shè)計(jì)報(bào)告2008?2009學(xué)年第二學(xué)期課程程序設(shè)計(jì)語言II課程設(shè)計(jì)課程設(shè)計(jì)名稱多項(xiàng)式的計(jì)算學(xué)生姓名王建敏學(xué)號(hào)0804013029專業(yè)班級(jí)計(jì)算機(jī)科學(xué)與技術(shù)(3)班指導(dǎo)教師張貫虹汪彩梅2009年6月一、課程設(shè)計(jì)題目:多項(xiàng)式(單項(xiàng)鏈表的應(yīng)用)二、分析與設(shè)計(jì)程序的基本功能(1)建立多項(xiàng)式(2)輸出多項(xiàng)式(3)刪除多項(xiàng)式以釋放空間(4)刪除多項(xiàng)式中的某一項(xiàng)(5)將多項(xiàng)式合并同類項(xiàng)(6)拷貝多項(xiàng)式(7)將多項(xiàng)式按指數(shù)升序排列(8)判斷兩多項(xiàng)式是否相等(9)兩個(gè)多項(xiàng)式相加,建立并輸出和多項(xiàng)式(10)兩個(gè)多項(xiàng)式相減,建立并輸出差多項(xiàng)式(11)兩個(gè)多項(xiàng)式相乘,建立并輸出積多項(xiàng)式(12)兩個(gè)多項(xiàng)式相除,建立并輸出商多項(xiàng)式算法設(shè)計(jì)本程序主要應(yīng)用了鏈表,結(jié)構(gòu)體和類模板。用結(jié)構(gòu)體來定義多項(xiàng)式的結(jié)點(diǎn)(即每一項(xiàng)),它包含三個(gè)域,分別存放該項(xiàng)的系數(shù)、指數(shù)以及指向下一項(xiàng)結(jié)點(diǎn)的指針;用鏈表來存儲(chǔ)多項(xiàng)式,為了節(jié)省空間,只存儲(chǔ)多項(xiàng)式中系數(shù)非0的項(xiàng),用多項(xiàng)式鏈表類來實(shí)現(xiàn)設(shè)定的程序的基本功能。涉及的主要算法有:(1)使用尾插法創(chuàng)建多項(xiàng)式,即從一個(gè)空表開始,重復(fù)讀入數(shù)據(jù),生成新結(jié)點(diǎn),將讀入數(shù)據(jù)存放在新結(jié)點(diǎn)的數(shù)據(jù)域中,然后將新結(jié)點(diǎn)插入到當(dāng)前鏈表的表尾上,直到讀入結(jié)束標(biāo)志(某一項(xiàng)的系數(shù)為零)為止。(2)輸出一個(gè)非空的多項(xiàng)式鏈表,不要輸出最后一項(xiàng),即輸入系數(shù)為零的結(jié)束項(xiàng),用if……else語句判斷。(3)刪除整個(gè)多項(xiàng)式是一項(xiàng)一項(xiàng)的刪,使用鏈表刪除其結(jié)點(diǎn)的方法,使用free()函數(shù)釋放存儲(chǔ)空間。在刪除非空的多項(xiàng)式的某一項(xiàng)時(shí),定義k來找到要?jiǎng)h除的那一項(xiàng)的位置,再使用delete將其刪除。(4)在對(duì)多項(xiàng)式合并同類項(xiàng)時(shí),主要有兩點(diǎn),一是看兩項(xiàng)指數(shù)是否相等,若相等則合并成一項(xiàng),二是看兩項(xiàng)系數(shù)和是否為零,若為零則去掉這兩項(xiàng)。在對(duì)多項(xiàng)式排序時(shí),先合并同類項(xiàng),再按指數(shù)值從小到大排序。(5)在拷貝多項(xiàng)式時(shí)使用重載函數(shù),將系數(shù)和指數(shù)都拷貝給新的多項(xiàng)式。(6)在判斷兩多項(xiàng)式是否相等時(shí),先分別對(duì)兩多項(xiàng)式進(jìn)行排序,再從頭項(xiàng)開始,一項(xiàng)一項(xiàng)的比較其系數(shù)和指數(shù),一旦有一個(gè)不相等就結(jié)束,即這兩多項(xiàng)式不相等,否則相等。(7)計(jì)算多項(xiàng)式加減,其算法思想是相同的。以多項(xiàng)式加法為例,先對(duì)兩多項(xiàng)式排序,再將兩多項(xiàng)式的每一項(xiàng)逐項(xiàng)相加,在相加之前,先比較兩項(xiàng)的指數(shù)是否相等,若相等則將系數(shù)相加,再判斷系數(shù)是否為零,若為零則刪除,否則存儲(chǔ)在和多項(xiàng)式中。若兩項(xiàng)指數(shù)不相等,當(dāng)多項(xiàng)或a指數(shù)大于多項(xiàng)式pb指數(shù)時(shí),則將pa結(jié)點(diǎn)副本插入到和多項(xiàng)式PolyC尾部;當(dāng)pa指數(shù)小于pb指數(shù)時(shí),則將pb結(jié)點(diǎn)副本插入到和多項(xiàng)式PolyC尾部,最后插入剩余結(jié)點(diǎn)。計(jì)算多項(xiàng)式乘法時(shí),先判斷兩多項(xiàng)式是否為空,若為空,則返回乘多項(xiàng)式,否則要先對(duì)兩多項(xiàng)式進(jìn)行合并排序,先將兩多項(xiàng)式的第一項(xiàng)相乘,即系數(shù)相乘,指數(shù)相加,其值作為乘多項(xiàng)式的第一結(jié)點(diǎn),其后使用雙重循環(huán)將一多項(xiàng)式的每一項(xiàng)與另一多項(xiàng)式的每一項(xiàng)分別相乘,結(jié)果存到乘多項(xiàng)式中。計(jì)算多項(xiàng)式除法時(shí),同樣要判斷兩多項(xiàng)式是否為空,只要有一為空,則直接返回空,否則將一多項(xiàng)式整個(gè)除以另一多項(xiàng)式,系數(shù)相除,指數(shù)相減,結(jié)果存到商多項(xiàng)式中。3.系統(tǒng)總框圖4.定義的主要函數(shù)及說明CreatePoly()創(chuàng)建多項(xiàng)式鏈表OutputPoly()輸出多項(xiàng)式DestroyPoly()完全刪除多項(xiàng)式DelPoly()刪除多項(xiàng)式中的某一項(xiàng)EqualPoly()判斷兩多項(xiàng)式是否相等MergePoly()-將多項(xiàng)式和并同類項(xiàng)SortPoly()將多項(xiàng)式按升序排列PolyAdd()多項(xiàng)式和的計(jì)算PolySub()多項(xiàng)式差的計(jì)算PolyMutiply()多項(xiàng)式積的計(jì)算PolyDivide()多項(xiàng)式商的計(jì)算三、系統(tǒng)實(shí)施源程序代碼(見后附錄)上機(jī)調(diào)試過程調(diào)試中遇到的主要問題問題一:開始用類來定義多項(xiàng)式鏈表的結(jié)點(diǎn),即typedefstructPolyNode{}PolyNode,*PolyList,并將三個(gè)數(shù)據(jù)域設(shè)為私有成員,系統(tǒng)報(bào)錯(cuò)。問題二:將多項(xiàng)式類的析構(gòu)函數(shù)體寫為:~Polynomial(){deletehead;deleterear;deleteLength;},系統(tǒng)報(bào)錯(cuò)。問題三:在記錄多項(xiàng)式項(xiàng)數(shù)Length時(shí),在創(chuàng)建多項(xiàng)式的函數(shù)體內(nèi),寫成:Length=n-1,編譯通過,可運(yùn)行結(jié)果不正確,多了一項(xiàng)。問題四:在多項(xiàng)式類中所定義的兩個(gè)多項(xiàng)式的加減乘除及判斷是否相等這些功能函數(shù)本來用的是友元函數(shù)(也應(yīng)該用友元函數(shù)),例對(duì)多項(xiàng)式的加法用的是函數(shù)friendPolyListPolyAdd(PolyList&PolyA,PolyList&PolyB)系統(tǒng)報(bào)錯(cuò)。問題五:在程序運(yùn)行過程中出現(xiàn)錯(cuò)誤errorC2955:'Polynomial':useofclasstemplaterequirestemplateargumentlist。解決問題解決題一:根據(jù)錯(cuò)誤提示發(fā)現(xiàn)多項(xiàng)式類成員函數(shù)的實(shí)現(xiàn)不能訪問結(jié)點(diǎn)類的私有成員,在結(jié)點(diǎn)類里添加一個(gè)友元類friendclassPolynomial,運(yùn)行后還是有錯(cuò)誤,經(jīng)過反復(fù)修改,根據(jù)提示意識(shí)到自己不能解決typedef在類模板中的正確使用,導(dǎo)致反復(fù)不能運(yùn)行,最后將多項(xiàng)式鏈表的結(jié)點(diǎn)用結(jié)構(gòu)體來定義,即用typedefstructPolyNode{}PolyNode,*PolyList,運(yùn)行最終正確。解決題二:根據(jù)錯(cuò)誤提示將析構(gòu)函數(shù)改為:~Polynomial(){deletehead;deleterear;},運(yùn)行對(duì)。解決題三:根據(jù)運(yùn)行的錯(cuò)誤結(jié)果將錯(cuò)誤代碼改為:Length=n-2,運(yùn)行正確。解決題四:據(jù)錯(cuò)誤提示應(yīng)該是PolyA本是指針成員,在前加上地址運(yùn)算符&會(huì)出錯(cuò),且PolyList非類名,故系統(tǒng)報(bào)錯(cuò)。將&全部去掉,運(yùn)行仍錯(cuò)誤,反復(fù)對(duì)其修改,都不能運(yùn)行,最后將友元函數(shù)改為普通函數(shù),如上面的加法函數(shù)改為PolyListPolyAdd(PolyListPolyA,PolyListPolyB),運(yùn)行正確(雖然不該在多項(xiàng)式類中定義這樣的函數(shù),因?yàn)檫@些功能并非多項(xiàng)式的基本行為,但畢竟個(gè)人能力有限,只希望以后掌握更多的知識(shí)來進(jìn)行彌補(bǔ))。解決題五:根據(jù)錯(cuò)誤指示位置發(fā)現(xiàn)在使用類模板的地方出現(xiàn)了問題,誤將voidPolynomial<T>::MergePoly(PolyListPoly)寫為voidPolynomial::MergePoly(PolyListPoly),了解到在實(shí)現(xiàn)模板類的成員函數(shù)時(shí),要加上<T>來限制。算法改進(jìn)設(shè)想自己的課程設(shè)計(jì)還不夠完善,有些功能未設(shè)計(jì)到,有很多需要改進(jìn)的地方,現(xiàn)列舉以下幾個(gè)改進(jìn)設(shè)想:設(shè)想一:希望可以對(duì)某一個(gè)多項(xiàng)式進(jìn)行插入一項(xiàng)或插入另一個(gè)多項(xiàng)式。設(shè)想二:用類來定義多項(xiàng)式鏈表的結(jié)點(diǎn),添加構(gòu)造函數(shù)、拷貝構(gòu)造函數(shù)和析構(gòu)函數(shù)等基本類函數(shù),使用友元類訪問結(jié)點(diǎn)的私有成員。設(shè)想三:對(duì)兩個(gè)多項(xiàng)式間的加減乘除及判斷是否相等使用友元函數(shù)來實(shí)現(xiàn),因?yàn)檫@些功能并非多項(xiàng)式的行為。設(shè)想四:希望可以用磁盤文件輸入數(shù)據(jù),并完整的清晰的將運(yùn)行結(jié)果進(jìn)行保存。設(shè)想五:希望自己做的系統(tǒng)界面更加美觀、實(shí)用,令讀者運(yùn)行快樂。設(shè)想六:可以用重載函數(shù)來實(shí)現(xiàn)多項(xiàng)式間的加減乘除運(yùn)算,重載運(yùn)算符“+、一、X、\”,但也必須使用友元函數(shù)來寫。經(jīng)驗(yàn)與體會(huì)雖然課程設(shè)計(jì)做的不夠完善,但在設(shè)計(jì)的過程中受益匪淺,通過查資料等學(xué)到了很多以前不知道或不太會(huì)應(yīng)用的知識(shí),主要包括以下幾點(diǎn):對(duì)typedef的應(yīng)用有了新的認(rèn)識(shí)。如typedefint*bom將int另命名為*bom,則用bom定義的類型為int指針類型的指針,例如bomn,則n為int型的指針。typedef有利于程序的通用和移植。最主要的是對(duì)單向鏈表的使用有了更深刻的了解和掌握,因?yàn)槎囗?xiàng)式的計(jì)算要求用單向鏈表來實(shí)現(xiàn),所以在做課程設(shè)計(jì)之前通過網(wǎng)上找資料,查參考書及問輔導(dǎo)老師等對(duì)單向鏈表的使用比以前掌握的更加到位,并且能夠靈活運(yùn)用,通篇幾乎用的都是單向鏈表,這是受益的一大重點(diǎn)。更正了對(duì)運(yùn)算符delete的使用,以前一直以為delete可以刪除一切基本數(shù)據(jù)類型的數(shù)據(jù),以釋放它們的空間,可運(yùn)行報(bào)錯(cuò)。通過查看課本發(fā)現(xiàn)delete是用來刪除由new建立的對(duì)象,釋放指針?biāo)赶虻膬?nèi)存空間,格式為:delete指針名,這可以與運(yùn)算符new一起記憶,new的功能是動(dòng)態(tài)分配內(nèi)存。對(duì)重載運(yùn)算符的使用也比以前更加深入,本程序是使用了重載賦值運(yùn)算符“=”,來實(shí)現(xiàn)對(duì)多項(xiàng)式的拷貝,深記重載函數(shù)的一般語法形式為:函數(shù)類型operator運(yùn)算符(形參表){函數(shù)體}。由于課程設(shè)計(jì)中要求使用模板,為了正確使用模板,學(xué)習(xí)了很多關(guān)于模板使用的方法及注意事項(xiàng),促使我對(duì)類模板的使用有了更深一步的理解,牢記在類模板以外定義成員函數(shù),需采用以下的形式:(模板參數(shù)表用classT或typenameT,常用前者。)template<模板參數(shù)表〉類型名類名<T>::函數(shù)名(參數(shù)表)5)不足之處本程序最大的不足便在于計(jì)算多項(xiàng)式的加減乘除和判斷兩多項(xiàng)式是否相等未使用友元函數(shù),雖然程序仍能正確運(yùn)行,但從本質(zhì)上講,不用友元函數(shù)是不正確的,因?yàn)檫@些功能并非單個(gè)多項(xiàng)式所具有的行為。本程序另一不足之處在于對(duì)磁盤文件的處理不規(guī)范,它只能存儲(chǔ)程序運(yùn)行結(jié)果所輸出的多項(xiàng)式,而不能存儲(chǔ)多項(xiàng)式前的說明文字,如對(duì)某一多項(xiàng)式進(jìn)行合并同類項(xiàng),屏幕上顯示的是“合并后的PolyA為:6xA3+3.5xA7”,但文件里保存的只是“6xA3+3.5xA7”,讓旁觀者不清楚這是什么函數(shù)功能運(yùn)行的結(jié)果。這些不足主要是因?yàn)樽约簩?duì)知識(shí)的掌握不是很牢固,不能正確靈活運(yùn)用所學(xué)知識(shí)。針對(duì)這些不足,我以后要認(rèn)真學(xué)習(xí)這些不足的知識(shí),深刻理解并掌握它們。測(cè)試結(jié)果及其分析運(yùn)行說明:運(yùn)行程序后,先出現(xiàn)以下主菜單:(說明:界面縮小了)幫助請(qǐng)按創(chuàng)建一元多項(xiàng)式請(qǐng)按輸出一元多項(xiàng)式請(qǐng)按修改一元多項(xiàng)式請(qǐng)按拷貝一元多項(xiàng)式請(qǐng)按重新創(chuàng)建多項(xiàng)式請(qǐng)技進(jìn)入多項(xiàng)式運(yùn)算菜單請(qǐng)按退出系統(tǒng)請(qǐng)按Q〈Quit〉四"D:\MyDocijJTients\學(xué)習(xí)\C++學(xué)習(xí)、課程設(shè)計(jì)\Debug\Polynonnal.exe歡迎進(jìn)入一元多項(xiàng)式計(jì)算程序-%O洪O洪O米O米O淤O洪O洪O米O洪O送※云※※※※※※※※云云※※米米※※※送送※※云※※※※※※※去※※米?「-送O送O淤O淤O淤O洪O云O洪O米O淤O米.※※※※云※※※※※云云※※米米※※※送送※※米※※.※※※※※云※去※.睛按照菜單指示選擇操作:上面有提示語句,分別按照這些提示語句進(jìn)行選擇,就會(huì)出現(xiàn)相應(yīng)的菜單。-I口|x選WWW示的的物的物指式式式式式單項(xiàng)項(xiàng)項(xiàng)項(xiàng)項(xiàng)-I口|x選WWW示的的物的物指式式式式式單項(xiàng)項(xiàng)項(xiàng)項(xiàng)項(xiàng)蒙多多多富照人A-A-A-人一志S3D:\MyDoci-unents\學(xué)習(xí)\C++學(xué)習(xí)'課程設(shè)計(jì)\Debug\Polynomial.exe幫助此一元多項(xiàng)式計(jì)算系統(tǒng)的主要功能為:〈1〉對(duì)于一個(gè)多項(xiàng)式,可以進(jìn)行創(chuàng)建,輸出,刪除,修改及拷貝;〈2〉對(duì)于兩個(gè)多項(xiàng)式,可以判斷是否相等,并進(jìn)行加減乘除基本運(yùn)算。希望進(jìn)入此系統(tǒng)的人能夠獲得需要的信息,謝謝使用!隋輸入R返回主菜單嘴聯(lián)照菜單指示選擇操作:4)創(chuàng)建PolyA多項(xiàng)式函‘D:\MyDocuinents\學(xué)習(xí)"C++學(xué)習(xí)、課程設(shè)計(jì)\Detiug\PolynojTiial.exew5)先輸出PolyA并記錄項(xiàng)數(shù),再刪除PolyA4)對(duì)剛未刪除的PolyA修改,進(jìn)入修改菜單函D:\HtyDucmients、?學(xué)習(xí)'C++?學(xué)習(xí)'課程設(shè)計(jì)\Debug\Polynomial.exe-|i5|X晴按照菜單指示選擇操作:4XXXXXXMXXJ<X1O<KJ<喧了又尤迎i井/、¥多工Si式修改.序HXXXXXNXXXXNXNNJC★★★★★★★★★★★★★★★★★gmgNXXXXNXNXXXKNXXXXNXNXXXKXXXNXXXXNXNXXXKXXXNXXXXNXNXXXKXXX★★★★☆☆☆☆統(tǒng)項(xiàng)項(xiàng)出系一某退除并察刪富女■■■■dESQ☆☆☆☆★★★★KXXXKNK*HXKNKXXXKNK*HXKNKXXXKNK*HXKN隋技照菜單指示選擇操作:d隋輸入肝刪除第幾項(xiàng):2刪除后J<JPolyA為:2xA3+4xA3+3.5xA7情管照房單指示選擇操作:"冶并后的PolyA^:6xA3+3.5xA7情按照葦單指示選擇操作:S腓序后的Pol伸為:3.5xA7+6xA3睛按照菜單指示選擇操作:.-|n|x|5)拷貝PolyA,再創(chuàng)建一個(gè)PolyB多項(xiàng)式并輸出-|n|x|四D:\MyDocuinentsl學(xué)習(xí)\C++學(xué)習(xí)'.課程設(shè)計(jì)\Debug\P口lynDmial.exe按照葦單指示選擇操作:5貝后的Poly7^:3.5xA7+6xA3乏照葦單指示選擇操作:6N入多項(xiàng)式的真項(xiàng)的系數(shù)和指數(shù):N入多項(xiàng)式的害項(xiàng)的系數(shù)和由數(shù):斤入多項(xiàng)式的害項(xiàng)的系數(shù)和魚數(shù):亦入多項(xiàng)式的害項(xiàng)的系數(shù)和瑁數(shù):亦入多項(xiàng)式的竄5項(xiàng)的系數(shù)和輅數(shù):g的PolyB^J:2xA5+4.5xA3+9x^7+56)進(jìn)入多項(xiàng)式運(yùn)算菜單(加減乘除及判斷兩多項(xiàng)式是否相等)

SD:\MyDgumwt或?qū)W習(xí)\C++^習(xí)k課程設(shè)liADmbugW口lynonaalMKm-Hxl主一冬棗枚棗仗按^fll'lH請(qǐng)請(qǐng)請(qǐng)請(qǐng)相磐秋*綻式之之之之苗布系項(xiàng)式式式式主出多項(xiàng)項(xiàng)項(xiàng)項(xiàng)回退兩多多多多返接斷^直■■,■■■■■■明二」:I按nsNDRQ情按照¥單指示選枝操作"F兩個(gè)多項(xiàng)式不相霸草攜照萊單指示選擇操作;aPolvfi+Po1VB:12.5xA7*2xA5+5.5xA4+10.5xA3值按照菜單指示選擇操作:sPolyfi-PolyB:-5,5xA7+-2xA5+-5.5xA4+l.5xA3草按照菜單指示選擇操作:MPolyfi*PolyB!31.5xA14+7xA12+19.2GxAll+G9.

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論