版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、 JIANGXI AGRICULTURAL UNIVERSITY 數(shù) 據(jù) 結(jié) 構(gòu) 實 習 報 告 題目: 設計一個一元多項式簡單計算器 學 院: 軟件學院 姓 名: 劉青斌 學 號: 20121534 專 業(yè): 軟件工程 班 級: 軟件1201班 指導教師: 楊文姬 二零一三年六月 一、系統(tǒng)簡介- 1 -1、基本要求- 1 -2、設計目的- 1 -3、算法思想:- 1 -二、 需求分析- 3 -1、設計開發(fā)環(huán)境:- 3 -2、思路分析:- 3 -三、概要設計- 4 -四、詳細設計- 6 -4.1 輸入模塊- 6 -4.2 求和、差模塊- 6 -4.3 求積、商模塊- 8 -4.4 求值模塊-
2、8 -4.5模塊劃分:- 8 -五、程序測試- 9 -圖5-1加法測試圖- 9 -圖5-2減法測試圖- 10 -圖5-3乘法測試圖- 10 -圖5-4求值測試圖- 11 -六、使用說明- 12 -七、課程設計的體會與建議- 13 -一、系統(tǒng)簡介1、基本要求(1)輸入并建立多項式;(2)輸出多項式,輸出形式為整數(shù)序列:n,c1,e1, c2,e2, cn,en,其中n是多項式的 項數(shù),ci,ei,分別是第i項的系數(shù)和指數(shù),序列按指數(shù)降序排序;(3)多項式a和b相加,建立多項式a+b;(4)多項式a和b相減,建立多項式a-b;(5)計算多項式在x處的值。(6)計算器的仿真界面。2、設計目的數(shù)據(jù)結(jié)構(gòu)
3、是實踐性很強的課程。課程設計是加強學生實踐能力的一個強有力手段。課程設計要求學生在完成程序設計的同時能夠?qū)懗霰容^規(guī)范的設計報告。嚴格實施課程設計這一環(huán)節(jié),對于學生基本程序設計素養(yǎng)的培養(yǎng)和軟件工作者工作作風的訓練,將起到顯著的促進作用3、算法思想:(1)建立多項式一元多項式是由多個項的和組成的,將一元多項式的每個項用一結(jié)點表示,該結(jié)點中應包括該項的系數(shù)、該項的指數(shù)、指向下一項的指針,可以用線性表來依次輸入各項結(jié)點,從而完成多項式鏈表的建立,為了使原多項式各項順序不變,故采用尾插法建表。(2)降冪輸出多項式我們可以先設一個冪指數(shù)i為可輸入的最大冪指數(shù),然后從首元結(jié)點開始順次查詢每一結(jié)點的指數(shù)和i,
4、若相等則輸出該結(jié)點,否則,i-,繼續(xù)從首元結(jié)點開始查詢,重復上述過程,直到i為可輸入的最小冪指數(shù)。這樣,就按指數(shù)降冪輸出了多項式。多項式的項數(shù)統(tǒng)計可以通過頭結(jié)點的next來實現(xiàn),若非空,count+,直到結(jié)點的指針域為空,這樣,count就統(tǒng)計出了項數(shù)。(3)多項式相加多項式的相加過程,其實就是相同指數(shù)的項的系數(shù)相加,不同指數(shù)的項復制到和多項式中,將結(jié)果用降冪輸出函數(shù)輸出。(4)多項式相減多項式的相減過程,其實就是相同指數(shù)的項的系數(shù)相減,對于不同指數(shù)的項,若是被減多項式,則將該結(jié)點復制輸出,若是減多項式,則將該結(jié)點的系數(shù)變?yōu)樵禂?shù)的相反數(shù)輸出,將結(jié)果用降冪輸出函數(shù)輸出。 二、 需求分析1、設計
5、開發(fā)環(huán)境: 軟件方面:系統(tǒng) windows xp 編程軟件:VC+ 6.02、思路分析: 要解決多項式相加,必須要有多項式,所以必須首先建立兩個多項式,在這里采用鏈表的方式存儲鏈表,所以我將結(jié)點結(jié)構(gòu)體定義為序數(shù) coef指數(shù)expn指針域next 運用插法建立兩條單鏈表,以單鏈表polyn p和polyn h分別表示兩個一元多項式a和b,a+b的求和運算等同于單鏈表的插入問題(將單鏈表polyn p中的結(jié)點插入到單鏈 表polyn h中),因此“和多項式”中的結(jié)點無須另生成。為了實現(xiàn)處理,設p、q分別指向單鏈表polya和polyb的當前項,比較p、q結(jié)點的指數(shù)項,由此得到下列運算規(guī)則: 若p
6、-expnexpn,則結(jié)點p所指的結(jié)點應是“和多項式”中的一項,令指針p 后移。 若p-expn=q-expn,則將兩個結(jié)點中的系數(shù)相加,當和不為0時修改結(jié)點p的系 數(shù)。 若p-expnq-expn,則結(jié)點q所指的結(jié)點應是“和多項式”中的一項,將結(jié)點q 插入在結(jié)點p之前,且令指針q在原來的鏈表上后移 三、概要設計菜單加法AddPolyn(ma,mb)減法SubtractPolyn(ma,mb)乘法MultiplyPolyn(ma,mb)求值ValuePolyn(ma,x)輸入Insert(Polyn p,Polyn h)除法DevicePolyn(ma,mb)輸出desktop() 圖3-1功
7、能模塊圖為實現(xiàn)上述程序功能,用帶表頭結(jié)點的單鏈表存儲多項式。元素類型,節(jié)點類型,和指針類型:typedef struct Polynomialint coe; /系數(shù)int exp;/指數(shù)struct Polynomial *next;*Polyn,Polynomial;各個模塊之間的調(diào)用如圖3-1所示,調(diào)用insert()函數(shù)將輸入的多項式按降冪排列,通過主函數(shù)main()中swith語句,選擇用戶所選擇的對應的模塊,然后又模塊對應的功能函數(shù)對用戶輸入的數(shù)據(jù)進行相應的操作,最后通過desktop()模塊將最后結(jié)果輸出。1、元素類型、結(jié)點類型和指針類型:typedef struct Polyn
8、omial float coef; /系數(shù) int expn; /指數(shù) struct Polynomial *next;*Polyn,Polynomial;2、建立一個頭指針為head、項數(shù)為m的一元多項式, 建立新結(jié)點以接收數(shù)據(jù), 調(diào)用Insert函數(shù)插入結(jié)點: Polyn CreatePolyn(Polyn head,int m) int i; Polyn p; p=head=(Polyn)malloc(sizeof(struct Polynomial); head-next=NULL; for(i=0;icoef,&p-expn); Insert(p,head); return head
9、;3、主函數(shù)和其他函數(shù):void main() int m,n,a,x; char flag; Polyn pa=0,pb=0,pc; float ValuePolyn(Polyn head,int x) /輸入x值,計算并返回多項式的值開始運行四、詳細設計多項式加法計算器退出求積、商求和(差)輸入多項式關閉運行多項式相加求和(差)多項式求積、商建立2個多項式輸出結(jié)果輸出求和(差)結(jié)果按任意鍵退出圖4-1 功能實現(xiàn)流程圖4.1 輸入模塊用戶可通過本模塊來輸入一個多項式,在每次輸入一個多項式時,本模塊會先判斷誰否是第一次輸入,如果是,創(chuàng)建節(jié)點,如果不是則模塊會通過判斷本次輸入的數(shù)的指數(shù)與第一項輸
10、入的指數(shù)的大小,如果第一項的指數(shù)較大,則剛輸入的這一項繼續(xù)與第二項比較指數(shù),以此類推,如果發(fā)現(xiàn)剛輸入的這一項的指數(shù)比比較的這一項的指數(shù)要大,則插入比較項的前面。4.2 求和、差模塊用戶通過本模塊可以實現(xiàn)兩個多項式的求和或差值,此模塊先調(diào)用輸入模塊,進行對兩個要運算的多項式進行初始化,并按降冪排列。然后將兩個多項式的冪進行一個對比,如果第一個數(shù)的第一項的系數(shù)大于第二個多項式的第一個項的系數(shù),那么直接將第一項賦值于剛開始創(chuàng)建的鏈表的第一項,作為答案的最后一項,反之亦然,如果第一個數(shù)的第一開始項,與第二個數(shù)的第一項的系數(shù)相同,那么將兩個數(shù)的系數(shù)與指數(shù)分別相加或者相減并將對應值賦值給答案相對應的項。以
11、此類推。最后有輸出模塊輸出最后答案。建立鏈表head,p=head,兩頭指針A、B均指向各自的nextA、B為空 A為空將B接到p后面B為空將A接到p后面AB指數(shù)相等A、B的系數(shù)互為倒數(shù)合并相同系數(shù)相同項,連接到新鏈表后A、B均后指A的指數(shù)大于BB的指數(shù)將A的當前接點接到新鏈表后面,A后指將B的當前接點接到新鏈表后面,B后指如果AB都為空結(jié)束p-next=NULL返回頭指針4.3 求積、商模塊用戶可通過該模塊實現(xiàn)兩個多項式的相乘(相除),此模塊先調(diào)用輸入模塊,進行對兩個要運算的多項式的初始化,并按降冪排列。然后將第一個數(shù)的系數(shù)、指數(shù)與第二個數(shù)的系數(shù)、指數(shù)分別相乘(相除),相加(相減),并且賦值
12、給答案相應的系數(shù)、指數(shù)。完成后執(zhí)行第一個數(shù)的第一項與第二個數(shù)的第二項進行相應的操作.執(zhí)行完之后最后調(diào)用輸出模塊將結(jié)果輸出到屏幕上。4.4 求值模塊用戶可通過此模塊實現(xiàn)多項式的求值,此模塊調(diào)用輸入模塊,完成相對應的操作,然后需要用戶輸入此時變量的值,并且將變量的值賦值給變量,最后將答案通過輸出模塊輸出到屏幕上。4.5模塊劃分:(1)帶頭結(jié)點的多項式的建立函數(shù)PolylistPolycreate()(2)帶頭結(jié)點的多項式的降冪輸出函數(shù)voidprintf(Polylistpoly)(3)帶頭結(jié)點的多項式的相加函數(shù)PolylistPolyadd(Polylista,Polylistb)(4)帶頭結(jié)點
13、的多項式的相減函數(shù)PolylistPolysub(Polylista,Polylistb)(5)主函數(shù)voidmain()五、程序測試測試軟件:Microsoft Visual C+ 6.0測試的數(shù)據(jù):(1) A+B A= 3x14-8x8+6x2+2 B=2x10+4x8+-6x2(2) A-B A=11x14+3x10+2x8+10x6+5 B=2x14+3x8+5x6+7(3) A*B A= 5x6+4x5+3x4 B= 6x6+5x5 (4) A= 5x6+4x5+3x4 X=2(5) A/B A=2x2 B=x2+1測試過程與結(jié)果:(1) A= 3x14-8x8+6x2+2 B=2x
14、10+4x8+-6x2 A+B=3x14+2x10-4x8+2圖5-1加法測試圖(2)A=11x14+3x10+2x8+10x6+5 B=2x14+3x8+5x6+7 A- B=9x14+3x10-x8+5x6-2 圖5-2減法測試圖(3)A= 5x6+4x5+3x4 B= 6x6+5x5 A*B =30x12+49x11+38x10+15x9 圖5-3乘法測試圖(4)A= 5x6+4x5+3x4 X=2 A=496圖5-4求值測試圖、(5)A=2x2 B=x2+1 A/B=2余數(shù)是-2圖5-5除法測試圖六、使用說明程序開始運行后,出現(xiàn)如圖界面: 圖7-1界面初始圖1、如果要進行加法運算,請輸
15、入2,出現(xiàn) 請輸入a的項數(shù):請輸入第一項的系數(shù): 就是輸入第一個多項式的每一項的系數(shù)和指數(shù)。 注意:輸入是隨便輸入的。 如第一個多項式為5x5; 過程如下: 請輸入a的項數(shù):1請輸入a的系數(shù):5請輸入a的指數(shù):5 接著輸入第2個多項式的每一項的系數(shù)和指數(shù)。 輸入完以后就直接顯示結(jié)果了:2、如果要進行減法運算,請輸入3,過程和輸入加法一樣,輸入個多項式即可。3、如果要退出的話,請輸入7即可結(jié)束程序的運行。七、課程設計的體會與建議 學完數(shù)據(jù)結(jié)構(gòu)線性表一章后做此題,自覺就想到用帶頭結(jié)點的單鏈表來存儲多項式,只需用結(jié)點記錄多項式的系數(shù)和指數(shù),此數(shù)據(jù)結(jié)構(gòu)即節(jié)省空間又好進行操作,且進行運算的主要設計思路也
16、易想到,大體設計結(jié)構(gòu)在較短時間內(nèi)能夠完成。但當設計到具體細節(jié)代碼時遇到了不少困難,主要困難是進行結(jié)點操作時,對指針考慮得不夠細致,調(diào)試時常出現(xiàn)指針指錯的情況,沒有認真理清條件層次。完成此程序后,受益匪淺,它鞏固了線性表一章學到的知識,而且重溫了函數(shù)傳參等重點知識。盡管對程序進行大量的調(diào)試分析修改,可還有些代碼寫得十分啰嗦,程序也不夠健壯,對多項式的操作只限于2個多項式,還有在界面設計上沒花太大心思,界面不美觀。這些問題在日后還需進行改善。本次課程設計采用C+語言實現(xiàn).這次設計基本上能實現(xiàn)指導書上的要求。我們可以通過這個程序?qū)崿F(xiàn)計算器的一些基本功能,實現(xiàn)相關操作。通過本次課程設計,讓我進一步了解
17、了c+的一些知識,C+的字符串處理功能完全依靠字符串數(shù)組來實現(xiàn),很多在其他高級語言中實現(xiàn)的字符串比較等操作,在這里完全依靠函數(shù)來實現(xiàn),因此調(diào)試中字符串處理函數(shù)的調(diào)試很多本次課程設計培養(yǎng)了我們對這些實際問題的分析能力以及解決一些實際問題的能力。通過編程,鞏固了我們對編程思想和寫程序的能力。課程設計是對我們的學習很有利的一個環(huán)節(jié)。在這個階段,我們學會把理論與實際的結(jié)合、懂得人與人溝通的重要性,明白合作的可貴。當然,在編寫的過程中也出現(xiàn)了很多問題,但通過調(diào)試和看書解決了,大大的提高了我自學的能力,學會了遇到問題,如何利用資源去解決問題也明白了要完成一項設計,首先要有扎實的基礎知識,這就要求我們在平時的學習中要不斷提高自己。其次,要充分利用身邊的各種資源,圖書館有很多相關的書,網(wǎng)上也有不少的知識解答,要好好的利用。第三,要多向身邊的同學多請教,在交流中提高自己的實力。理論聯(lián)系實踐,在實踐中提高。通過這次課程設計中,我加深了對課本知識的理解。經(jīng)過一個學期對數(shù)據(jù)結(jié)構(gòu)的學習,使我對其有了很大的了解,也對C+進行了溫習和了解;在課程設計期間,我們每個人都做了一個課程設計,在這個過程中,遇到了不少困難,但最終還是在自己的努力和同學的幫助下完成了設計,也使我學到了不少。這個程序比較簡單
溫馨提示
- 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. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2022年大學力學專業(yè)大學物理下冊開學考試試題B卷-含答案
- 石河子大學《語言與文化》2021-2022學年第一學期期末試卷
- 石河子大學《水工程法規(guī)》2021-2022學年第一學期期末試卷
- 石河子大學《口腔解剖生理學一》2021-2022學年第一學期期末試卷
- 石河子大學《工程制圖》2021-2022學年第一學期期末試卷
- 沈陽理工大學《數(shù)字圖象處理》2023-2024學年期末試卷
- 沈陽理工大學《流體與工程熱力學》2022-2023學年第一學期期末試卷
- 沈陽理工大學《俄漢筆譯》2023-2024學年第一學期期末試卷
- 沈陽理工大學《超精密制造工程》2022-2023學年第一學期期末試卷
- 合伙人開足療店合同協(xié)議書范本
- 小學低段主題情景中數(shù)量關系教學實踐探討
- 《數(shù)學課前三分鐘》PPT課件.ppt
- 變更通知單(ECN) 模板
- 不同截面鋼牛腿設計計算(excel)
- 公安筆錄模板之詢問筆錄字頭(證人治安案件)
- 生僻字歌詞注拼音版本
- 廣成儀制藥王正朝全集
- 已解密_彩盒性能技術規(guī)范
- 【芝麻灰】石材檢測報告
- 抗美援越烈士們永垂不朽
- 2021年村法制宣傳臺賬(替換圖片 拿來即用)
評論
0/150
提交評論