版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p> 數(shù) 據(jù) 結(jié) 構(gòu) 課 程 設(shè) 計(jì) 報(bào) 告 </p><p><b> 一元多項(xiàng)式加法器</b></p><p> 專 業(yè): </p><p> 班 級(jí): </p><p> 學(xué) 號(hào): <
2、;/p><p> 姓 名: </p><p> 指導(dǎo)老師: </p><p><b> 目錄</b></p><p><b> 1.序言3</b></p><p> 1.1關(guān)于數(shù)據(jù)結(jié)構(gòu)3</p
3、><p> 1.2數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)的目的3</p><p><b> 2 需求分析4</b></p><p><b> 2.1題目要求4</b></p><p><b> 2.2題目分析4</b></p><p><b> 3 概
4、要設(shè)計(jì)5</b></p><p> 3.1總體解決方案5</p><p> 3.2總體功能流程圖6</p><p> 4 詳細(xì)設(shè)計(jì)與實(shí)現(xiàn)6</p><p> 4.1系統(tǒng)主要函數(shù)組成6</p><p> 4.2基本函數(shù)實(shí)現(xiàn)流程7</p><p> 5 代碼與解析
5、12</p><p> 6 調(diào)試與操作說(shuō)明18</p><p> 6.1操作說(shuō)明18</p><p> 6.2調(diào)試結(jié)果19</p><p><b> 總 結(jié)20</b></p><p> 參 考 文 獻(xiàn)20</p><p><b> 1.
6、序 言</b></p><p><b> 1.1關(guān)于數(shù)據(jù)結(jié)構(gòu)</b></p><p> 數(shù)據(jù)結(jié)構(gòu)是一門理論性強(qiáng)、思維抽象、難度較大的課程,是基礎(chǔ)課和專業(yè)課之間的橋梁。該課程的先行課程是計(jì)算機(jī)基礎(chǔ)、程序設(shè)計(jì)語(yǔ)言、離散數(shù)學(xué)等,后續(xù)課程有操作系統(tǒng)、編譯原理、數(shù)據(jù)庫(kù)原理、軟件工程等。 通過(guò)本門課程的學(xué)習(xí),我們應(yīng)該能透徹地理解各種數(shù)據(jù)對(duì)象的特點(diǎn),學(xué)會(huì)數(shù)據(jù)的組織
7、方法和實(shí)現(xiàn)方法,并進(jìn)一步培養(yǎng)良好的程序設(shè)計(jì)能力和解決實(shí)際問(wèn)題的能力,而且該課程的研究方法對(duì)我們學(xué)生在校和離校后的學(xué)習(xí)和工作,也有著重要的意義。</p><p> 數(shù)據(jù)結(jié)構(gòu)是計(jì)算機(jī)科學(xué)與技術(shù)專業(yè)的一門核心專業(yè)基礎(chǔ)課程,在該專業(yè)的課程體系中起著承上啟下的作用,學(xué)好數(shù)據(jù)結(jié)構(gòu)對(duì)于提高理論認(rèn)知水平和實(shí)踐能力有著極為重要的作用。學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)的最終目的是為了獲得求解問(wèn)題的能力。對(duì)于現(xiàn)實(shí)世界中的問(wèn)題,應(yīng)該能從中抽象出一個(gè)適當(dāng)?shù)?/p>
8、數(shù)學(xué)模型,該數(shù)學(xué)模型在計(jì)算機(jī)內(nèi)部用相應(yīng)的數(shù)據(jù)結(jié)構(gòu)來(lái)表示,然后設(shè)計(jì)一個(gè)解此數(shù)學(xué)模型的算法,再進(jìn)行編程調(diào)試,最后獲得問(wèn)題的解答。</p><p> 基于此原因,我們開(kāi)設(shè)了數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)。針對(duì)數(shù)據(jù)結(jié)構(gòu)課程的特點(diǎn),著眼于培養(yǎng)我們的實(shí)踐能力。實(shí)習(xí)課程是為了加強(qiáng)編程能力的培養(yǎng),鼓勵(lì)學(xué)生使用新興的編程語(yǔ)言。相信通過(guò)數(shù)據(jù)結(jié)構(gòu)課程實(shí)踐,無(wú)論是理論知識(shí),還是實(shí)踐動(dòng)手能力,同學(xué)們都會(huì)有不同程度上的提高。</p>&l
9、t;p> 1.2數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)的目的</p><p> 通過(guò)課程設(shè)計(jì)題目的練習(xí),強(qiáng)化學(xué)生對(duì)所學(xué)知識(shí)的掌握及對(duì)問(wèn)題分析和任務(wù)定義的理解,對(duì)每到題目作出了相應(yīng)的邏輯分析和數(shù)據(jù)結(jié)構(gòu)的選擇,通過(guò)對(duì)任務(wù)的分析,為操作對(duì)象定義相應(yīng)的數(shù)據(jù)結(jié)構(gòu),以過(guò)程化程序設(shè)計(jì)的思想方法為原則劃分各個(gè)模塊,定義數(shù)據(jù)的抽象數(shù)據(jù)類型。分模塊對(duì)題目進(jìn)行設(shè)計(jì),強(qiáng)化學(xué)生對(duì)C語(yǔ)言的掌握和對(duì)數(shù)據(jù)結(jié)構(gòu)的選擇及掌握。通過(guò)程序的編譯掌握對(duì)程序的調(diào)試方法
10、及思想,并且讓學(xué)生學(xué)會(huì)使用一些編程技巧。促使學(xué)生養(yǎng)成良好的編程習(xí)慣, 以及讓學(xué)生對(duì)書本上的知識(shí)進(jìn)行了實(shí)踐。算法與數(shù)據(jù)結(jié)構(gòu)這門課是計(jì)算機(jī)科學(xué)中一門綜合性的專業(yè)基礎(chǔ)課。它不僅是計(jì)算機(jī)學(xué)科的核心課程,而且已成為其它理工專業(yè)的熱門選修課。它又是操作系統(tǒng)、編譯原理、數(shù)據(jù)庫(kù)原理、算法分析、人工智能、圖象處理等專業(yè)課程的前導(dǎo)課。具有承上啟下的作用。數(shù)據(jù)結(jié)構(gòu)的研究不僅涉及到計(jì)算機(jī)硬件的研究范圍,而且和計(jì)算機(jī)軟件的研究有著密切的關(guān)系。計(jì)算機(jī)科學(xué)各領(lǐng)域及有
11、關(guān)的應(yīng)用軟件都要用到數(shù)據(jù)結(jié)構(gòu)。該課程的目的就是介紹一些最常用的數(shù)據(jù)結(jié)構(gòu),闡明數(shù)據(jù)結(jié)構(gòu)內(nèi)在的邏輯關(guān)系,討論它們?cè)谟?jì)算機(jī)中的存儲(chǔ)表示,并結(jié)合各種典型應(yīng)用說(shuō)明它們?cè)谶M(jìn)行各種運(yùn)算時(shí)的動(dòng)態(tài)性質(zhì)及實(shí)際的執(zhí)行算法。</p><p><b> 需求分析</b></p><p><b> 2.1題目要求</b></p><p><
12、b> 一元多項(xiàng)式加法器</b></p><p> 【問(wèn)題描述】 設(shè)計(jì)一個(gè)一元多項(xiàng)式加法器。【基本要求】</p><p><b> 輸入并建立多項(xiàng)式;</b></p><p> (2)兩個(gè)多項(xiàng)式相加;</p><p> (3)輸出多項(xiàng)式:n, c1, e1, c2, e2, …cn , en
13、, 其中,n是多項(xiàng)式項(xiàng)數(shù),ci和ei分別是第 i 項(xiàng)的系數(shù)和指數(shù),序列按指數(shù)降序排列。</p><p> (4)計(jì)算多項(xiàng)式在x處的值;</p><p> (5)求多項(xiàng)式的導(dǎo)函數(shù)。</p><p><b> 2.2題目分析</b></p><p> 在數(shù)學(xué)上,一個(gè)一元多項(xiàng)式Pn(x)可按降冪寫成:Pn(x)=a0+
14、a1 x+a2 x^2 +…+an x^n-1 .它由n+1個(gè)系數(shù)惟一確定,因此,在計(jì)算機(jī)里,它可用一個(gè)線性表P來(lái)表示:Pn=(a0,a1,a2,…,an)每一項(xiàng)的指數(shù)i隱含在其系數(shù)ai的序號(hào)里。題中只要求我們求兩個(gè)多項(xiàng)式的加法,求值,求導(dǎo)和輸入輸出功能,只要掌握其規(guī)律,運(yùn)用單鏈表的基本操作就能有效解決。</p><p><b> 3.概要設(shè)計(jì)</b></p><p&g
15、t;<b> 3.1總體解決方案</b></p><p> 1、任務(wù)思路與方法</p><p> 定義線性表的動(dòng)態(tài)分配順序存儲(chǔ)結(jié)構(gòu);</p><p> 建立多項(xiàng)式存儲(chǔ)結(jié)構(gòu),定義指針*next利用鏈表實(shí)現(xiàn)隊(duì)列的構(gòu)造;</p><p> 每次輸入一項(xiàng)的系數(shù)和指數(shù),可以輸出構(gòu)造的一元多項(xiàng)式;</p>
16、<p> 要解決多項(xiàng)式相加,必須要有多項(xiàng)式,所以必須首先建立兩個(gè)多項(xiàng)式,在這里采用鏈表的方式存儲(chǔ)鏈表,所以我將結(jié)點(diǎn)結(jié)構(gòu)體定義為</p><p> 運(yùn)用尾插法建立兩條單鏈表,以單鏈表polyn p和polyn h分別表示兩個(gè)一元多項(xiàng)式a和b,a+b的求和運(yùn)算等同于單鏈表的插入問(wèn)題(將單鏈表polyn p中的結(jié)點(diǎn)插入到單鏈表polyn h中),因此“和多項(xiàng)式”中的結(jié)點(diǎn)無(wú)須另生成。</p>
17、<p><b> 2.相關(guān)算法:</b></p><p> 1)元素類型、結(jié)點(diǎn)類型和指針類型:</p><p> typedef struct Polynomial{</p><p> float coef; //系數(shù)</p><p> int
18、 expn; //指數(shù)</p><p> struct Polynomial *next;</p><p> }*Polyn,Polynomial;</p><p> 2)建立一個(gè)頭指針為head、項(xiàng)數(shù)為m的一元多項(xiàng)式, 建立新結(jié)點(diǎn)以接收數(shù)據(jù), 調(diào)用Insert函數(shù)插入結(jié)點(diǎn):</p><p> Polyn Crea
19、tePolyn(Polyn head,int m){ </p><p> int i;</p><p> Polyn p;</p><p> p=head=(Polyn)malloc(sizeof(struct Polynomial));</p><p> head->next=NULL;</p>&l
20、t;p> for(i=0;i<m;i++)</p><p><b> {</b></p><p> p=(Polyn)malloc(sizeof(struct Polynomial)); </p><p> printf("請(qǐng)輸入第%d項(xiàng)的系數(shù)與指數(shù):",i+1);</p><p&g
21、t; scanf("%f %d",&p->coef,&p->expn);</p><p> Insert(p,head); </p><p><b> }</b></p><p> return head;</p>&
22、lt;p><b> }</b></p><p> 3.2總體功能流程圖</p><p><b> 詳細(xì)設(shè)計(jì)與實(shí)現(xiàn)</b></p><p> 4.1系統(tǒng)的主要函數(shù)組成</p><p> 1. main()函數(shù)</p><p> main函數(shù)用來(lái)實(shí)現(xiàn)提示使用者輸
23、入、顯示功能列表、調(diào)用其他運(yùn)算函數(shù)實(shí)現(xiàn)運(yùn)算功能。</p><p> 在main()函數(shù)中,定義m、n用來(lái)保存兩個(gè)多項(xiàng)式的項(xiàng)數(shù),pa、pb、pc、pd、pf定義程序所需鏈表的頭指針。在程序開(kāi)始要求輸入兩個(gè)多項(xiàng)式的項(xiàng)數(shù),隨后根據(jù)項(xiàng)數(shù)創(chuàng)建兩個(gè)鏈表以保存多項(xiàng)式,再顯示出功能列表后通過(guò)if語(yǔ)句來(lái)實(shí)現(xiàn)功能的選擇,從而對(duì)整個(gè)程序流程進(jìn)行控制。</p><p> 2. Polyn CreatePol
24、yn(Polyn head,int m)</p><p> 該函數(shù)功能是創(chuàng)建新的多項(xiàng)式鏈表。int m保存的多項(xiàng)式的項(xiàng)數(shù),使用for語(yǔ)句,控制輸入多項(xiàng)式的每一項(xiàng)。當(dāng)創(chuàng)建的鏈表長(zhǎng)度為m時(shí),將不再提示用戶繼續(xù)輸入多項(xiàng)式的系數(shù)和指數(shù)。</p><p> 在該函數(shù)中要用到分配空間的函數(shù)malloc()為新建鏈表分配空間。</p><p> 3. void Destr
25、oyPolyn(Polyn p)</p><p> 該函數(shù)的功能是銷毀掉創(chuàng)建的兩個(gè)鏈表,釋放內(nèi)存。以輔助退出程序。</p><p> 4. void Insert(Polyn p,Polyn h)</p><p> 該函數(shù)功能:將新的節(jié)點(diǎn)p插入到現(xiàn)有鏈表的后面,并確保多項(xiàng)式的指數(shù)exp是升序。將s節(jié)點(diǎn)插入到head所指向的鏈表。在該函數(shù)的操作中,要注意指針是
26、如何移動(dòng)的。</p><p> 5. Polyn AddPolyn(Polyn pa,Polyn pb)</p><p> 該函數(shù)功能:實(shí)現(xiàn)兩個(gè)多項(xiàng)式pa、pb相加,并將計(jì)算結(jié)果存儲(chǔ)于新建立的pc中,它的原理是將指數(shù)相同的單項(xiàng)式相加,系數(shù)相加后為0,則pa、pb的指針都后移。在加法計(jì)算中要求pa,與pb的冪次序都是升序,否則可能得到錯(cuò)誤的結(jié)果。</p><p>
27、; 該函數(shù)調(diào)用了int compare(Polyn a,Polyn b)的結(jié)果,用來(lái)判斷多項(xiàng)式在同一指數(shù)下a、b是否有為系數(shù)為0。同樣也使用了malloc()關(guān)鍵字,為新鏈表創(chuàng)建空間。</p><p> 6. int compare(Polyn a,Polyn b)</p><p> 該函數(shù)功能:判斷兩個(gè)多項(xiàng)式在同一指數(shù)下是否有其中一個(gè)為系數(shù)為0。用來(lái)輔助加法和乘法運(yùn)算。</
28、p><p> 7. void PrintPolyn(Polyn P)</p><p> 該函數(shù)功能:顯示多項(xiàng)式鏈表。在該函數(shù)中較復(fù)雜的是如何控制鏈表的輸出,尤其是第一項(xiàng)的輸出,同時(shí)還有符號(hào)的控制。在輸出第一項(xiàng)時(shí)要判斷是不是常數(shù)項(xiàng),若是,則不要輸出字符x。</p><p> float ValuePolyn(Polyn pa,float x)</p>
29、<p> 該函數(shù)功能:求多項(xiàng)式在x處的值,對(duì)于指數(shù)小于0和大于0的多項(xiàng)式采用不同的算法,最后再把多項(xiàng)式的和輸出。</p><p> Polyn Derivation(Polyn head)</p><p> 該函數(shù)功能:對(duì)多項(xiàng)式求導(dǎo),對(duì)指數(shù)和系數(shù)分別采用不同的算法,再把結(jié)點(diǎn)重新插入一個(gè)新的鏈表。</p><p> 4.2基本函數(shù)實(shí)現(xiàn)流程</
30、p><p><b> 1.輸出多項(xiàng)式</b></p><p> 假設(shè)指針p指向多項(xiàng)式的第一項(xiàng)</p><p> P所指指數(shù)為0,則直接輸出系數(shù)</p><p> p所指指數(shù)為1,如果系數(shù)即不為1,也不為0,則直接輸出系數(shù);如果系數(shù)為-1,則輸出系數(shù)“-”,最后輸出“x”</p><p> p
31、所指指數(shù)即不為0,也不為1,如果系數(shù)為-1,則輸出“-x^”和指數(shù),如果系數(shù)為1,則輸出“x^”和指數(shù),否則輸出系數(shù)、“x^”及指數(shù)</p><p><b> 流程圖如下圖:</b></p><p><b> 2.多項(xiàng)式相加</b></p><p> 根據(jù)一元多項(xiàng)式相加的運(yùn)算規(guī)則:對(duì)于兩個(gè)一元多項(xiàng)式中指數(shù)相同的項(xiàng),對(duì)
32、應(yīng)的系數(shù)相加,若之和不為零,則構(gòu)成“和多項(xiàng)式”中的一項(xiàng);對(duì)于兩個(gè)一元多項(xiàng)式中指數(shù)不相同的項(xiàng),則將指數(shù)小的添加到“和的多項(xiàng)式”中去,最后將還沒(méi)結(jié)束的多項(xiàng)式插入到和的多項(xiàng)式中去。</p><p><b> 流程圖如下圖:</b></p><p><b> 3.多項(xiàng)式求值</b></p><p> 假設(shè)指針p指向多項(xiàng)式的第
33、一項(xiàng),sum2代表整個(gè)多項(xiàng)式的值(開(kāi)始賦值為0),sum1代表一項(xiàng)的值(開(kāi)始賦值為1)</p><p> 每一項(xiàng)求法:指數(shù)為n,則x連乘n次,得到sum1,然后再用sum1乘系數(shù)</p><p> 最后將每一項(xiàng)加到sum2中。</p><p><b> 流程圖如下圖:</b></p><p><b>
34、4.多項(xiàng)式求導(dǎo)</b></p><p><b> 假設(shè)p指向多項(xiàng)式A</b></p><p> 如果該多項(xiàng)式為常數(shù),則p指向下一項(xiàng)</p><p> 否則系數(shù)=系數(shù)*指數(shù),指數(shù)=指數(shù)-1</p><p> 將產(chǎn)生的新的項(xiàng)插入到新的多項(xiàng)式B中,p指向下一項(xiàng)</p><p><
35、;b> 流程圖如下圖:</b></p><p><b> 代碼與解析</b></p><p> #include<stdio.h></p><p> #include<malloc.h></p><p> typedef struct Polynomial{</p
36、><p> float coef;</p><p><b> int expn;</b></p><p> struct Polynomial *next;</p><p> }*Polyn,Polynomial; //Polyn為結(jié)點(diǎn)指針類型</p><p>
37、//*****************插入多項(xiàng)式中的因子******************//</p><p> void Insert(Polyn p,Polyn h){ </p><p> if(p->coef==0) free(p); //系數(shù)為0的話釋放結(jié)點(diǎn)</p><p><b> else{</b>
38、</p><p> Polyn q1,q2;</p><p> q1=h;q2=h->next;</p><p> while(q2&&p->expn<q2->expn){ //查找插入位置</p><p><b> q1=q2;</b></p><
39、p> q2=q2->next;</p><p><b> }</b></p><p> if(q2&&p->expn==q2->expn){ //將指數(shù)相同相合并</p><p> q2->coef+=p->coef;</p><p><b>
40、 free(p);</b></p><p> if(!q2->coef){ //系數(shù)為0的話釋放結(jié)點(diǎn)</p><p> q1->next=q2->next;</p><p><b> free(q2);</b></p><p><b> }<
41、/b></p><p><b> }</b></p><p> else{ //指數(shù)為新時(shí)將結(jié)點(diǎn)插入</p><p> p->next=q2;</p><p> q1->next=p;</p><p><b>
42、 }</b></p><p><b> }</b></p><p><b> }//Insert</b></p><p> //*************建立多項(xiàng)式****************//</p><p> Polyn CreatePolyn(Polyn head,i
43、nt m){//建立一個(gè)頭指針為head、項(xiàng)數(shù)為m的一元多項(xiàng)式</p><p><b> int i;</b></p><p><b> Polyn p;</b></p><p> p=head=(Polyn)malloc(sizeof(struct Polynomial));</p><p>
44、; head->next=NULL;</p><p> for(i=0;i<m;i++){</p><p> p=(Polyn)malloc(sizeof(struct Polynomial));//建立新結(jié)點(diǎn)以接收數(shù)據(jù)</p><p> printf("請(qǐng)輸入第%d項(xiàng)的系數(shù)與指數(shù):",i+1);</p><
45、;p> scanf("%f %d",&p->coef,&p->expn);</p><p> Insert(p,head); //調(diào)用Insert函數(shù)插入結(jié)點(diǎn)</p><p><b> }</b></p><p> return head;</p><p>
46、; }//CreatePolyn</p><p> //*************刪除多項(xiàng)式****************//</p><p> void DestroyPolyn(Polyn p){</p><p> Polyn q1,q2;</p><p> q1=p->next;</p><p>
47、; q2=q1->next;</p><p> while(q1->next){</p><p><b> free(q1);</b></p><p> q1=q2;//指針后移</p><p> q2=q2->next;</p><p><b> }<
48、;/b></p><p><b> }</b></p><p> //***************輸出多項(xiàng)式******************//</p><p> void PrintPolyn(Polyn P){ </p><p> Polyn q=P->next; </p>&
49、lt;p> int flag=1;//項(xiàng)數(shù)計(jì)數(shù)器</p><p> if(!q) { //若多項(xiàng)式為空,輸出0</p><p> putchar('0'); </p><p> printf("\n");</p><p><b> return;</b></p&g
50、t;<p><b> } </b></p><p> while (q){</p><p> if(q->coef>0&&flag!=1) putchar('+'); //系數(shù)大于0且不是第一項(xiàng)</p><p> if(q->coef!=1&&q->
51、;coef!=-1){//系數(shù)非1或-1的普通情況</p><p> printf("%g",q->coef); </p><p> if(q->expn==1) putchar('X');</p><p> else if(q->expn) printf("X^%d",q->ex
52、pn);</p><p><b> }</b></p><p><b> else{</b></p><p> if(q->coef==1){</p><p> if(!q->expn) putchar('1'); </p><p> e
53、lse if(q->expn==1) putchar('X'); </p><p> else printf("X^%d",q->expn);</p><p><b> }</b></p><p> if(q->coef==-1){</p><p> if(!
54、q->expn) printf("-1"); </p><p> else if(q->expn==1) printf("-X"); </p><p> else printf("-X^%d",q->expn);</p><p><b> }</b></p
55、><p><b> }</b></p><p> q=q->next; </p><p><b> flag++;</b></p><p><b> }//while</b></p><p> printf("\n");&
56、lt;/p><p> }//PrintPolyn</p><p> int compare(Polyn a,Polyn b){</p><p><b> if(a&&b){</b></p><p> if(!b||a->expn>b->expn) return 1;</p>
57、;<p> else if(!a||a->expn<b->expn) return -1;</p><p> else return 0;</p><p><b> }</b></p><p> else if(!a&&b) return -1;//a多項(xiàng)式已空,但b多項(xiàng)式非空</p
58、><p> else return 1;//b多項(xiàng)式已空,但a多項(xiàng)式非空</p><p> }//compare</p><p> //**************多項(xiàng)式加法函數(shù)*****************//</p><p> Polyn AddPolyn(Polyn pa,Polyn pb){//求解并建立多項(xiàng)式a+b,返回其頭
59、指針</p><p> Polyn qa=pa->next;</p><p> Polyn qb=pb->next;</p><p> Polyn headc,hc,qc;</p><p> hc=(Polyn)malloc(sizeof(struct Polynomial));//建立頭結(jié)點(diǎn)</p><
60、;p> hc->next=NULL;</p><p><b> headc=hc;</b></p><p> while(qa||qb){</p><p> qc=(Polyn)malloc(sizeof(struct Polynomial));</p><p> switch(compare(qa
61、,qb)){</p><p><b> case 1:</b></p><p><b> {</b></p><p> qc->coef=qa->coef;</p><p> qc->expn=qa->expn;</p><p> qa=qa
62、->next;</p><p><b> break;</b></p><p><b> }</b></p><p><b> case 0:</b></p><p><b> { </b></p><p> qc-
63、>coef=qa->coef+qb->coef;</p><p> qc->expn=qa->expn;</p><p> qa=qa->next;</p><p> qb=qb->next;</p><p><b> break;</b></p><
64、p><b> }</b></p><p><b> case -1:</b></p><p><b> {</b></p><p> qc->coef=qb->coef;</p><p> qc->expn=qb->expn;</p
65、><p> qb=qb->next;</p><p><b> break;</b></p><p><b> } </b></p><p><b> }//switch</b></p><p> if(qc->coef!=0){<
66、;/p><p> qc->next=hc->next;</p><p> hc->next=qc;</p><p><b> hc=qc;</b></p><p><b> }</b></p><p> else free(qc);//當(dāng)相加系數(shù)為0時(shí)
67、,釋放該結(jié)點(diǎn)</p><p><b> }//while</b></p><p> return headc;</p><p> }//AddPolyn</p><p> //**************求多項(xiàng)式在X處的值*******************//</p><p> fl
68、oat ValuePolyn(Polyn pa,float x)//求多項(xiàng)式a在X處的值</p><p><b> {</b></p><p><b> Polyn p;</b></p><p><b> int i;</b></p><p><b> flo
69、at t;</b></p><p> float sum=0;</p><p> for(p=pa->next;p;p=p->next)</p><p><b> {</b></p><p><b> t=1;</b></p><p> fo
70、r(i=p->expn;i!=0;)</p><p><b> {</b></p><p> if(i<0){t/=x;i++;} //指數(shù)小于,進(jìn)行除法</p><p> else{t*=x;i--;} //指數(shù)大于,進(jìn)行乘法</p><p>
71、<b> }</b></p><p> sum+=p->coef*t;</p><p><b> }</b></p><p> return sum;</p><p><b> }</b></p><p> //************
72、**多項(xiàng)式求導(dǎo)函數(shù)******************//</p><p> Polyn Derivation(Polyn head){ //求解并建立導(dǎo)函數(shù)多項(xiàng)式,并返回其頭指針</p><p> Polyn q=head->next,p1,p2,hd;</p><p> hd=p1=(Polyn)malloc(sizeof(s
73、truct Polynomial));//建立頭結(jié)點(diǎn)</p><p> hd->next=NULL;</p><p><b> while(q)</b></p><p><b> {</b></p><p> if(q->expn!=0)</p><p>
74、 { //該項(xiàng)不是常數(shù)項(xiàng)時(shí)</p><p> p2=(Polyn)malloc(sizeof(struct Polynomial));</p><p> p2->coef=q->coef*q->expn;</p><p> p2->expn=q->expn-1;&
75、lt;/p><p> p2->next=p1->next; //連接結(jié)點(diǎn)</p><p> p1->next=p2;</p><p><b> p1=p2;</b></p><p><b> }</b></p><p> q=q-
76、>next;</p><p><b> }</b></p><p> return hd;</p><p><b> }</b></p><p> //*******************主函數(shù)*********************//</p><p>
77、 int main(){</p><p> int m,n,flag=0;</p><p> float x,y;</p><p> Polyn pa=0,pb=0,pc,pd;//定義各式的頭指針,pa與pb在使用前付初值NULL</p><p><b> //輸出菜單</b></p><p
78、> printf("歡迎使用一元多項(xiàng)式加法器\n");</p><p> printf("**********************************************\n");</p><p> printf("操作提示:\n\t1.輸入多項(xiàng)式a和b\n\t2.輸出多項(xiàng)式a和b\n\t3.輸出多項(xiàng)式a+b\n\t
79、4.輸出多項(xiàng)式a在x處的值\n\t5.輸出多項(xiàng)式a的導(dǎo)函數(shù)\n");</p><p> printf("\t6.退出\n**********************************************\n");</p><p> for(;;flag=0){</p><p> printf("執(zhí)行操作(輸入1
80、~6):");</p><p> scanf("%d",&flag);</p><p> if(flag==1){</p><p> printf("請(qǐng)輸入a的項(xiàng)數(shù):");</p><p> scanf("%d",&m);</p>&l
81、t;p> pa=CreatePolyn(pa,m);//建立多項(xiàng)式a</p><p> printf("請(qǐng)輸入b的項(xiàng)數(shù):");</p><p> scanf("%d",&n);</p><p> pb=CreatePolyn(pb,n);//建立多項(xiàng)式b</p><p><b
82、> }</b></p><p> if(flag==2){</p><p> printf("多項(xiàng)式a:");PrintPolyn(pa);</p><p> printf("多項(xiàng)式b:");PrintPolyn(pb);continue;</p><p><b>
83、 }</b></p><p> if(flag==3){</p><p> pc=AddPolyn(pa,pb);</p><p> printf("輸出多項(xiàng)式a+b:");PrintPolyn(pc);</p><p> DestroyPolyn(pc);continue;</p>&l
84、t;p><b> }</b></p><p> if(flag==4){</p><p> printf("請(qǐng)輸入X的值: ");</p><p> scanf("%f",&x);</p><p> printf("所求多項(xiàng)式值為:%.3f\n&
85、quot;,ValuePolyn(pa,x));</p><p><b> continue;</b></p><p><b> }</b></p><p> if(flag==5){</p><p> pd=Derivation(pa);</p><p> pri
86、ntf("多項(xiàng)式a的導(dǎo)函數(shù)為:");</p><p> PrintPolyn(pd);</p><p> DestroyPolyn(pd);</p><p><b> continue;</b></p><p><b> }</b></p><p>
87、; if(flag==6) break;</p><p> if(flag<1||flag>6) printf("Error!!!\n");continue;</p><p><b> }//for</b></p><p> DestroyPolyn(pa);</p><p>
88、DestroyPolyn(pb);</p><p><b> return 0;</b></p><p><b> }</b></p><p><b> 6 調(diào)試與操作說(shuō)明</b></p><p><b> 6.1操作說(shuō)明</b></p>
89、;<p> 先選擇功能,輸入(1~6),</p><p> 輸入1,輸出兩個(gè)多項(xiàng)式a與b 。</p><p> 輸入2,輸出兩個(gè)多項(xiàng)式a與b 。</p><p> 3.輸入3,輸出多項(xiàng)式a+b 。</p><p> 4.輸入4,輸出多項(xiàng)式a在x處的值 。</p><p> 5.輸入5,輸出多項(xiàng)
90、式a的導(dǎo)函數(shù)。</p><p> 6.輸入6,退出 。</p><p> 根據(jù)提示逐個(gè)輸入即可。</p><p><b> 6.2調(diào)試結(jié)果</b></p><p> 由上述一系列操作之后得到的運(yùn)行解過(guò)下圖所示:</p><p> 由上述一系列操作之后得到的結(jié)果的輸出格式完全按照題目要求輸
91、出,結(jié)果也完全符合一元多項(xiàng)式的加法、求值、求導(dǎo)過(guò)程后的結(jié)果一致,可見(jiàn)整個(gè)系統(tǒng)的流程和算法是正確的,因此本系統(tǒng)有一定的可行性。</p><p><b> 總結(jié)</b></p><p> 通過(guò)這次課程設(shè)計(jì)練習(xí),使我更深刻地理解了C語(yǔ)言的精髓-----指針的使用。完成整個(gè)程序設(shè)計(jì)后對(duì)指針掌握的更加熟練。</p><p> 同時(shí)通過(guò)直接對(duì)鏈表
92、的操作,加深了對(duì)數(shù)據(jù)結(jié)構(gòu)的理解和認(rèn)識(shí)。并在完成課程設(shè)計(jì)的過(guò)程作主動(dòng)查閱了相關(guān)資料,學(xué)到了不少課本上沒(méi)有的技術(shù)知識(shí)。</p><p> 經(jīng)過(guò)這次課程設(shè)計(jì),我深刻認(rèn)識(shí)到算法在程序設(shè)計(jì)中的重要性,一個(gè)完整的程序總是由若干個(gè)函數(shù)構(gòu)成的,這些相應(yīng)的函數(shù)體現(xiàn)了算法的基本思想。</p><p> 編程是一件枯燥乏味工作,但是只要認(rèn)真鉆研,我們會(huì)從中學(xué)到很多在課本上學(xué)不到或者無(wú)法在課堂上掌握的知識(shí),同
93、時(shí)也能從中感受到編程的樂(lè)趣。興趣是可以培養(yǎng)的,只要堅(jiān)持下去,面對(duì)困難我們總能夠找到解決問(wèn)題的方法。</p><p> 在實(shí)際的上機(jī)操作過(guò)程中,不僅是讓我們了解數(shù)據(jù)結(jié)構(gòu)的理論知識(shí),更重要的是培養(yǎng)解決實(shí)際問(wèn)題的能力,所以相信通過(guò)此次實(shí)習(xí)可以提高我們分析設(shè)計(jì)能力和編程能力,為后續(xù)課程的學(xué)習(xí)及實(shí)踐打下良好的基礎(chǔ)。</p><p> 另外也需要提出的是在這次程序設(shè)計(jì)的過(guò)程中,非常感謝老師對(duì)我們的
94、耐心指導(dǎo)。老師在教學(xué)過(guò)程中表現(xiàn)出來(lái)的對(duì)學(xué)術(shù)專研一絲不茍的精神讓我非常有收獲。同樣也是老師的嚴(yán)格要求才使得小組成員能夠順利的完成任務(wù)。</p><p><b> 參 考 文 獻(xiàn)</b></p><p> 1.朱若愚.數(shù)據(jù)結(jié)構(gòu)[M].北京: 電子工業(yè)出版社, 2004.1:44-55</p><p> 2.嚴(yán)蔚敏,吳偉民.數(shù)據(jù)結(jié)構(gòu)(C語(yǔ)言版)
溫馨提示
- 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ù)僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)---一元多項(xiàng)式
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)----一元多項(xiàng)式
- 一元多項(xiàng)式計(jì)算(數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì))
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)---一元多項(xiàng)式計(jì)算
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)_一元多項(xiàng)式的加法、減法、乘法的實(shí)現(xiàn)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)---一元多項(xiàng)式的加法、減法、乘法的實(shí)現(xiàn)
- 一元多項(xiàng)式的加法、減法、乘法的實(shí)現(xiàn)數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)-一元多項(xiàng)式的加法、減法、乘法的實(shí)現(xiàn)
- 一元多項(xiàng)式的計(jì)算數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)-一元多項(xiàng)式的代數(shù)運(yùn)算
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)-一元多項(xiàng)式計(jì)算器
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告一元多項(xiàng)式的計(jì)算
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告一元多項(xiàng)式的實(shí)現(xiàn)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告-一元多項(xiàng)式加減運(yùn)算
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告一元多項(xiàng)式的計(jì)算
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告-一元多項(xiàng)式加減運(yùn)算
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告一元多項(xiàng)式的計(jì)算
- 一元多項(xiàng)式的計(jì)算數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)-一元多項(xiàng)式的表示及相加
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)--一元稀疏多項(xiàng)式計(jì)算器
評(píng)論
0/150
提交評(píng)論