版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p><b> 一元多項(xiàng)式計(jì)算</b></p><p> 班級(jí):信息本1002學(xué)號(hào):09姓名:</p><p> 班級(jí):信息本1002學(xué)號(hào):26姓名:</p><p> 班級(jí):信息本1002學(xué)號(hào):34姓名:</p><p> 班級(jí):信息本1002學(xué)號(hào):41姓名:</p><p>&l
2、t;b> 目 錄</b></p><p><b> 一、課題任務(wù)1</b></p><p><b> 二、概要設(shè)計(jì)1</b></p><p><b> 三、詳細(xì)設(shè)計(jì)2</b></p><p><b> 四、調(diào)試分析6</b
3、></p><p><b> 五、測(cè)試結(jié)果6</b></p><p> 六、課程設(shè)計(jì)總結(jié)9</p><p><b> 七、參考文獻(xiàn)9</b></p><p><b> 八、附錄10</b></p><p><b> 一、
4、課題任務(wù)</b></p><p> 功能: 1).能夠按照指數(shù)降序排列建立并輸出多項(xiàng)式;</p><p> 2).能夠完成兩個(gè)多項(xiàng)式的相加,并將結(jié)果輸出;</p><p> 3).能根據(jù)輸入的多項(xiàng)式及變量的值,能進(jìn)行計(jì)算。并輸出計(jì)算結(jié)果。</p><p> 4).能對(duì)多個(gè)輸入的表達(dá)式按照指數(shù)大小排序輸出。</p&
5、gt;<p><b> 二、概要設(shè)計(jì)</b></p><p><b> 三、詳細(xì)設(shè)計(jì)</b></p><p> 一元多項(xiàng)式定義系數(shù)和指數(shù)結(jié)構(gòu)如下: </p><p> coef域--存放結(jié)點(diǎn)的系數(shù)值</p><p> expn域--存放結(jié)點(diǎn)的指數(shù)值</p>&l
6、t;p> next域--存放結(jié)點(diǎn)的直接后繼的地址(位置)的指針域(鏈域)</p><p> 一元多項(xiàng)式單鏈表存儲(chǔ)結(jié)構(gòu):</p><p> typedef struct term </p><p> { float coef; //系數(shù) </p><p> int expn; //指數(shù) </p><
7、;p> struct term *next; </p><p><b> }term;</b></p><p> 有了鏈表特定的數(shù)據(jù)類型term,接下來就需要建立這個(gè)鏈表。這里我們自定義一個(gè)構(gòu)造函數(shù)CreatePoly()來構(gòu)造鏈表。首先定義一個(gè)term型的指針變量h=p作為頭結(jié)點(diǎn),存儲(chǔ)多項(xiàng)式的信息(項(xiàng)數(shù)),為h分配存儲(chǔ)空間建立一個(gè)頭結(jié)點(diǎn)并為其數(shù)據(jù)域賦值,
8、分配存儲(chǔ)空間用malloc()函數(shù)來實(shí)現(xiàn);這時(shí)輸入多項(xiàng)式的項(xiàng)數(shù)m,先給p的coef賦值為0,此時(shí)利用一個(gè)for循環(huán)將p鏈表的coef與expn值從鍵盤輸入,用m來控制循環(huán)的次數(shù),若該從鍵盤輸入的coef值不為0,則將該數(shù)值插入鏈表新建鏈表q,用malloc()分配給p空間,p=p->next繼續(xù)從鍵盤輸入coef與expn的值,直到滿足p->next=null,輸入完成,返回鏈表q即為多項(xiàng)式的系數(shù)與指數(shù),創(chuàng)建多項(xiàng)式完成。&l
9、t;/p><p> 在處理多項(xiàng)式相加的問題上,由于事先建立的多項(xiàng)式函數(shù)已經(jīng)按指數(shù)大小排好序,那么多項(xiàng)式的相加就變得不那么復(fù)雜了,我們只要找出兩個(gè)相加多項(xiàng)式指數(shù)相同的項(xiàng)進(jìn)行合并,即將指數(shù)相同的項(xiàng)的系數(shù)相加,其它的保持不變存好即可。而查找指數(shù)相同的項(xiàng),只要按鏈表從頭到尾進(jìn)行掃描,若發(fā)現(xiàn)相同,則兩個(gè)同時(shí)往下移,否則只將其中指數(shù)較大的往下移。假若兩個(gè)指數(shù)相同的項(xiàng)進(jìn)行合并時(shí),其系數(shù)相加值為0,則消除該項(xiàng),繼續(xù)下去。</
10、p><p> 在處理輸入的多項(xiàng)式及變量的值計(jì)算結(jié)果的問題時(shí),定義一個(gè)C()函數(shù)實(shí)現(xiàn),需要定義一個(gè)float變量sum來存儲(chǔ)和值,再引用一個(gè)pow()函數(shù)來計(jì)算多項(xiàng)式的和,利用一個(gè)for循環(huán)來一一計(jì)算x的q->expn次方后與q->coef相乘的值,并存儲(chǔ)在sum中,q=q->next,直到q->next =unll,跳出for循環(huán),返回 sum的值就是多項(xiàng)式在用x賦值后的值。</p&g
11、t;<p> 對(duì)多個(gè)輸入的表達(dá)式按照指數(shù)從大到小排序輸出:,利用一個(gè)for(包含兩個(gè)函數(shù)CreatPolyn(M,n);selsort(M);)循環(huán),用scanf()輸入k來控制for的次數(shù)可控制輸入的多項(xiàng)式個(gè)數(shù),并一個(gè)trem型數(shù)組G[i]來保存每一個(gè)多項(xiàng)式,方便后來的按最高指數(shù)大小排序。排序的思想利用枚舉排序法可將每個(gè)多項(xiàng)式最高次expn按從大到小排列并保存在G[i]數(shù)組中,再次利用for將排序好的G[i]多項(xiàng)式按指
12、數(shù)從大到小輸出。</p><p> 具體子功能流程圖如下:</p><p><b> 多項(xiàng)式的計(jì)算</b></p><p> 多項(xiàng)式的建立 </p><p> 多個(gè)多項(xiàng)式排序
13、 多項(xiàng)式相減</p><p> 輸出多項(xiàng)式q流程圖:</p><p><b> N</b></p><p><b> Y</b></p><p><b> N</b></p><p><b> Y<
14、;/b></p><p><b> Y</b></p><p> N </p><p><b> Y</b></p>&
15、lt;p><b> N</b></p><p><b> Y</b></p><p><b> N</b></p><p><b> Y</b></p><p><b> N</b></p><
16、p> 多項(xiàng)式輸出主要是對(duì)已建立的多項(xiàng)式按鏈表從頭到尾掃描指數(shù)跟系數(shù)進(jìn)行多重判斷,根據(jù)指數(shù)和系數(shù)輸出相應(yīng)的數(shù)值與符號(hào),直到多項(xiàng)式輸出完成。</p><p><b> 四、調(diào)試分析</b></p><p> 程序的調(diào)試是程序順利完成中非常關(guān)鍵的一步。通過程序的調(diào)試分析可以解決程序的運(yùn)行錯(cuò)誤也可以對(duì)程序的性能進(jìn)行分析。這個(gè)多項(xiàng)式運(yùn)算問題研究的程序最重要的就是看輸
17、出的鏈表是否正確,是否帶有空結(jié)點(diǎn),運(yùn)行結(jié)果輸出是否正確。決定程序成功與否的第一步是定義的CreatPolyn()函數(shù)操作是否正確,如果這一步中出現(xiàn)錯(cuò)誤,那么接下來的操作可以說是錯(cuò)上加錯(cuò)。在調(diào)試的時(shí)候可以在程序中加入刪除、釋放空結(jié)點(diǎn)操作,此操作是由Delet()與free()函數(shù)完成的,若輸出的多項(xiàng)式?jīng)]有空結(jié)點(diǎn)說明函數(shù)正確,可以繼續(xù)向下進(jìn)行。接下來就是函數(shù)相加,控制此操作的關(guān)鍵是一個(gè)A ()函數(shù),其中調(diào)用APolyn()函數(shù)是決定成功與否
18、的關(guān)鍵,而函數(shù)的相減正是相加一個(gè)負(fù)數(shù),將減數(shù)多項(xiàng)式的coef變?yōu)樨?fù)值便實(shí)現(xiàn)了多項(xiàng)式的相減??梢韵仍诒旧蠈懗鰞蓚€(gè)正確的簡(jiǎn)單的多項(xiàng)式,使其具有相加后出現(xiàn)空結(jié)點(diǎn)的特點(diǎn),然后變換循環(huán)變量的范圍,當(dāng)輸出吻合時(shí)則說明操作正確。對(duì)于根據(jù)輸入的多項(xiàng)式及變量的值進(jìn)行計(jì)算,控制此操作的關(guān)鍵是如何計(jì)算多項(xiàng)式中多次方的值,此操作關(guān)鍵是一個(gè)C()函數(shù),調(diào)用pow()函數(shù)來實(shí)現(xiàn)計(jì)算次方的功能,其中sum值的計(jì)算是否正確起關(guān)鍵作用。</p><p
19、> 下面我們分析一下程序的性能。在主函數(shù)中,首先調(diào)用構(gòu)造單鏈表函數(shù)CreatePoly(),在這個(gè)函數(shù)中需要通過一個(gè)for循環(huán)為每個(gè)結(jié)點(diǎn)分配存儲(chǔ)空間,變換節(jié)點(diǎn)的next域,時(shí)間復(fù)雜度為O(n)。接下來執(zhí)行selsort()函數(shù)對(duì)多項(xiàng)式進(jìn)行按指數(shù)排序,其中一個(gè)雙重for循環(huán),在內(nèi)部的for循環(huán)中是對(duì)相鄰結(jié)點(diǎn)指數(shù)大小比較進(jìn)行操作,所以每個(gè)結(jié)點(diǎn)的操作都需要m次,共n個(gè)結(jié)點(diǎn),則需要mn次操作,時(shí)間復(fù)雜度為O(nn)。其后的for循環(huán)是比
20、較將指數(shù)相同的數(shù)進(jìn)行合并,時(shí)間復(fù)雜度為O(n)。</p><p><b> 五、測(cè)試結(jié)果</b></p><p> 系統(tǒng)選擇界面如圖 6-1</p><p><b> 圖6-1</b></p><p> 測(cè)試按照指數(shù)降序排列輸出多項(xiàng)式 8*x^1+9*x^0+7*x^2+6*x^3 <
21、;/p><p><b> 輸入數(shù)據(jù)為:</b></p><p><b> 1(enter)</b></p><p><b> 4(enter)</b></p><p> 8 1 9 0 7 2 6 3(enter)</p><p> 輸出結(jié)果為:6
22、*x^3+7*x^2+8*x^1+9</p><p><b> 測(cè)試結(jié)果如圖6-2</b></p><p><b> 圖6-2</b></p><p> 測(cè)試兩個(gè)多項(xiàng)式相加8*x^1+9*x^0+7*x^2+6*x^3; 0*x^0+1*x^3+5*x^2;</p><p><b>
23、; 輸入數(shù)據(jù)為:</b></p><p><b> 2(enter)</b></p><p><b> 4(enter)</b></p><p> 8 1 9 0 7 2 6 3 (enter)</p><p><b> 3(enter)</b></
24、p><p> 0 0 1 3 5 2(enter)</p><p> 輸出結(jié)果為:7x^3+12x^2+8x+9</p><p><b> 測(cè)試結(jié)果如圖6-3</b></p><p><b> 圖6-3</b></p><p> 輸入的多項(xiàng)式及變量的值計(jì)算結(jié)果測(cè)試<
25、;/p><p> 測(cè)試多項(xiàng)式4x^3+5x^4+6x^1+7x^0 當(dāng)x值為2.5時(shí)的值為279.8125</p><p><b> 輸入數(shù)據(jù)為:</b></p><p> 4(enter) 4(enter)</p><p> 4 3 5 4 6 1 7 0(enter)</p><p>
26、 2.5(enter)</p><p><b> 測(cè)試結(jié)果如圖6-4</b></p><p><b> 圖6-4</b></p><p> 測(cè)試對(duì)多個(gè)輸入的表達(dá)式按照指數(shù)從大到小排序輸出</p><p> 測(cè)試多項(xiàng)式8*x^1+9*x^0+7*x^2+6*x^3; 0*x^0+1*x^3+5
27、*x^2;4x^3+5x^4+6x^1+7x^0</p><p><b> 輸入數(shù)據(jù)為:</b></p><p> 5(enter) 3(enter) </p><p> 4(enter) 8 1 9 0 7 2 6 3 (enter)</p><p> 3(enter) 0 0 1 3 5 2 (enter
28、)</p><p> 4(enter) 4 3 5 4 6 1 7 0 (enter)</p><p> 輸出結(jié)果為:5x^4+4x^3+6x+7; 6*x^3+7*x^2^+8*x +9;x^3+5*x^2</p><p> 數(shù)組測(cè)試結(jié)果如圖6-5</p><p><b> 圖6-5</b></p>
29、<p><b> 六、課程設(shè)計(jì)總結(jié)</b></p><p> 計(jì)算一元多項(xiàng)式加法,其結(jié)果取決于多項(xiàng)式的各項(xiàng)系數(shù)與指數(shù),因此程序核心是處理兩個(gè)多項(xiàng)式的系數(shù)與指數(shù)。定義結(jié)構(gòu)體將多項(xiàng)式的各項(xiàng)系數(shù)與指數(shù)存放,定義結(jié)構(gòu)體類型鏈表為程序的循環(huán)控制提供了可能,利用對(duì)鏈表的運(yùn)算來確定結(jié)果多項(xiàng)式的各項(xiàng)系數(shù)與次數(shù),同理算出相應(yīng)的冪數(shù)。鏈表是在計(jì)算機(jī)內(nèi)存中使用一組連續(xù)的存儲(chǔ)單元保存數(shù)據(jù)類型和名字
30、相同的變量。就鏈表這種數(shù)據(jù)類型而言,在排列上采用的方法也是按序排放,先存放第一行,接著存放第二行,……,直到所有數(shù)據(jù)元素被存放。多項(xiàng)式采用的是鏈表形式,以犧牲一定的空間提高程序的運(yùn)行速度和可行性。</p><p> 算法思想:采用鏈?zhǔn)浇Y(jié)構(gòu)存儲(chǔ)多項(xiàng)式,用鏈表結(jié)構(gòu)體的一個(gè)域標(biāo)記多項(xiàng)式的次數(shù),另一個(gè)域標(biāo)記多項(xiàng)式的系數(shù),程序中采用的是m表示最高次系數(shù),進(jìn)行加法運(yùn)算時(shí),標(biāo)記系數(shù)域相加即為相加的對(duì)應(yīng)系數(shù),標(biāo)記指數(shù)域相同則表
31、示為同類項(xiàng)。</p><p> 鏈表的特性是在中間任意位置添加刪除元素的都非常的快,不需要移動(dòng)其它的元素。鏈表顧名思義,要把各個(gè)元素鏈接起來才算撒。通常鏈表每一個(gè)元素都要保存一個(gè)指向下一個(gè)元素的指針(單鏈表)。</p><p> 本次課程設(shè)計(jì),我查找過資料,請(qǐng)教過同學(xué),以及不懈的努力,不僅培養(yǎng)了獨(dú)立思考、動(dòng)手操作的能力,在各種其它能力上也都有了提高。更重要的是,在程序設(shè)計(jì)中,我學(xué)會(huì)了很
32、多學(xué)習(xí)的方法,而這是日后最實(shí)用的,真的是受益匪淺。本學(xué)期的程序設(shè)計(jì)課程,我鍛煉了能力,學(xué)到很多東西,比如思考問題的角度也會(huì)從多方面著手;對(duì)自己的專業(yè)也有自己的想法……在和同學(xué)的交流過程中,互動(dòng)學(xué)習(xí),將知識(shí)融會(huì)貫通。通過這次課程設(shè)計(jì),我對(duì)很多的函數(shù)有了新的認(rèn)識(shí),也學(xué)會(huì)了運(yùn)用多種函數(shù),我也明白了寫軟件的基本過程和基本方法。在程序的設(shè)計(jì)過程中遇到拉很多的困難,在程序一次一次的調(diào)試失敗下曾經(jīng)想過要放棄,我最后還是讓自己堅(jiān)持啦下來,毫不畏懼困難,
33、在同學(xué)的幫助與講解下我總算是順利的完成了程序的課程設(shè)計(jì)。</p><p> 在這幾天的編寫過程中我對(duì)語言有了更進(jìn)一步的認(rèn)識(shí)和了解,也感受到了編程給我?guī)淼目鞓放c充實(shí),明白了想成為一個(gè)合格的甚至是優(yōu)秀的程序員,我還需要更多更難的鍛煉。所以我還要不斷地學(xué)習(xí)不斷地說活,不斷地成長(zhǎng),為我的理想而奮斗。</p><p><b> 七、參考文獻(xiàn)</b></p>
34、<p> 1) 嚴(yán)蔚敏 吳偉民 《數(shù)據(jù)結(jié)構(gòu)(C語言版)》 清華大學(xué)出版社.2006.</p><p> 2) 恰汗 合孜爾 《C語言程序設(shè)計(jì) 》中國(guó)鐵道出版社2009.</p><p> 3) 楊永斌 《數(shù)據(jù)結(jié)構(gòu)(理論與實(shí)踐).》 天津科學(xué)技術(shù)出版社</p><p><b> 4) 百度資料</b></p>&l
35、t;p><b> 八、附錄</b></p><p> #include<stdlib.h></p><p> #include<stdio.h> </p><p> #include<ctype.h> </p><p> #include<iostream>
36、</p><p> #include<math.h></p><p> #define null 0</p><p> #define W 10</p><p> using namespace std;</p><p> typedef struct term </p><p
37、> { //項(xiàng)的表示,多項(xiàng)式的項(xiàng)作為L(zhǎng)inkList的數(shù)據(jù)元素 </p><p> float coef; //系數(shù) </p><p> int expn; //指數(shù) </p><p> struct term *next; </p><p><b> }term; </b></p>&
38、lt;p> int Empty(term *L)</p><p><b> {</b></p><p> if(L->next!=null)</p><p><b> return 1;</b></p><p><b> return 0;</b><
39、/p><p><b> }</b></p><p> void Delete(term * L,term * p)</p><p> { term * s,*q;</p><p><b> s=L;</b></p><p> q=L->next;</p>
40、;<p> while(p!=q)</p><p><b> {s=q;</b></p><p> q=q->next;}</p><p> s->next=q->next;</p><p><b> free(q);</b></p><
41、p> } </p><p> term* CreatPolyn(term *P,int m) </p><p> { // 輸入m項(xiàng)的系數(shù)和指數(shù),建立表示一元多項(xiàng)式的有序鏈表P </p><p> if(m <= 0) return NULL; </p><p
42、> term *h = P = (term*)malloc(sizeof(term)), *q; </p><p> P->coef = 0.0; </p><p><b> int i; </b></p><p> printf("依次輸入%d個(gè)數(shù)(前一個(gè)為系數(shù),后一個(gè)為指數(shù))\n",m*2); <
43、;/p><p> for (i = 1; i <= m; ++i)</p><p> { // 依次輸入m個(gè)非零項(xiàng) </p><p> scanf("%f%d",&P->coef,&P->expn); </p><p> if(P->coef) </p><p
44、> q = P; //若該系數(shù)值不為0,則p數(shù)值插入鏈表q</p><p> P = P->next = (term*)malloc(sizeof(term)); </p><p><b> } </b></p><p> q->next = NULL; </p><p><b>
45、free(P); </b></p><p> return h; </p><p> } // CreatPolyn </p><p> term* selsort(term *h) </p><p> { //將有序鏈表進(jìn)行指數(shù)排列</p><p> term *g, *p, *q; </
46、p><p> if(!h) return NULL; </p><p><b> float f; </b></p><p> int i, fini = 1; </p><p> for(g = h;g->next&&fini;g = g->next) //確定排序需要掃描的次數(shù) &
47、lt;/p><p> { fini = 0; </p><p> for(p = h,q = h->next;q;p = p->next,q = q->next) </p><p> //相鄰的指數(shù)進(jìn)行比較,一次循環(huán)將最小指數(shù)排到最后,若兩兩比較沒交換,則...</p><p> if (p->e
48、xpn < q->expn) //將鏈表中的元素按指數(shù)從高到低排列</p><p> { f = p->coef;i = p->expn; </p><p> p->coef = q->coef;p->expn = q->expn; </p><p> q->coef = f;q->expn
49、 = i; </p><p> fini = 1; </p><p><b> } </b></p><p><b> } </b></p><p> for(g = h,p = g->next;p;) //比較將指數(shù)相同的數(shù)進(jìn)行合并</p><p> if(
50、g->expn==p->expn) </p><p> {g->coef += p->coef; </p><p> g->next = p->next; //合并后跳過一個(gè)元素,并刪除該結(jié)點(diǎn)</p><p><b> q = p; </b></p><p> p = p-
51、>next; </p><p><b> free(q); </b></p><p><b> } </b></p><p><b> else </b></p><p> if(g->next) </p><p> { g =
52、 g->next; </p><p> p = p->next; </p><p><b> } </b></p><p> return h; </p><p><b> } </b></p><p> void PrintfPoly(term *P
53、) </p><p> { //輸出按指數(shù)從大到小排列后的一元多次式</p><p> term *q = P; </p><p><b> if(!q) </b></p><p><b> { </b></p><p> putchar('0');
54、 </p><p><b> return; </b></p><p><b> } </b></p><p> if(q->coef!=1) </p><p> { printf("%g",q->coef); </p><p>
55、//%g用來輸出實(shí)數(shù),它根據(jù)數(shù)值的大小,自動(dòng)選f格式或e格式,且不輸出無意義的0</p><p> if(q->expn==1) putchar('X'); //若指數(shù)值大小為1,則指數(shù)省略</p><p> else if(q->expn) printf("X^%d",q->expn); </p><p&
56、gt;<b> } </b></p><p> else if(!q->expn) putchar('1'); </p><p> else if(q->expn==1) putchar('X'); </p><p> else printf("X^%d",q->ex
57、pn); </p><p> q = q->next; </p><p> while (q) </p><p><b> { </b></p><p> if(q->coef > =0) putchar('+'); </p><p> if(q->
58、;coef!=1) </p><p><b> { </b></p><p> printf("%g",q->coef); </p><p> if(q->expn==1) putchar('X'); </p><p> else if(q->expn) pr
59、intf("X^%d",q->expn); </p><p><b> } </b></p><p> else if(!q->expn) putchar('1'); </p><p> else if(q->expn==1) putchar('X'); </p&
60、gt;<p> else printf("X^%d",q->expn); </p><p> q = q->next; </p><p><b> } </b></p><p><b> } </b></p><p> int Compare(
61、term *a, term *b) </p><p><b> { </b></p><p> if (a->expn < b->expn) return -1; </p><p> if (a->expn > b->expn) return 1; </p><p> retu
62、rn 0; </p><p><b> } </b></p><p> float C(term *c,float x) //計(jì)算輸入變量的多項(xiàng)式的值</p><p> { float sum=0,a;</p><p><b> int b;</b></p><p&
63、gt; term *q=c;</p><p> for(;q ;q=q->next)</p><p> { a=q->coef ;b=q->expn ;</p><p> sum+=a*pow(x,b);</p><p><b> }</b></p><p> re
64、turn sum;</p><p><b> }</b></p><p> term* APolyn(term *Pa, term *Pb) </p><p> { // 多項(xiàng)式加法:Pa = Pa+Pb,利用兩個(gè)多項(xiàng)式的結(jié)點(diǎn)構(gòu)成"和多項(xiàng)式"。 </p><p> term *h,
65、*qa = Pa, *qb = Pb, *p, *q; </p><p> float sum; </p><p> h = p = (term*)malloc(sizeof(term)); </p><p> p->next = NULL; </p><p> while (qa && qb) </p&g
66、t;<p> { // Pa和Pb均非空 </p><p> switch (Compare(qa,qb)) </p><p><b> { </b></p><p> case -1: // 多項(xiàng)式PA中當(dāng)前結(jié)點(diǎn)的指數(shù)值小 </p><p> p->next = qb; </p&
67、gt;<p><b> p = qb; </b></p><p> qb = qb->next; </p><p><b> break; </b></p><p> case 0: // 兩者的指數(shù)值相等 </p><p> sum = qa->coef + q
68、b->coef; </p><p> if (sum != 0.0)</p><p> { // 修改多項(xiàng)式PA中當(dāng)前結(jié)點(diǎn)的系數(shù)值 </p><p> p->next = qa; </p><p> qa->coef = sum; </p><p><b> p = qa; &l
69、t;/b></p><p> qa = qa->next; </p><p><b> } </b></p><p><b> else </b></p><p> { // 刪除多項(xiàng)式PA中當(dāng)前結(jié)點(diǎn) </p><p><b> q = qa
70、; </b></p><p> qa = qa->next; </p><p><b> free(q); </b></p><p><b> } </b></p><p><b> q = qb; </b></p><p>
71、 qb = qb->next; </p><p><b> free(q); </b></p><p><b> break; </b></p><p> case 1: // 多項(xiàng)式PB中當(dāng)前結(jié)點(diǎn)的指數(shù)值小 </p><p> p->next = qa; </p>
72、<p><b> p = qa; </b></p><p> qa = qa->next; </p><p><b> break; </b></p><p> } // 結(jié)束switch </p><p> } // 結(jié)束while </p><p&
73、gt; if (Pa) p->next = qa; // 鏈接Pa中剩余結(jié)點(diǎn) </p><p> if (Pb) p->next = qb; // 鏈接Pb中剩余結(jié)點(diǎn) </p><p><b> q = h; </b></p><p> h = h->next; </p><p><b&g
74、t; free(q); </b></p><p> return h; </p><p> } // APolyn </p><p> term* A(term *Pa, term *Pb) </p><p> { int n; </p><p> printf("請(qǐng)輸入第二個(gè)
75、一元多項(xiàng)式的項(xiàng)數(shù): "); </p><p> scanf("%d",&n); </p><p> Pb = CreatPolyn(Pb,n); </p><p> Pb = selsort(Pb); </p><p> cout<<"兩個(gè)多項(xiàng)式相加結(jié)果為:";&
76、lt;/p><p> PrintfPoly(Pa); </p><p> if(Pb && Pb->coef>0) printf(" + "); </p><p> PrintfPoly(Pb); </p><p> Pa = APolyn(Pa,Pb); </p><p
77、> printf(" = "); </p><p> Pa = selsort(Pa); </p><p> PrintfPoly(Pa); </p><p> return Pa; </p><p><b> }</b></p><p> term* BPo
78、lyn(term *Pa, term *Pb)</p><p> { // 多項(xiàng)式減法:Pa = Pa-Pb,利用兩個(gè)多項(xiàng)式的結(jié)點(diǎn)構(gòu)成"差多項(xiàng)式"。 </p><p> term *p = Pb; </p><p><b> while(p) </b></p><p> { p-&g
79、t;coef *= -1; </p><p> p = p->next; </p><p><b> } </b></p><p> return APolyn(Pa,Pb); </p><p> } // BPolyn </p><p> term* B(term *Pa, te
80、rm *Pb) </p><p> { int n; </p><p> printf("請(qǐng)輸入第二個(gè)一元多項(xiàng)式的項(xiàng)數(shù): ");</p><p> scanf("%d",&n); </p><p> Pb = CreatPolyn(Pb,n); </p>&
81、lt;p> Pb = selsort(Pb);</p><p> cout<<"兩個(gè)多項(xiàng)式相減結(jié)果為:";</p><p> PrintfPoly(Pa); </p><p> printf(" - "); </p><p> putchar('(');Pri
82、ntfPoly(Pb);putchar(')'); </p><p> Pa = BPolyn(Pa,Pb); </p><p> printf(" = "); </p><p> Pa = selsort(Pa); </p><p> PrintfPoly(Pa); </p><
83、;p> return Pa; </p><p><b> } </b></p><p> void main() </p><p> { term *M,*N; </p><p><b> term *q;</b></p><p> int i,j,n
84、; </p><p> float x,y;</p><p> term *G[W];</p><p><b> int k;</b></p><p> f: puts("\t================ 一元多項(xiàng)式計(jì)算系統(tǒng):==================="); </p>
85、;<p> printf("\n\t\t\t1:按照指數(shù)降序排列輸出多項(xiàng)式\n\t\t\t2:一元多項(xiàng)式的加法運(yùn)算");</p><p> printf("\n\t\t\t3:一元多項(xiàng)式的減法運(yùn)算\n\t\t\t4:輸入的多項(xiàng)式及變量的值計(jì)算結(jié)果");</p><p> puts("\n\t\t\t5:對(duì)多個(gè)輸入的表達(dá)式
86、按照指數(shù)從大到小排序輸出\n\t\t\t0:退出系統(tǒng)");</p><p> puts("\t========================================================");</p><p> printf("\n請(qǐng)選擇您要進(jìn)行的操作:");</p><p><b>
87、; cin>>i;</b></p><p> switch(i) </p><p><b> { </b></p><p><b> case 1:</b></p><p> printf("\n\t\t\t按照指數(shù)降序排列輸出多項(xiàng)式:\n請(qǐng)輸入該一元多項(xiàng)
88、式的項(xiàng)數(shù): "); </p><p> scanf("%d",&n); </p><p> M = CreatPolyn(M,n); </p><p> M = selsort(M); </p><p> cout<<"您輸入的多項(xiàng)式按指數(shù)降序排列為: ";<
89、;/p><p> PrintfPoly(M);</p><p> cout<<endl<<endl;</p><p><b> goto f;</b></p><p><b> case 2:</b></p><p> printf("
90、\n\t\t\t一元多項(xiàng)式加法計(jì)算:\n請(qǐng)輸入第一個(gè)一元多項(xiàng)式的項(xiàng)數(shù): "); </p><p> scanf("%d",&n); </p><p> M = CreatPolyn(M,n); </p><p> M = selsort(M); </p><p> M = A(M,N);<
91、/p><p> cout<<endl<<endl;</p><p><b> goto f; </b></p><p><b> case 3:</b></p><p> printf("\n\t\t\t一元多項(xiàng)式減法計(jì)算:\n請(qǐng)輸入第一個(gè)一元多項(xiàng)式的項(xiàng)數(shù):
92、"); </p><p> scanf("%d",&n); </p><p> M = CreatPolyn(M,n); </p><p> M = selsort(M);</p><p> M = B(M,N);</p><p> cout<<endl<
93、;<endl;</p><p><b> goto f;</b></p><p><b> case 4:</b></p><p> printf("\n\t\t\t根據(jù)輸入的多項(xiàng)式及變量的值進(jìn)行計(jì)算:\n請(qǐng)輸入您將要計(jì)算的一元多項(xiàng)式的項(xiàng)數(shù): "); </p><p&g
94、t; scanf("%d",&n); </p><p> M = CreatPolyn(M,n);</p><p> M = selsort(M);</p><p> cout<<"您輸入的一元多項(xiàng)式按指數(shù)降序排列為: ";</p><p> PrintfPoly(M);
95、</p><p> cout<<"\n請(qǐng)輸入變量x的值: ";</p><p> scanf("%f",&x);</p><p><b> y=C(M,x);</b></p><p> printf("多項(xiàng)式的值為: %f\n",y
96、);</p><p> cout<<endl<<endl;</p><p><b> goto f;</b></p><p><b> case 5:</b></p><p> printf("\n\t\t\t對(duì)多個(gè)輸入的表達(dá)式按照指數(shù)大小排序輸出:\n請(qǐng)輸
97、入需要排序的一元多項(xiàng)式的個(gè)數(shù): "); </p><p> scanf("%d",&k);</p><p> for(i=0;i<k;i++)</p><p> { printf("請(qǐng)輸入第%d個(gè)一元多項(xiàng)式的項(xiàng)數(shù): ",i+1);</p><p> scanf(&q
98、uot;%d",&n); </p><p> M = CreatPolyn(M,n); </p><p> M = selsort(M);</p><p> G[i]=M; //用數(shù)組記住每一個(gè)多項(xiàng)式</p><p><b> }</b></p><p> fo
99、r(j=0;j<k;j++)</p><p> for(i=1;i<k;i++)</p><p> if(G[i-1]->expn<G[i]->expn)</p><p> { q=G[i];G[i]=G[i-1];G[i-1]=q;} </p><p> printf("輸入的表達(dá)式按照指數(shù)
100、從大到小排序輸出結(jié)果為:\n");</p><p> for(i=0;i<k;i++)</p><p> { printf("\t%d: ",i+1);</p><p> PrintfPoly(G[i]);</p><p> cout<<endl;</p><p&
101、gt;<b> } </b></p><p> cout<<endl<<endl;</p><p><b> goto f;</b></p><p><b> case 0: </b></p><p><b> break; &l
102、t;/b></p><p> printf("=================謝謝您使用該系統(tǒng)!==================\n");</p><p> default: puts("您輸入的數(shù)據(jù)有誤,請(qǐng)重新輸入!");</p><p><b> goto f;</b></p
溫馨提示
- 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. 眾賞文庫(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)式
- 一元多項(xiàng)式計(jì)算(數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì))
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)---一元多項(xiàng)式計(jì)算
- 一元多項(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)一元多項(xiàng)式加法器課程設(shè)計(jì)
- 數(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ì)算器
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)--一元多項(xiàng)式計(jì)算問題(c語言)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告一元多項(xiàng)式的計(jì)算[1]
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)---一元稀疏多項(xiàng)式計(jì)算器
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)-一元稀疏多項(xiàng)式簡(jiǎn)單計(jì)數(shù)器
評(píng)論
0/150
提交評(píng)論