




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、西安文理學(xué)院軟件學(xué)院課程設(shè)計報告設(shè)計名稱: 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計 設(shè)計題目: 任意兩個高次多項式的加法和乘法運算學(xué)生學(xué)號: 1402120433 專業(yè)班級: 軟件工程12級4班 學(xué)生姓名: 學(xué)生成績: 指導(dǎo)教師(職稱): 課題工作時間: 2014.6.16 至 2014.6.27 說明:1、報告中的任務(wù)書、進(jìn)度表由指導(dǎo)教師在課程設(shè)計開始前填寫并發(fā)給每個學(xué)生。2、學(xué)生成績由指導(dǎo)教師根據(jù)學(xué)生的設(shè)計情況給出各項分值及總評成績。3、所有學(xué)生必須參加課程設(shè)計的答辯環(huán)節(jié),凡不參加答辯者,其成績一律按不及格處理。答辯由指導(dǎo)教師實施。4、報告正文字?jǐn)?shù)一般應(yīng)不少于3000字,也可由指導(dǎo)教師根據(jù)本門綜合設(shè)計的情況另行
2、規(guī)定。5、平時表現(xiàn)成績低于6分的學(xué)生,取消答辯資格,其本項綜合設(shè)計成績按不及格處理。軟件學(xué)院課程設(shè)計任務(wù)書學(xué)生姓名學(xué)號專業(yè)班級設(shè)計題目任意兩個高次多項式的加法和乘法運算內(nèi)容概要: 用c+語言及數(shù)據(jù)結(jié)構(gòu)的思想解決任意兩個高次多項式的加法和乘法運算。數(shù)據(jù)輸入方面可以根據(jù)一元高次多項式的特征,從左到右開始,按每一項指數(shù)、系數(shù)的順序輸入。運用單鏈表、動態(tài)鏈表等關(guān)鍵技術(shù),實現(xiàn)所設(shè)計的數(shù)據(jù)結(jié)構(gòu)應(yīng)盡可能節(jié)省存儲空間、程序的運行時間應(yīng)盡可能的少的功能。開發(fā)環(huán)境:Visual C+ 6.0讓同學(xué)深入了解C+,掌握C+的功能和數(shù)據(jù)結(jié)構(gòu)的功能。文獻(xiàn)資料:1 韓利凱,李軍. 數(shù)據(jù)結(jié)構(gòu)M. 浙江:浙江大學(xué)出版社,201
3、3.2 蘇仕華. 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計M. 北京:機械工業(yè)出版社 ,2009.3 耿國華. 數(shù)據(jù)結(jié)構(gòu)-用C語言描述M. 北京:高等教育出版社,2011.4 嚴(yán)蔚敏,陳文博. 數(shù)據(jù)結(jié)構(gòu)及算法教程M. 北京: 清華大學(xué)出版社,2010.設(shè)計要求: 設(shè)計程序以實現(xiàn)任意兩個高次多項式的加法和乘法運算。 (1)所設(shè)計的數(shù)據(jù)結(jié)構(gòu)應(yīng)盡可能節(jié)省存儲空間。 (2)程序的運行時間應(yīng)盡可能的少。工作期限:設(shè)計工作自2014年6月16日至2014年6月27日止。指導(dǎo)教師: 院長: 日 期:2014年6月16日軟件學(xué)院課程設(shè)計進(jìn)度安排表學(xué)生姓名: 學(xué)號: 專業(yè): 軟件工程 班級: 2012級4班 起止日期內(nèi) 容備注6月16
4、日 6月 17日下任務(wù)書;收集、閱讀、整理相關(guān)參考文獻(xiàn),并進(jìn)行歸納和概括總結(jié),完成項目/任務(wù)背景介紹部分文字內(nèi)容。6月18日11月20日系統(tǒng)功能設(shè)計和模塊設(shè)計、系統(tǒng)體系結(jié)構(gòu)構(gòu)建。6月21日6月24日各功能模塊編碼實現(xiàn),系統(tǒng)各功能模塊調(diào)試與維護(hù)。6月25日6月26日系統(tǒng)功能集成、系統(tǒng)調(diào)試與測試,按照模板要求撰寫課程設(shè)計/項目設(shè)計報告。6月27日課程設(shè)計/項目設(shè)計分組答辯,提交課程設(shè)計/項目設(shè)計報告以及相關(guān)文檔,進(jìn)行成績評定。指導(dǎo)教師簽名: 2014年6月16日成績評定表學(xué)生姓名: 學(xué)號: 專業(yè): 軟件工程 班級: 2012級4班 類別合計分值各項分值評分標(biāo)準(zhǔn)實際得分合計得分平時表現(xiàn)1010按時參
5、加設(shè)計指導(dǎo),無違反紀(jì)律情況。完成情況3020按設(shè)計任務(wù)書的要求完成了全部任務(wù),能完整演示其設(shè)計內(nèi)容,符合要求。10能對其設(shè)計內(nèi)容進(jìn)行詳細(xì)、完整的介紹,并能就指導(dǎo)教師提出的問題進(jìn)行正確的回答。報告質(zhì)量3510報告文字通順,內(nèi)容翔實,論述充分、完整,立論正確,結(jié)構(gòu)嚴(yán)謹(jǐn)合理;報告字?jǐn)?shù)符合相關(guān)要求,工整規(guī)范,整齊劃一。5課題背景介紹清楚,綜述分析充分。5設(shè)計方案合理、可行,論證嚴(yán)謹(jǐn),邏輯性強,具有說服力。5符號統(tǒng)一;圖表完備、符合規(guī)范要求。5能對整個設(shè)計過程進(jìn)行全面的總結(jié),得出有價值的結(jié)論或結(jié)果。5參考文獻(xiàn)數(shù)量在2篇以上,格式符合要求,在正文中正確引用。答辯情況2510在規(guī)定時間內(nèi)能就所設(shè)計的內(nèi)容進(jìn)行
6、闡述,言簡意明,重點突出,論點正確,條理清晰。15在規(guī)定時間內(nèi)能準(zhǔn)確、完整、流利地回答教師所提出的問題。總評成績: 分 指導(dǎo)教師: (簽字) 日期:2014 年6月 27 日摘 要摘要:任意兩個高次多項式的加法和乘法運算。所設(shè)計的數(shù)據(jù)結(jié)構(gòu)應(yīng)盡可能節(jié)省存儲空間,程序的運行時間應(yīng)盡可能少。在數(shù)據(jù)輸入方面可以根據(jù)一元高次多項式的特征,從左到右開始,按每一項指數(shù)、系數(shù)的順序輸入。但是相乘的多項式項數(shù)是未知的,所以選擇什么樣的存儲方式在本課程設(shè)計中尤為重要。程序通過調(diào)試運行,初步實現(xiàn)了設(shè)計目標(biāo),并且經(jīng)過適當(dāng)完善后,將可以應(yīng)用在商業(yè)中解決實際問題。關(guān)鍵詞:高次多項式; 加法; 乘法; 存儲方式目 錄摘 要
7、VI第一章 課題背景11.1 需求分析11.2 程序的目的11.3 要解決的問題11.4 設(shè)計思路11.5 程序運行平臺11.6 性能要求2第二章 設(shè)計簡介及設(shè)計方案論述32.1設(shè)計簡介32.2 數(shù)據(jù)結(jié)構(gòu)的選擇32.3解決方案32.4 各程序模塊之間的層次(調(diào)用)關(guān)系42.5 用戶使用說明4第三章 詳細(xì)設(shè)計53.1 算法思想53.2 下面是針對本程序?qū)iT定義的數(shù)據(jù)結(jié)構(gòu)類型53.3 結(jié)構(gòu)圖63.4 算法描述6第四章 設(shè)計結(jié)果及分析114.1 程序調(diào)試114.2 時間空間復(fù)雜度的計算124.3 錯誤分析134.4 存在的不足與對策、編程體會13總結(jié)14參考文獻(xiàn)15附錄:程序源代碼16第一章 課題背
8、景1.1 需求分析我們?nèi)粘I畹拈_支,大額數(shù)字或者多倍小數(shù)的計算都需要計算器的幫助。小學(xué)時,你可能拿的是簡單的計算器,而高中,這簡單的計算器已經(jīng)滿足不了你的需求。雖然現(xiàn)在的計算器價格比較便宜,各種功能不同,操作不便。有時你需要的那種功能計算器還不能實現(xiàn),所以能夠通過自己的手設(shè)計開發(fā)出你所需要的計算程序是非常有意義的。為方便讓你算出任意兩個高次多項式的加法和乘法,特編寫此程序。使用該程序之后,所設(shè)計的數(shù)據(jù)結(jié)構(gòu)應(yīng)盡可能節(jié)省存儲空間,程序的運行時間應(yīng)盡可能少。 1.2 程序的目的設(shè)計程序以實現(xiàn)任意兩個高次多項式的加法和乘法運算。所設(shè)計的數(shù)據(jù)結(jié)構(gòu)應(yīng)盡可能節(jié)省存儲空間,程序的運行時間應(yīng)盡可能少。 1.3
9、 要解決的問題1. 怎樣實現(xiàn)兩個多項式的乘法?2. 相乘后若有指數(shù)相同的項用什么方法合并?3. 使用什么數(shù)據(jù)結(jié)構(gòu)來滿足盡可能節(jié)省存儲空間的要求?4. 用什么方法來輸出表達(dá)式?1.4 設(shè)計思路從題目看出所設(shè)計的程序應(yīng)能達(dá)到的功能,設(shè)計好的程序要滿足以上兩點。在數(shù)據(jù)輸入方面可以根據(jù)一元高次多項式的特征,從左到右開始,按每一項指數(shù)、系數(shù)的順序輸入。這里要留意一個問題,因為要相乘的多項式項數(shù)是未知的,所以選擇什么樣的存儲方式在 課程設(shè)計中尤為重要,這也是本程序好壞的一個評定。1.5 程序運行平臺該程序是用Visual C+6.0制做的,使用Visual C+ 6.0運行該程序,具體操作是:打開Visu
10、al C+ 6.0,菜單欄里點文件打開工作區(qū)找到“cpp1.dsw”這個文件打開,或者在資源管理器中雙擊該文件,此時,VC+6.0會自動打開,并載入該系統(tǒng)相關(guān)資源。 1.6 性能要求1.系統(tǒng)易操作性所開發(fā)的系統(tǒng)應(yīng)操作簡單,使學(xué)生不受電腦水平的限制。2.系統(tǒng)具有可維護(hù)性由于系統(tǒng)設(shè)計的范圍較廣,數(shù)據(jù)庫中的信息需定期修改,為了使系統(tǒng)運作的更好,可以對系統(tǒng)數(shù)據(jù)及簡單的功能進(jìn)行簡單的維護(hù)及調(diào)整。3.該系統(tǒng)能夠在開發(fā)的硬件系統(tǒng)中運行不會因外部系統(tǒng)的不同面做不同的修改。第二章 設(shè)計簡介及設(shè)計方案論述2.1設(shè)計簡介設(shè)計題目: 設(shè)計程序以實現(xiàn)任意兩個高次多項式的加法和乘法運算 目的:要求熟練掌握C+語言的基本知
11、識和編輯技能;基本掌握結(jié)構(gòu)化程序設(shè)計的基本思路和方法;以及數(shù)據(jù)結(jié)構(gòu)的使用。 要求:1.所設(shè)計的數(shù)據(jù)結(jié)構(gòu)應(yīng)盡可能節(jié)省存儲空間。2.程序的運行時間應(yīng)盡可能少。2.2 數(shù)據(jù)結(jié)構(gòu)的選擇本程序選擇的數(shù)據(jù)結(jié)構(gòu)是單鏈表,原因如下:鏈表的定義:(1) 鏈表是有限個具有相同數(shù)據(jù)類型的數(shù)據(jù)元素的集合,D=ai/i=1,2,,n;ai為數(shù)據(jù)元素。(2) 數(shù)據(jù)元素之間的關(guān)系R=<ai,ai+1>/ai,ai+1D。(3) 數(shù)據(jù)元素ai 在存儲器中占用任意的、連續(xù)或不連續(xù)的物理存儲區(qū)域。動態(tài)鏈表:當(dāng)需要插入數(shù)據(jù)元素時,臨時動態(tài)地為其申請一個存儲空間,而不是將結(jié)點放在一個定義的數(shù)組中,刪除數(shù)據(jù)元素時,可以釋放
12、該數(shù)據(jù)元素所占用的空間,即可以根據(jù)表的實際需要臨時動態(tài)的分配存儲空間以存儲表中的數(shù)據(jù)元素。單鏈表是有限個具有相同數(shù)據(jù)類型的數(shù)據(jù)元素組成的鏈表且該鏈表的每一個結(jié)點只有一個指針域。帶頭結(jié)點的單鏈表是在單鏈表的第一個結(jié)點之前加一個同類型的結(jié)點,目的是為了使鏈表有一致的描述。本程序解決的是兩多項式相加和相乘的問題,多項式的項數(shù)本身就是不確定的,而且相乘后的多項式可能含有指數(shù)相同的問題,這時就需要合并,合并后其中的一項就沒有用了需要刪除,不然就浪費內(nèi)存空間?;谝陨蠋c所以采用了鏈表。鏈表具有動態(tài)生成,靈活添加或刪除結(jié)點的特點,盡可能節(jié)省存儲空間。2.3解決方案 1、首先進(jìn)行需求分析,搞清楚系統(tǒng)功能和任
13、務(wù);2、然后在總體設(shè)計中確定模塊結(jié)構(gòu)、劃分功能模塊,將軟件功能需求分配給所劃分的最單元模塊。確定模塊間的聯(lián)系,確定數(shù)據(jù)結(jié)構(gòu)、文件結(jié)構(gòu)、數(shù)據(jù)庫模式,確定測試方法與策略;3、在詳細(xì)設(shè)計中,為每個模塊確定采用的算法,選擇適當(dāng)?shù)墓ぞ弑磉_(dá)算法的過程(流程圖)來描述模塊的詳細(xì)過程。確定每一模塊采用的數(shù)據(jù)結(jié)構(gòu)和模塊接口的細(xì)節(jié),對系統(tǒng)內(nèi)部其他模塊的接口 4、根據(jù)分析編寫C+語言代碼。 2.4 各程序模塊之間的層次(調(diào)用)關(guān)系在執(zhí)行主函數(shù)時先調(diào)用creat 生成要相乘的多項式,存儲在兩個動態(tài)鏈表中,然后調(diào)用print 函數(shù)輸出兩個多項式,繼續(xù)執(zhí)行相乘函數(shù),相乘后調(diào)用置空函數(shù)將相乘的鏈表刪除。然后,檢驗是否有指數(shù)
14、相同的項,如果沒有則調(diào)用print函數(shù)輸出結(jié)果,否則調(diào)執(zhí)行合并函數(shù)將指數(shù)項相同的合并,調(diào)用print函數(shù)輸出結(jié)果。2.5 用戶使用說明(1)給出任意兩個高次多項式,只需按照多項式從左到右依次輸入系數(shù)值、指數(shù)值,當(dāng)輸入指數(shù)值為-1 時結(jié)束。(由于程序設(shè)計的缺陷系數(shù)指數(shù)都要輸入所以結(jié)束之前系數(shù)值可隨便輸入不影響運算結(jié)果。)(2)程序中指數(shù)、系數(shù)定義的是整型,所以表達(dá)式中系數(shù)值、指數(shù)值不能超出整型范圍。(3)輸入是正數(shù)直接輸入,負(fù)數(shù)要加負(fù)號。指數(shù)不能選擇-1。第三章 詳細(xì)設(shè)計3.1 算法思想算法思想如下:(1):首先將兩個已知的多項式的指數(shù)和系數(shù)存放在指定鏈表中在執(zhí)行乘法運算。乘法運算的過程是將f(
15、x)式中的第一項與g(x)式的每一項相乘,在將f(x)式的第二項與g(x) 式的每一項相乘,依次下去直到f(x)式的所有項與g(x) 式乘完為止。將相乘后所得的指數(shù)、系數(shù)存在剛開始建好的F(x)鏈表中。(2):F(x) 鏈表中如果有指數(shù)相同的項就需要合并,合并時將結(jié)果放在前一個項中,將后一項刪除。這里需要將F(x) 鏈表中的每一項都要對比一遍,這里就要發(fā)揮指針的作用了。首先定義3個指針,x、y、z,x、y 指向首元素結(jié)點z 指向第二個結(jié)點,用z 結(jié)點中指數(shù)項與x 結(jié)點的指數(shù)項比較,如果不同指針z 向后移,若相同則將z 結(jié)點的系數(shù)加到x 上去然后將z 所在結(jié)點空間釋放,并且指針z 后移。直到指針
16、z 指向空后,將指針x 后移一項,并令z 指向x 的下一項,然后按上述步驟依次執(zhí)行,直到x 指向空結(jié)束。這里指針y 是z 的前驅(qū)結(jié)點他的作用是合并后結(jié)點空間釋放結(jié)點空間將此結(jié)點的前后兩項鏈接起來。本程序核心部分全部是運用while 循環(huán)語句實現(xiàn)的。界面通過switch、case等語句來控制的。3.2 下面是針對本程序?qū)iT定義的數(shù)據(jù)結(jié)構(gòu)類型結(jié)點的數(shù)據(jù)類型如下:typedef struct node /定義節(jié)點類型 float coef; int expn; struct node * next; PLOY; 數(shù)據(jù)結(jié)構(gòu)的設(shè)計思想:鏈表中的每一個結(jié)點存放多項式的一個系數(shù)非0 項。它包含三個域,分別存
17、放該項的系數(shù)、指數(shù)以及指向下一個多項式結(jié)點的指針。多項式鏈表結(jié)點的結(jié)構(gòu)如下圖3-1所示:系數(shù) 指數(shù) 指針coefexpnnext圖 3-1 鏈表結(jié)點例如:多項式4x8+7x23-5x的單鏈表表示如下圖3-2所示: 圖3-2 單鏈表表示3.3 結(jié)構(gòu)圖整體的結(jié)構(gòu)圖如下圖3-3所示:輸入任意兩個高次多項式的系數(shù)、指數(shù)值將輸入值分別存儲在兩個動態(tài)鏈表中輸出兩個要相乘的多項式相乘將結(jié)果存入F(x)鏈表將存放相乘的多項式各項系數(shù)、指數(shù)的鏈表置空若有指數(shù)相同的項合并輸出結(jié)果 圖 3-3 整體結(jié)構(gòu)圖3.4 算法描述(1) 設(shè)指針p、q 分別為指向A、B 的首元素結(jié)點,用p->coef 乘q->co
18、ef,p->exp+q->exp,并令指針p 后移。(2)當(dāng)q->next 為空時,指針p 向后移一位,指針q 繼續(xù)從B 鏈表的第一項開始,執(zhí)行p->coef 乘q->coef,p->exp 加q->exp.每執(zhí)行一次指針p 后移。(3)重復(fù)(1)、(2)步,直到p->next 為空后,結(jié)束。將乘出結(jié)果存入C 鏈表。合并時用兩個指針指向C 鏈表,一個指針跟隨另一個當(dāng)作后一個指針前驅(qū)指針,這樣合并后釋放就容易將前后結(jié)點鏈接上。綜合以上分析,兩個高次多項式相乘的算法如下:PLOY *byPLOY(PLOY *head1,PLOY *head2) /多
19、項式相乘 PLOY *inpt,*res,*pre; int flag=0; res=(PLOY *)malloc(sizeof(PLOY); /創(chuàng)建鏈表頭 res->next=NULL; head1=head1->next; pre=head2; while(flag=0) if(pre->next=NULL) pre=head2;/當(dāng)現(xiàn)在指向空時跳出循環(huán) head1=head1->next; continue; if(head1=NULL) flag=1;/當(dāng)現(xiàn)在指向空時跳出循環(huán) continue; pre=pre->next; inpt=(PLOY *)ma
20、lloc(sizeof(PLOY);/創(chuàng)建新鏈節(jié) inpt->coef=pre->coef*head1->coef; inpt->expn=pre->expn+head1->expn; inpt->next=NULL; insert(res,inpt);/把當(dāng)前"g(x)"的鏈節(jié)插入到"y(x)"中 return res; 用尾插法生成多項式鏈表的算法如下:PLOY *creat(char ch)/輸入多項式 PLOY *head,*inpt; float x; int y; head=(PLOY *)mallo
21、c(sizeof(PLOY); /創(chuàng)建鏈表頭 head->next=NULL; printf("請輸入多項式%c:(格式是:系數(shù) 指數(shù);以0 0 結(jié)束!)n",ch); scanf("%f %d",&x,&y); while(x!=0) inpt=(PLOY *)malloc(sizeof(PLOY); /創(chuàng)建新鏈節(jié) inpt->coef=x; inpt->expn=y; inpt->next=NULL; insert(head,inpt); /不然就查找位置并且插入新鏈節(jié) printf("請輸入多項式%
22、c的下一項:(以0 0 結(jié)束!)n",ch); scanf("%f %d",&x,&y); return head; 輸出函數(shù):void print(PLOY *fun) /輸出多項式 PLOY *printing; int flag=0; printing=fun->next; /正在被打印的鏈節(jié) if(fun->next=NULL) /如果函數(shù)為空打印0 printf("0n"); return; while(flag=0) if(printing->coef>0&&fun->n
23、ext!=printing) printf("+"); /為正數(shù)時打印"+"號 if(printing->coef=1);/如果為"1"就不用打印系數(shù)了 else if(printing->coef=-1) printf("-"); /如果為"-1"就打印"-"號就行了 else printf("%f",printing->coef);/其余情況都得打印 if(printing->expn!=0) printf("x%d&
24、quot;,printing->expn);/如果指數(shù)為"0"不打印指數(shù)項 else if(printing->coef=1)|(printing->coef=-1) printf("1"); if(printing->next=NULL) flag=1; /如果現(xiàn)在的鏈節(jié)沒有下一個就結(jié)束 else printing=printing->next; printf("n"); 以上就是按照題目功能要求和數(shù)據(jù)結(jié)構(gòu)要求,編寫算法和各程序模塊代碼。第四章 設(shè)計結(jié)果及分析4.1 程序調(diào)試1. 在VC的環(huán)境下,調(diào)試程
25、序,進(jìn)入界面,如下圖4-1所示: 圖4-1進(jìn)入界面2. 按降冪輸入第一個多項式數(shù)據(jù),如下圖4-2所示: 圖4-2按升降冪輸入數(shù)據(jù) 3. 按升冪輸入第二個多項式數(shù)據(jù),如下圖4-3所示: 圖4-3按升降冪輸入數(shù)據(jù)4. 運行結(jié)果正確如下圖4-4所示:圖4-4 運行結(jié)果4.2 時間空間復(fù)雜度的計算若多項式A 有n 項,多項式B 有m 項,則兩多項式相乘時為m*n ,接下來檢驗是否有同類項檢查方法是每一項都要對比所以為(m*n)!,時間復(fù)雜度為O(m*n+(m*n)!)由于各個算法是基于動態(tài)鏈表而建成的,所以各算法的空間性能均較好。4.3 錯誤分析(1) 語句后面漏分號,或者在不該加分號的地方加了分號,
26、或者忘記后括號。通過編譯時的指出,改正了這些錯誤。(2)當(dāng)程序執(zhí)行到合并指數(shù)相同項時出現(xiàn)了錯誤。調(diào)試后發(fā)現(xiàn)執(zhí)行完第一次while 循環(huán)后指向c 鏈表的指針e 不在存儲空間中,導(dǎo)致無法判斷while 循環(huán),仔細(xì)檢查后,發(fā)現(xiàn)合并時將e 指針?biāo)附Y(jié)點釋放后,沒有給他指定新的結(jié)點。把指針e 后移一位,這樣就解決了問題。(3)關(guān)于時間空間復(fù)雜度的計算不太會用,最后經(jīng)過問同學(xué)和在互聯(lián)網(wǎng)上查資料解決了這個問題。4.4 存在的不足與對策、編程體會因為掌握的知識有限,所以程序編起來有點難。通過編寫這個系統(tǒng),我體會到了一個系統(tǒng)應(yīng)該作為一個整體來看待,系統(tǒng)具有牽一發(fā)而動全身的特性,某一個模塊的一個小小錯誤都可能導(dǎo)致
27、系統(tǒng)其他模塊功能的喪失甚至是崩潰,同時在編程時應(yīng)該按照模塊來編寫,一個模塊實現(xiàn)一個功能,這樣在調(diào)試的時候就方便檢查,還有一個程序?qū)懲炅耍皇钦嬲慕Y(jié)束,還需要不斷地調(diào)試不斷地修改程序中的錯誤。在編程中出現(xiàn)了一個致命的錯誤:我在程序中定義了幾個函數(shù)但是忘記了使用引用導(dǎo)致了最后編譯是出現(xiàn)了重大錯誤,經(jīng)過好幾個小時的仔細(xì)排查終于找到了問題所在。所以此次編程我最大的一個收獲是:仔細(xì)研究每一個函數(shù)的定義,不要出現(xiàn)定義中形參缺少或者實參形參形式不符出現(xiàn)的錯誤總結(jié)本系統(tǒng)實現(xiàn)了以任意兩個高次多項式的加法和乘法運算。所設(shè)計的數(shù)據(jù)結(jié)構(gòu)應(yīng)盡可能節(jié)省存儲空間,程序的運行時間應(yīng)盡可能少。通過本設(shè)計實驗又將數(shù)據(jù)結(jié)構(gòu)中的鏈
28、表的知識重新溫習(xí)了一遍,并且自己能夠獨立設(shè)計一些東西,學(xué)會了在設(shè)計實驗過程時的基本步驟。基本上能夠有條理的解決這些問題。在課程設(shè)計中,我使用了數(shù)據(jù)結(jié)構(gòu)中學(xué)到的鏈表,因為鏈表具有動態(tài)生成,靈活添加或刪除結(jié)點的特點,盡可能節(jié)省存儲空間。正好符合題目的要求,自己不僅靈活的使用了鏈表,而且弄清楚了很多關(guān)于鏈表的作用,受益非淺。在課程設(shè)計中遇到了很多的問題,都是以前沒有發(fā)現(xiàn)的,這些問題涉及的方面很多,有的是c 語言基礎(chǔ)的,也有最近學(xué)習(xí)的數(shù)據(jù)結(jié)構(gòu)的知識。在實習(xí)中,我們可以把這學(xué)期所學(xué)的理論知識和實踐聯(lián)系起來,在所要開發(fā)的項目中漸漸成長。雖然我們對這些知識運用得還不是很熟練,但是相信我們也在滴水穿石地成長起
29、來。發(fā)現(xiàn)問題,提出問題,解決問題,使我們從不足之處出發(fā),尋找新的學(xué)習(xí)方向。通過本次課程設(shè)計,讓我發(fā)現(xiàn)了自己的不足。自己在學(xué)習(xí)知識上面的漏洞。希望通過彌補這些發(fā)現(xiàn)的漏洞,提高自己的專業(yè)知識水平。設(shè)計過程中的解決問題的方法,讓我明白了如何學(xué)習(xí)會更有效。如何學(xué)習(xí)才不會耽誤太多的時間。也學(xué)會了解決問題的一般方法:向老師、同學(xué)請教,借助網(wǎng)絡(luò)等等。我要感謝學(xué)校給我提供的良好的環(huán)境,讓我們可以在機房好好的學(xué)習(xí)。同時感謝老師對我的指導(dǎo)和幫助,感謝高年級哥哥姐姐給我的鼓勵讓我逐漸有了信心,也感謝幫助我的同學(xué)們。是你們對我的幫助和耐心指導(dǎo),讓我有信心完成這次作業(yè),是你們給了我信心,也給了我無盡的希望。大家要互相幫
30、助,共同進(jìn)步,才能更好的學(xué)習(xí),讓自己的知識更加豐富,讓自己在編程生涯得到提升。參考文獻(xiàn)1 韓利凱,李軍. 數(shù)據(jù)結(jié)構(gòu)M. 浙江:浙江大學(xué)出版社,2013.2 蘇仕華. 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計M. 北京:機械工業(yè)出版社 ,2009.3 耿國華. 數(shù)據(jù)結(jié)構(gòu)-用C語言描述M. 北京:高等教育出版社,2011.4 嚴(yán)蔚敏,陳文博. 數(shù)據(jù)結(jié)構(gòu)及算法教程M. 北京: 清華大學(xué)出版社,2010.附錄:程序源代碼#include<stdio.h> #include<malloc.h> typedef struct node /定義節(jié)點類型 float coef; int expn; struc
31、t node * next; PLOY; void start()/用戶選擇界面 printf("*n"); printf(" 任意兩個高次多項式的相加/相乘:n"); printf("*n"); printf("請選擇操作:n"); printf("1.兩個高次多項式相加n"); printf("2.兩個高次多項式相乘n"); printf("0.退出n"); void insert(PLOY *head,PLOY *inpt) /查找位置插入新鏈節(jié)程序
32、 PLOY *pre,*now; int signal=0; pre=head; /pre定義為現(xiàn)在的前一個鏈節(jié) if(pre->next=NULL) pre->next=inpt; else now=pre->next; while(signal=0) if(inpt->expn<now->expn) /當(dāng)新鏈節(jié)小于現(xiàn)在的連接時向后移一個鏈節(jié) if(now->next=NULL) now->next=inpt; signal=1; else pre=now; now=pre->next; else if(inpt->expn>
33、now->expn) /如果發(fā)現(xiàn)比現(xiàn)在的鏈節(jié)大了就插入到這個連接的前面 inpt->next=now; pre->next=inpt; signal=1; else now->coef=now->coef+inpt->coef; signal=1; free(inpt); /與當(dāng)前鏈節(jié)相等指數(shù) if(now->coef=0) pre->next=now->next; free(now); PLOY *creat(char ch)/輸入多項式 PLOY *head,*inpt; float x; int y; head=(PLOY *)mal
34、loc(sizeof(PLOY); /創(chuàng)建鏈表頭 head->next=NULL; printf("請輸入高次多項式%c:(格式是:系數(shù) 指數(shù);以0 0 結(jié)束!)n",ch); scanf("%f %d",&x,&y); while(x!=0) inpt=(PLOY *)malloc(sizeof(PLOY); /創(chuàng)建新鏈節(jié) inpt->coef=x; inpt->expn=y; inpt->next=NULL; insert(head,inpt); /不然就查找位置并且插入新鏈節(jié) printf("請輸入
35、高次多項式%c的下一項:(以0 0 結(jié)束!)n",ch); scanf("%f %d",&x,&y); return head; PLOY *addPLOY(PLOY *head,PLOY *pre)/多項式相加 PLOY *inpt; int flag=0; while(flag=0) if(pre->next=NULL) flag=1;/當(dāng)現(xiàn)在指向空時跳出循環(huán) else pre=pre->next; inpt=(PLOY *)malloc(sizeof(PLOY);/創(chuàng)建新鏈節(jié) inpt->coef=pre->coef;
36、 inpt->expn=pre->expn; inpt->next=NULL; insert(head,inpt); /否則把當(dāng)前"g(x)"的鏈節(jié)插入到"y(x)"中 return head; PLOY *byPLOY(PLOY *head1,PLOY *head2)/多項式相乘 PLOY *inpt,*res,*pre; int flag=0; res=(PLOY *)malloc(sizeof(PLOY);/創(chuàng)建鏈表頭 res->next=NULL; head1=head1->next; pre=head2; whil
37、e(flag=0) if(pre->next=NULL) pre=head2;/當(dāng)現(xiàn)在指向空時跳出循環(huán) head1=head1->next; continue; if(head1=NULL) flag=1;/當(dāng)現(xiàn)在指向空時跳出循環(huán) continue; pre=pre->next; inpt=(PLOY *)malloc(sizeof(PLOY);/創(chuàng)建新鏈節(jié) inpt->coef=pre->coef*head1->coef; inpt->expn=pre->expn+head1->expn; inpt->next=NULL; inse
38、rt(res,inpt);/把當(dāng)前"g(x)"的鏈節(jié)插入到"y(x)"中 return res; void print(PLOY *fun) /輸出多項式 PLOY *printing; int flag=0; printing=fun->next; /正在被打印的鏈節(jié) if(fun->next=NULL) /如果函數(shù)為空打印0 printf("0n"); return; while(flag=0) if(printing->coef>0&&fun->next!=printing) printf("+"); /為正數(shù)時打印"+"號 i
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 交通安全演講稿范文
- 六年級個人反思(33篇)
- 北京房屋租賃合同
- DB31∕T 538-2011 車用尿素溶液(AUS32)
- 犬髖關(guān)節(jié)發(fā)育不良課件
- 物流系統(tǒng)分析 課件 項目八-任務(wù)三 (二)層次分析法
- 談?wù)剬W(xué)校食品衛(wèi)生安全的現(xiàn)狀和要求(55)-食品飲料
- 人力資源招聘與培訓(xùn)進(jìn)度記錄表
- 2024年青海省中考化學(xué)第一次模擬檢測試卷
- 企業(yè)信息化管理系統(tǒng)操作手冊
- 《走近世界民間美術(shù)》 課件 2024-2025學(xué)年人美版(2024)初中美術(shù)七年級下冊
- 河北單招考試三類職業(yè)適應(yīng)性測試考試題與答案
- 《大學(xué)英語教學(xué)大綱詞匯表》(1~4級,5~6級)
- 2022年在戲劇家協(xié)會會員大會上的講話
- DB11-T1630-2019城市綜合管廊工程施工及質(zhì)量驗收規(guī)范
- 茂名市2008-2016年土地增值稅工程造價核定扣除標(biāo)準(zhǔn)
- 部編版語文九年級下冊《棗兒》公開課一等獎教案
- L阿拉伯糖與排毒課件
- 《現(xiàn)代交換原理》期末考試試習(xí)題和答案(免費)
- 手機開發(fā)流程圖
- 隊列隊形比賽評分標(biāo)準(zhǔn)
評論
0/150
提交評論