軟件課設(shè)實(shí)驗(yàn)報(bào)告_第1頁(yè)
軟件課設(shè)實(shí)驗(yàn)報(bào)告_第2頁(yè)
軟件課設(shè)實(shí)驗(yàn)報(bào)告_第3頁(yè)
軟件課設(shè)實(shí)驗(yàn)報(bào)告_第4頁(yè)
軟件課設(shè)實(shí)驗(yàn)報(bào)告_第5頁(yè)
已閱讀5頁(yè),還剩20頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、北京信息科技大學(xué)計(jì)算機(jī)軟件基礎(chǔ)課程設(shè)計(jì)題 目: 鏈表多項(xiàng)式運(yùn)算 學(xué) 院: 信息與通信工程學(xué)院 專 業(yè): 通信工程專業(yè) 學(xué)生姓名: 班級(jí)/學(xué)號(hào) 指導(dǎo)老師: 起止時(shí)間: 2015年10月至 2015年11月 5日 源代碼任務(wù)書題目4鏈表多項(xiàng)式運(yùn)算主要內(nèi)容1、 掌握多項(xiàng)式鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)及運(yùn)算方法,例如插入、刪除、創(chuàng)建等,完成一元多項(xiàng)式加法和乘法運(yùn)算。2、 根據(jù)多項(xiàng)式求和、求積原理,實(shí)現(xiàn)多項(xiàng)式的建立、求和、求積、顯示、釋放,插入排序等功能。例如:輸入:5x3+1.2x+4.5x2; -1.2x+1加法結(jié)果:14.5x2+5x3;乘法結(jié)果:1.2x+3.06x2-0.4x3-6x43、 學(xué)會(huì)編寫DLL函數(shù)

2、。4、 掌握C+編程環(huán)境的基本調(diào)試方法,熟練使用可視化C+編程工具。設(shè)計(jì)要求1、 上交課程設(shè)計(jì)的書面材料,要求打印。包括課程設(shè)計(jì)任務(wù)書、主要內(nèi)容,源程序,對(duì)程序的功能進(jìn)行客觀評(píng)價(jià),明確指出自己編寫了哪些具體函數(shù)。2、 上交電子版源程序,包括多項(xiàng)式求和、求積、插入、刪除、鏈表創(chuàng)建、排序等程序。3、自己編寫一個(gè)求素?cái)?shù)函數(shù),把它書寫成一個(gè)動(dòng)態(tài)鏈接庫(kù)形式,并在主函數(shù)中調(diào)用它。嘗試把自己編寫的程序?qū)懗蓜?dòng)態(tài)鏈接庫(kù)和靜態(tài)鏈接庫(kù)形式(無(wú)需上交),并比較以下三種EXE文件的大小。A:調(diào)用靜態(tài)鏈接庫(kù)生成的EXE執(zhí)行文件。B:調(diào)用動(dòng)態(tài)鏈接庫(kù)生成的EXE執(zhí)行文件。C:直接調(diào)用函數(shù)生成的EXE執(zhí)行文件。主要儀器設(shè)備計(jì)算

3、機(jī)一臺(tái),安裝Windows XP 操作系統(tǒng)、Microsoft Visual C+ 6.0、MSDN Library。主要參考文獻(xiàn)1 侯俊杰. 深入淺出MFC(第二版)M. 武漢:華中科技大學(xué)出版社, 2001.2 譚浩強(qiáng). C程序設(shè)計(jì)(第二版)M. 北京:清華大學(xué)出版社, 1999.3 孟彩霞. 計(jì)算機(jī)軟件基礎(chǔ)M. 陜西:西安電子科技大學(xué)出版社, 2003.4 嚴(yán)蔚敏, 吳偉民. 數(shù)據(jù)結(jié)構(gòu)M. 北京:清華大學(xué)出版社, 2005.課程設(shè)計(jì)進(jìn)度計(jì)劃(起止時(shí)間、工作內(nèi)容)4 學(xué)時(shí) 了解課題背景,選題,學(xué)習(xí)DLL,學(xué)習(xí)鏈表的基本概念。4 學(xué)時(shí) 編寫求和程序。4 學(xué)時(shí) 編寫求積程序。4 學(xué)時(shí) 完善功能

4、,編寫排序程序。4 學(xué)時(shí) 調(diào)試程序,答辯。課程設(shè)計(jì)開始日期第2周周一課程設(shè)計(jì)完成日期第2周周五課程設(shè)計(jì)實(shí)驗(yàn)室名稱計(jì)算中心機(jī)房地 點(diǎn)健翔橋校區(qū)摘要: 用C語(yǔ)言實(shí)現(xiàn)一元多項(xiàng)式的運(yùn)算.利用鏈表實(shí)現(xiàn)一元多項(xiàng)式運(yùn)算的存儲(chǔ),該程序具有加法、乘法基本運(yùn)算功能。程序的各個(gè)功能模塊全部用函數(shù)的形式實(shí)現(xiàn)。 關(guān)鍵字:多項(xiàng)式 運(yùn)算 函數(shù) 鏈表內(nèi)容:1、 根據(jù)多項(xiàng)式求和、求積原理以及程序框架,分別編寫函數(shù)createpoly,polyadd,polymulti,Clearlist,InserNode,實(shí)現(xiàn)多項(xiàng)式的建立、求和、求積、顯示、釋放、插入排序等功能。2、 比較多項(xiàng)式相加運(yùn)算與歸并兩個(gè)有序表的異同3、 Inser

5、Node函數(shù)的功能是什么? 目錄 一 概述4二 總體方案設(shè)計(jì)4三 詳細(xì)設(shè)計(jì)6四 程序的調(diào)試與運(yùn)行結(jié)果說(shuō)明12五 課程設(shè)計(jì)總結(jié)13參考文獻(xiàn)14附錄:程序源代碼14一 概述1. 課程設(shè)計(jì)的目的掌握多項(xiàng)式鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)及運(yùn)算方法,例如插入、刪除、創(chuàng)建等,完成一元多項(xiàng)式加法和乘法運(yùn)算。2. 課程設(shè)計(jì)的要求1用C語(yǔ)言實(shí)現(xiàn)一元多項(xiàng)式的運(yùn)算.2利用鏈表實(shí)現(xiàn)一元多項(xiàng)式運(yùn)算的存儲(chǔ).3該程序具有加法、減法、乘法基本運(yùn)算功能.4. 程序的各個(gè)功能模塊要求用函數(shù)的形式實(shí)現(xiàn).5. 完成設(shè)計(jì)任務(wù)并書寫課程設(shè)計(jì)報(bào)告。二 總體方案設(shè)計(jì)1程序設(shè)計(jì)對(duì)多項(xiàng)式存儲(chǔ)的解釋與說(shuō)明:多項(xiàng)式,顧名思義是含有多個(gè)單項(xiàng)式的,所以很容易讓程序員聯(lián)想

6、到的是鏈?zhǔn)絾捂湵?,因?yàn)殒準(zhǔn)降膯捂湵肀软樞虻牟僮黛`活,鏈?zhǔn)降谋阌诓迦牒蛣h除。我對(duì)多項(xiàng)式的存儲(chǔ)思考了很多常見的輸入錯(cuò)誤,必須要對(duì)輸入的每個(gè)單項(xiàng)式進(jìn)行校驗(yàn),符合條件的就存入,反之就刪除并提示重新輸入,所以我的程序中也是選擇鏈?zhǔn)絾捂湵韥?lái)存儲(chǔ)多項(xiàng)式的,這樣就給我程序后期的算法設(shè)計(jì)帶來(lái)了很多的好處。頭結(jié)點(diǎn)coef(0)expn(-1)next如上頭結(jié)點(diǎn),是采用的結(jié)構(gòu)體形式,其中大的方面分為兩個(gè)域,分別為data域和next域,其中data域又是一個(gè)嵌套的結(jié)構(gòu)體,里面又分為coef 和expn兩個(gè)域,而next域是指向下一個(gè)結(jié)點(diǎn)的指針域。初始化頭結(jié)點(diǎn)時(shí),我將coef 和expn賦初值為 0 和 -1,因?yàn)轭^

7、結(jié)點(diǎn)在整個(gè)算法中都沒(méi)有參與計(jì)算,只是起到一個(gè)連接的作用,而其指數(shù)域expn為 -1 是起標(biāo)志性的作用。整體設(shè)計(jì)思路:模仿DOS界面,用命令行來(lái)操控整個(gè)程序的運(yùn)行;算法的整體思路:先寫命令行函數(shù),然后將一元多項(xiàng)式運(yùn)算的函數(shù)插入到命令行函數(shù)中,以達(dá)到函數(shù)調(diào)用的目的;主要特點(diǎn):可以實(shí)現(xiàn)一元多項(xiàng)式的DOS界面命令操控;具體功能:用命令調(diào)用函數(shù),以實(shí)現(xiàn)一元多項(xiàng)式的存儲(chǔ)、相加、相乘的功能,還有顯示、銷毀等命令。2.主要問(wèn)題解決我的設(shè)計(jì)是實(shí)現(xiàn)一元多項(xiàng)式的存儲(chǔ)、相加、相乘的功能,而我就想到了模仿DOS界面命令形式,采用命令操作來(lái)實(shí)現(xiàn)本次課程設(shè)計(jì)的要求。3.程序的主要模塊如上1、2所提到的,我采用的是模仿DOS

8、命令界面來(lái)實(shí)現(xiàn)多項(xiàng)式的存儲(chǔ)以及其相加、相乘等功能。所以我設(shè)計(jì)的程序模塊主要有兩大模塊,其分別為命令行調(diào)用模塊和一元多項(xiàng)式的存儲(chǔ)、運(yùn)算模塊。3.1命令行調(diào)用模塊在此模塊中,我也使用了結(jié)構(gòu)體來(lái)存儲(chǔ)相關(guān)命令,但這里采用的是順序的鏈表,因?yàn)樵谑褂妹钚泻瘮?shù)的時(shí)候會(huì)有指針偏移尋找相關(guān)命令的函數(shù)指針,所以用順序有利益控制循環(huán)使用。命令行的節(jié)點(diǎn)形式,pCmdName為命令名,pCmdInfo為命令的功能說(shuō)明,pFun是自定義的一個(gè)函數(shù)指針內(nèi)型,也就是存儲(chǔ)相關(guān)命令的函數(shù)指針。*pCmdName*pCmdInfo;pFun命令行順序表g_CmdInfo然后就寫了一個(gè)命令行輸入函數(shù)CmdProc,在此函數(shù)里面用w

9、hile循環(huán)來(lái)輸入相關(guān)的命令,用庫(kù)函數(shù)strcmp來(lái)核對(duì)輸入的命令,以達(dá)到調(diào)用相關(guān)命令函數(shù)的效果。而相關(guān)命令函數(shù)里面就調(diào)用下面模塊中的相關(guān)函數(shù)。3.2一元多項(xiàng)式的存儲(chǔ)、運(yùn)算模塊在此模塊中,我使用的鏈?zhǔn)絾捂湵韥?lái)存儲(chǔ)多項(xiàng)式的,相關(guān)的介紹看上面的 1.程序設(shè)計(jì) 中的詳細(xì)說(shuō)明。 此模塊主要的幾大功能函數(shù)為createLink創(chuàng)建鏈表,printList輸出鏈表,addPolyn相加函數(shù),substractPolyn相減函數(shù),mulPolyn相乘函數(shù)。還有相關(guān)的輔助函數(shù)copyLink復(fù)制多項(xiàng)式函數(shù),locateLink核對(duì)單項(xiàng)式函數(shù),destroyLink銷毀結(jié)點(diǎn)函數(shù)。copyLinklocateLi

10、nkdestroyLinkcreateLinkprintListaddPolynsubstractPolynmulPolyn相關(guān)的主要函數(shù)和輔助函數(shù)之間的聯(lián)系如上所示。 三 詳細(xì)設(shè)計(jì)1.一元多項(xiàng)式運(yùn)算函數(shù)設(shè)計(jì)1.1創(chuàng)建多項(xiàng)式的過(guò)程編寫此過(guò)程中,我采用了鏈?zhǔn)絾捂湵淼男问?,固然最后一個(gè)區(qū)域是指針next域,其中多項(xiàng)式結(jié)點(diǎn)中data域里又嵌套了一個(gè)結(jié)構(gòu)體,即將data域劃分為系數(shù)coef和指數(shù)expn兩個(gè)區(qū)域。 頭結(jié)點(diǎn)coef(0)expn(-1)next15 2next 23 5next 17 8NULL這是創(chuàng)建多項(xiàng)式的過(guò)程,此多項(xiàng)式為15*x2+23x23+17x8 ,當(dāng)然了在創(chuàng)建多項(xiàng)式的過(guò)程中

11、還有更為細(xì)密的校驗(yàn),如:(在輸入的過(guò)程中)1.指數(shù)為負(fù)校驗(yàn):2.系數(shù)為 0 的校驗(yàn):3.輸入指數(shù)相同的校驗(yàn):黑體函數(shù)locateLink是一個(gè)判斷指數(shù)是否與多項(xiàng)式中已存在的某項(xiàng)相同。補(bǔ)充: 在校驗(yàn)3之前必須將每次輸入的單項(xiàng)式按從小到大的順序排列,這也為locateLink和下面的相加、相減函數(shù)做了簡(jiǎn)單的鋪墊。我采用的遍歷發(fā)找到每次輸入的單項(xiàng)式應(yīng)在的位置,然后插入。 1.2 多項(xiàng)式輸出實(shí)現(xiàn)過(guò)程在輸出之前必須對(duì)傳入?yún)?shù)指針進(jìn)行校驗(yàn):本來(lái)一開始我想的是從多項(xiàng)式的第一個(gè)結(jié)點(diǎn)一次輸出,這樣很簡(jiǎn)單啊,可是我發(fā)現(xiàn)這樣的通用性很差,所以我就想到了先將第一個(gè)結(jié)點(diǎn)分開輸出,然后再依次用循環(huán)輸出其它結(jié)點(diǎn),這樣就大大

12、地提高了此函數(shù)的通用效果。同時(shí)在輸出各結(jié)點(diǎn)時(shí),我還對(duì)系數(shù)、指數(shù)進(jìn)行了討論,(系數(shù)不可能為0)以多項(xiàng)式的第一項(xiàng)系數(shù)大于0的情況輸出為例,如下:如果指數(shù)為0時(shí),只輸出系數(shù)如果系數(shù)和指數(shù)都為1時(shí)就不用輸出1,只輸出x如果系數(shù)或指數(shù)其中一個(gè)為1的時(shí)候,也不用輸出1,其它的照原樣輸出: 1.3多項(xiàng)式相加過(guò)程在兩個(gè)多項(xiàng)式相加對(duì)其進(jìn)行了保護(hù),將兩個(gè)多項(xiàng)式分別復(fù)制給了另外兩個(gè)多項(xiàng)式中。同樣也對(duì)兩個(gè)多項(xiàng)式進(jìn)行了校驗(yàn): 如果校驗(yàn)正確,則進(jìn)行相加,如下:1. 兩個(gè)多項(xiàng)式?jīng)]有指數(shù)相同時(shí),算法中結(jié)點(diǎn)的變化如下:(“蛇形連接”的尾是“和”的next域,而頭就從在“加數(shù)”和“被加數(shù)”中尋找指數(shù)小的項(xiàng),然后通過(guò)指針偏移連接。

13、)2. 兩個(gè)多項(xiàng)式中如果有指數(shù)相同的的項(xiàng),則先相加存到其中一個(gè)多項(xiàng)式, 然后再用上面1的“蛇形連接”的方法連接,不過(guò)唯一要注意的就是要將指數(shù)相同的項(xiàng)中未被累加存儲(chǔ)的那項(xiàng)給跳過(guò),不用連接。3. 但是在指數(shù)相同的項(xiàng)相加時(shí)還要注意一點(diǎn),那就核對(duì)相加的結(jié)果,即對(duì)存到其中一個(gè)多項(xiàng)式中的項(xiàng)的系數(shù),必須進(jìn)行非0 的校驗(yàn)。因?yàn)閮煞N情況的結(jié)點(diǎn)連接方式不同:當(dāng)然了如果校驗(yàn)不正確,則有: 補(bǔ)充:黑體函數(shù)destroyLink是銷毀單鏈表的函數(shù),是為了釋放內(nèi)存空間的:具體的函數(shù)代碼如下: 同時(shí)destroyLink函數(shù)也是命令行DesPolyn調(diào)用的主要函數(shù)。1.5多項(xiàng)式相乘過(guò)程 由于相乘過(guò)程中只需用其中一個(gè)多項(xiàng)式的

14、每一項(xiàng)依次去乘另一個(gè)多項(xiàng)式的每一項(xiàng),依次形成多項(xiàng)式,并累加到同一個(gè)多項(xiàng)式中,這樣最后得到了所要的結(jié)果了,并及時(shí)銷毀臨時(shí)的多項(xiàng)式:2.模仿DOS命令行設(shè)計(jì)命令行函數(shù)中定義的是順序單鏈表,第一個(gè)域?yàn)樽址羔槪蠲?,第二個(gè)域也是字符串指針域(命令功能),第三個(gè)域?yàn)楹瘮?shù)指針域(命令函數(shù))。"create""創(chuàng)建多項(xiàng)式"create"display""顯示多項(xiàng)式"display"add""多項(xiàng)式相加"add"cheng""多項(xiàng)式相乘"che

15、ng/*命令行函數(shù)*/void CmdProc(const char *pTitle);int create();int display();int add();int cheng();CMDINFO shuzu = "create", "創(chuàng)建多項(xiàng)式", create,"display", "顯示多項(xiàng)式", display,"add", "多項(xiàng)式相加", add,"cheng", "多項(xiàng)式相乘", cheng,;int g_nCmdSi

16、ze = sizeof(shuzu) / sizeof(CMDINFO);Link La = NULL, Lb = NULL;int main()CmdProc("多項(xiàng)式");void CmdProc(const char *pTitle) /Dos界面命令行函數(shù)char szCmdBuf50 = ""int i = 0;while (true)cout << ">"cin >> szCmdBuf;for (i = 0; i < g_nCmdSize; i+)if (!strcmp(szCmdBuf

17、, shuzui.pCmdName)shuzui.pFun();break;用函數(shù)指針執(zhí)行了對(duì)應(yīng)的函數(shù),隨后寫了個(gè)調(diào)用命令的函數(shù)CmdProc,在這里面進(jìn)行循環(huán)輸入命令字符串,然后用strcmp比較輸入的字符串與命令名,如果相同則調(diào)用相應(yīng)函數(shù)指針?biāo)赶虻暮瘮?shù)。 四 程序的調(diào)試與運(yùn)行結(jié)果說(shuō)明1.程序的源代碼:(見附錄)2. 程序的調(diào)試與運(yùn)行結(jié)果說(shuō)明:運(yùn)行結(jié)果:3時(shí)間復(fù)雜度分析:在createPolyn創(chuàng)建多項(xiàng)式的函數(shù)中,用了個(gè)while對(duì)多項(xiàng)式進(jìn)行指數(shù)由小到大的排序,是為后面的相加函數(shù)做鋪墊。時(shí)間復(fù)雜度為O(n) 。由于addPolyn函數(shù)中采用的是“蛇形連接”,所以其時(shí)間復(fù)雜度為O(m+n)。

18、由于mulPolyn函數(shù)中采用的是用其中一個(gè)多項(xiàng)式中每一項(xiàng)依次去乘另一個(gè)多項(xiàng)式,所以時(shí)間復(fù)雜度為O(n*m)。其它的輔助函數(shù),如:輸出多項(xiàng)式函數(shù)printList、復(fù)制多項(xiàng)式函數(shù)copyLink、校驗(yàn)輸入單項(xiàng)式有沒(méi)有指數(shù)相同的函數(shù)locateLink 的時(shí)間復(fù)雜度都為O(n)。五 課程設(shè)計(jì)總結(jié)1.程序總結(jié):通過(guò)這個(gè)的課程設(shè)計(jì),我進(jìn)一步的鞏固了鏈?zhǔn)絾捂湵淼氖褂?,以及寫命令行的大致步驟。而且我已掌握一元多項(xiàng)式所要求的基本算法。我的程序代碼完全符合這次的課程要求,我通過(guò)模仿DOS命令行的形式來(lái)實(shí)現(xiàn)一元多項(xiàng)式的具體功能,其中的命令基本上很完善,初步的展現(xiàn)了我對(duì)命令行的理解與使用。在一元多項(xiàng)式的算法實(shí)現(xiàn)

19、中,也幾乎是盡善盡美的,由于整個(gè)過(guò)程是采用的鏈?zhǔn)絾捂湵恚匀枯斎牒洼敵龅倪^(guò)程都有指針或者是數(shù)據(jù)的校驗(yàn)內(nèi)容,這樣就更加增強(qiáng)了代碼的可行性。2.程序進(jìn)一步設(shè)想:我的程序代碼滿足了這次課程設(shè)計(jì)的要求,但我想我還沒(méi)有做到最完美的,因?yàn)樵谝辉囗?xiàng)式的運(yùn)算中應(yīng)該是有減法和除法的,所以這樣就有問(wèn)題了,那我的程序里面還應(yīng)該加上指數(shù)為負(fù)數(shù)的操作,也就是除法的間接性實(shí)現(xiàn)的步驟。對(duì)于一元多項(xiàng)式的除法以及指數(shù)為負(fù)的運(yùn)算提出假設(shè):我想應(yīng)該可以寫個(gè)一元多項(xiàng)式相除的函數(shù),是乘法函數(shù)的逆過(guò)程,只不過(guò)要在相除之前先確定兩者之間的關(guān)系是能夠除得盡的,不然這樣就很麻煩了。3. 對(duì)數(shù)據(jù)結(jié)構(gòu)課程的思考:通過(guò)這次課程,我更深入的了解

20、到數(shù)據(jù)結(jié)構(gòu)這門課程對(duì)于程序員來(lái)說(shuō)很重要,因?yàn)槌绦虻膬纱蠼M成成員之一就是數(shù)據(jù)結(jié)構(gòu)。程序的核心是算法,同時(shí)程序的實(shí)現(xiàn)也要靠數(shù)據(jù)結(jié)構(gòu),所以數(shù)據(jù)結(jié)構(gòu)也是程序的主要成員,所以說(shuō)學(xué)好數(shù)據(jù)結(jié)構(gòu)是必須的。參考文獻(xiàn)1 譚浩強(qiáng),C程序設(shè)計(jì)題解與上機(jī)指導(dǎo)(第二版),北京,清華大學(xué)出版社,2000年9月。2 嚴(yán)蔚敏 吳偉民 ,數(shù)據(jù)結(jié)構(gòu)(C語(yǔ)言版),北京,清華大學(xué)出版社,2007年3 美 James P.Cohoon ,Jack W.Davidson 著,劉瑞挺 韓毅剛 盛素英 劉海嘉 等譯 , C+ 程序設(shè)計(jì)(第三版),北京,電子工業(yè)出版社,2002年1月4 繆淮扣 顧訓(xùn)穰 沈俊 ,數(shù)據(jù)結(jié)構(gòu)(C+實(shí)現(xiàn)) ,北京,科學(xué)

21、出版社,2001年附錄:程序源代碼#include <iostream>using namespace std;#include <stdlib.h>#include <string.h>#include "stdio.h"typedef structfloat coef;/結(jié)點(diǎn)類型int expn;polynomial;typedef struct LNodepolynomial data;/鏈表類型struct LNode *next;LNode, *Link;typedef int(*PFUN)();struct CMDINFOco

22、nst char *pCmdName;const char *pCmdInfo;PFUN pFun;/*調(diào)用的函數(shù)*/void createLink(Link &L, int n);void printList(Link L);void addPolyn(Link &pc, Link pa, Link pb);void mulPolyn(Link &pc, Link pa, Link pb);void copyLink(Link &pc, Link pa);int locateLink(Link pa, Link e);void destroyLink(Link

23、 &L);/*命令行函數(shù)*/void CmdProc(const char *pTitle);int create();int display();int add();int cheng();CMDINFO shuzu = "create", "創(chuàng)建多項(xiàng)式", create,"display", "顯示多項(xiàng)式", display,"add", "多項(xiàng)式相加", add,"cheng", "多項(xiàng)式相乘", cheng,;int g

24、_nCmdSize = sizeof(shuzu) / sizeof(CMDINFO);Link La = NULL, Lb = NULL;int main()CmdProc("多項(xiàng)式");void CmdProc(const char *pTitle) /Dos界面命令行函數(shù)char szCmdBuf50 = ""int i = 0;while (true)cout << ">"cin >> szCmdBuf;for (i = 0; i < g_nCmdSize; i+)if (!strcmp(s

25、zCmdBuf, shuzui.pCmdName)shuzui.pFun();break;int create() /創(chuàng)建多項(xiàng)式int n;cout << "請(qǐng)輸入你要運(yùn)算的第一個(gè)一元多項(xiàng)式的項(xiàng)數(shù): "cin >> n;createLink(La, n);cout << "請(qǐng)輸入你要運(yùn)算的第二個(gè)一元多項(xiàng)式的項(xiàng)數(shù): "cin >> n;createLink(Lb, n);return 0;int display() /顯示多項(xiàng)式if (La = NULL | Lb = NULL) /多項(xiàng)式校驗(yàn)cout <

26、;< "您還未創(chuàng)建多項(xiàng)式,請(qǐng)先創(chuàng)建!" << endl;return 0;cout << "第一個(gè)一元多項(xiàng)式為:" << endl;printList(La);cout << "第二個(gè)一元多項(xiàng)式為:" << endl;printList(Lb);return 0;int add() /多項(xiàng)式相加Link L;if (La = NULL | Lb = NULL) /多項(xiàng)式校驗(yàn)cout << "您還未創(chuàng)建多項(xiàng)式,請(qǐng)先創(chuàng)建!" <<

27、 endl;return 0;addPolyn(L, La, Lb);cout << "兩個(gè)多項(xiàng)式相加后的結(jié)果為:" << endl;printList(L);destroyLink(L);return 0;int cheng() /多項(xiàng)式相乘Link L;if (La = NULL | Lb = NULL) /多項(xiàng)式校驗(yàn)cout << "您還未創(chuàng)建多項(xiàng)式,請(qǐng)先創(chuàng)建!" << endl;return 0;mulPolyn(L, La, Lb);cout << "兩個(gè)多項(xiàng)式相乘后的結(jié)果為

28、:" << endl;printList(L);destroyLink(L);return 0;void destroyLink(Link &L) /清空鏈表Link p;p = L->next;while (p)L->next = p->next;delete p;p = L->next;delete L;L = NULL;/*判斷指數(shù)是否與多項(xiàng)式中已存在的某項(xiàng)相同*/int locateLink(Link L, Link e)Link p;p = L->next;while (p != NULL && (e->

29、;data.expn != p->data.expn)p = p->next;if (p = NULL)return 0;elsereturn 1;void createLink(Link &L, int n) /創(chuàng)建鏈表Link p, newp;L = new LNode;L->next = NULL;(L->data).expn = -1;/創(chuàng)建頭結(jié)點(diǎn)p = L;for (int i = 1; i <= n; i+)newp = new LNode;cout << "請(qǐng)輸入第" << i << &

30、quot;項(xiàng)的系數(shù)和指數(shù):" << endl;cin >> (newp->data).coef >> (newp->data).expn;if (newp->data.expn < 0) /指數(shù)校驗(yàn)cout << "您輸入有誤,指數(shù)不允許為負(fù)值!" << endl;delete newp;i-;continue;newp->next = NULL;p = L;if (newp->data.coef = 0) /系數(shù)校驗(yàn)cout << "系數(shù)為零,重

31、新輸入!" << endl;delete newp;i-;continue;newp->next = NULL;p = L;while (p->next != NULL) && (p->next->data).expn < (newp->data).expn) /指數(shù)排序p = p->next;if (!locateLink(L, newp)newp->next = p->next;p->next = newp;elsecout << "輸入的該項(xiàng)指數(shù)與多項(xiàng)式中已存在的某項(xiàng)相

32、同,請(qǐng)重新創(chuàng)建一個(gè)正確的多項(xiàng)式" << endl;delete newp;destroyLink(L);createLink(L, n);break;/*輸出鏈表*/void printList(Link L)Link p;if (L = NULL | L->next = NULL) /校驗(yàn)cout << "該一元多項(xiàng)式為空 !"elsep = L->next; /跳過(guò)頭結(jié)點(diǎn)if (p->data).coef > 0)if (p->data).expn = 0)cout << (p->data

33、).coef;elseif (p->data).coef = 1 && (p->data).expn = 1)cout << "x"elseif (p->data).coef = 1 && (p->data).expn != 1)cout << "x" << (p->data).expn;elseif (p->data).expn = 1 && (p->data).coef != 1)cout << (p->da

34、ta).coef << "x"elsecout << (p->data).coef << "x" << (p->data).expn;if (p->data).coef < 0)if (p->data).expn = 0)cout << (p->data).coef;elseif (p->data.coef = -1 && p->data.expn = 1)cout << "-x"elseif (p-

35、>data.coef = -1 && p->data.expn != 1)cout << "-x" << p->data.expn;elseif (p->data.expn = 1)cout << p->data.coef << "x"elsecout << (p->data).coef << "x" << (p->data).expn;p = p->next;while (p != NU

36、LL)if (p->data).coef > 0)if (p->data).expn = 0)cout << "+" << (p->data).coef;elseif (p->data).expn = 1 && (p->data).coef != 1)cout << "+" << (p->data).coef << "x"elseif (p->data).expn = 1 && (p->da

37、ta).coef = 1)cout << "+x"elseif (p->data).coef = 1 && (p->data).expn != 1)cout << "+x" << (p->data).expn;elsecout << "+" << (p->data).coef << "x" << (p->data).expn;if (p->data).coef < 0)if

38、(p->data).expn = 0)cout << (p->data).coef;elseif (p->data.coef = -1 && p->data.expn = 1)cout << "-x"elseif (p->data.coef = -1 && p->data.expn != 1)cout << "-x" << p->data.expn;elseif (p->data.expn = 1)cout << p

39、->data.coef << "x"elsecout << (p->data).coef << "x" << (p->data).expn;p = p->next;cout << endl;/*把一個(gè)鏈表的內(nèi)容復(fù)制給另一個(gè)鏈表*/void copyLink(Link &pc, Link pa)Link p, q, r;pc = new LNode;pc->next = NULL;r = pc;p = pa;while (p->next != NULL)q = new LNode;q->data.coef = p->next->data.coef; /跳過(guò)頭結(jié)點(diǎn)q->data.expn = p->next->data.expn;r->next = q;q->next = NULL;r = q;p = p->next;/*將兩

溫馨提示

  • 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ù)網(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)論