C語言課程設計任務書_第1頁
C語言課程設計任務書_第2頁
C語言課程設計任務書_第3頁
C語言課程設計任務書_第4頁
C語言課程設計任務書_第5頁
已閱讀5頁,還剩15頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

1、信息科學與工程學院綜合設計報告書課程名稱:C語言課程設計班 級:學 號:姓 名:指導教師:.2-3目 錄(一) 需求分析1 設計題目;2用戶操作流程;3 數(shù)據(jù)處理流程;(二) 概要設計 4-51. 系統(tǒng)總體設計框架;2 系統(tǒng)功能模塊圖;(三) 詳細設計5-111. 主要功能模塊的算法設計思路;2. 工作流程圖;(四) 主要源程序代碼 12-211.完整源程序清單及關鍵注釋;(五) 調(diào)試分析過程描述 21-241 測試數(shù)據(jù)、測試輸出結果;2 對程序調(diào)試過程中存在問題的思考;六)課程設計小結 24-251 包括課程設計過程中的學習體會與收獲;2. 對C語言和本課程設計的認識以及自己的建議等內(nèi)容。一

2、、 需求分析1、設計題目:編程實現(xiàn)以下功能:(1) 分別輸入一元多項式pn (x)和Q n (x)。從鍵盤輸入一元多項式中各項的系數(shù)和指數(shù),并用單鏈表 加以表示。(2) 分別對一元多項式pn (x)和 Q n (x)進行升幕排序。( 3) 將一元多項式中各子項按照指數(shù)從小到大的順序排序。(4) 分別輸出一元多項式pn (x)和Q n (x)。(5) 將用單鏈表表示的一元多項式輸出,即打印多項式的系數(shù) 和指數(shù)。(6) 任意輸入一個實數(shù)xO,分別求出一元多項式pn (x0)和Q n(x0)的值。(7) 已知有兩個一元多項式分別為 Pn (x)和Qn (x),求出兩個多 項式的和(8) R n (x

3、)和差T n (x),分別用單鏈表表示 R n (x)和T n (x),并將二者輸出,(R n (x)=P n (x)+Q n (x), T n (x)=P n (x)-Q n (x)2、用戶操作流程 :(1) 進入歡迎及界面。(2) 根據(jù)提示選擇需要的功能。(3) 根據(jù)提示輸入數(shù)據(jù) .(4) 選擇函數(shù)輸出運行結果。(5) 退出本系統(tǒng)。3、數(shù)據(jù)處理流程(1) 輸入數(shù)據(jù),通過鏈表存儲 P(x) 和 Q(x) 的指數(shù)和系數(shù)。(2) 通過冒泡排序法對 P(x) 和 Q(x) 進行升冪排序。(3)輸入xO,通過指針將其帶入P(x)和Q(x)的表達式求出具 體的數(shù)值。( 4) 通過鏈表對兩個多項式求和求

4、差。(5) 通過鏈表輸出運行結果。概要設計1、系統(tǒng)總體設計框架:功能選擇函數(shù)輸入數(shù)據(jù)函數(shù)主程序升幕函數(shù)賦值函數(shù)求差求和函數(shù)輸出結果函數(shù)2、系統(tǒng)功能模塊(1)功能選擇函數(shù):通過輸入對應功能的數(shù)字,進行多項 式的運算。該函數(shù)在主函數(shù)中調(diào)用。(2)輸入數(shù)據(jù)函數(shù):通過建立單鏈表,輸入兩個多項式的 各項指數(shù)和系數(shù)。(3)升幕函數(shù):通過冒泡排序法對兩個多項式進行升幕排 序。(4)求和求差函數(shù):定義空鏈用來存儲結果,將兩個多項 式相加減。(5)輸出函數(shù):輸出上一步的運行結果。三、詳細設計 一元多項式的表示在計算機內(nèi)可以用鏈表來表示, 為了節(jié)省存儲 空間,只存儲多項式中系數(shù)非零的項。 鏈表中的每一個結點存放多

5、項 式的一個系數(shù)非零項,它包含三個域,分別存放該項的系數(shù)、指數(shù)以 及指向下一個多項式項結點的指針。 創(chuàng)建一元多項式鏈表, 對一元多 項式的運算中會出現(xiàn)的各種可能情況進行分析, 實現(xiàn)一元多項式的相 加、相減操作。多項式相加的運算規(guī)則是: 兩個多項式中所有指數(shù)相同的項的對 應系數(shù)相加,若和部位零,則構成“和多項式”中的一項;所有指數(shù) 不相同的的項均 “復抄”到“和多項式” 中。以單鏈表作為存儲結構, 并且“和多項式”中的節(jié)點無需另外生成,則可看做是將多項式 Q 加到多項式 P 中,由此得到下列運算規(guī)則:若p-expvq-exp,則結點p所指的結點應是“和多項式”中的一 項,令指針 p 后移。若p-

6、expvq-exp,則結點q所指的結點應是“和多項式”中的 一項,將結點 q 插入在結點 p 之前,且令指針 q 在原來的鏈表上后移。若p-exp=q-exp,貝卩將兩個結點的系數(shù)相加,當和不為零是修 改結點 p 的系數(shù),釋放 q 結點;若和為零,則“和多項式”中無 o此項,從P中p結點,同時釋放p和q結點多項式相減運算規(guī)則同加法。設計思路:實現(xiàn)的方法是先定義多項式結點的結構, 該多項式每個結點由三 個元素:輸入的系數(shù)、輸入的指數(shù)、以及指向下一個結點的指針構成。 該鏈表采用鏈式存儲結構。 然后通過多次的輸入, 依次得到兩個一元 多項式的各個項的系數(shù)與指數(shù)。 該輸入以零結尾。 然后通過對結點的

7、判斷是否為零后,進行運算或者終止的操作。再初始化一個鏈表LC,將LC的各項系數(shù)和指數(shù)的指針指向LA+LB所得的結果的值,完成了 最后的輸出。( 1)定義結構體 struct結構體為表示一個對象的不同屬性提供了連貫一致的方法, 結構 體類型的說明從關鍵詞 struct 開始,成員可以由各種數(shù)據(jù)類型混合 構成,成員甚至還可以是數(shù)組或者其他類型的結構,但是,結構體中 不能包含自身定義類型的成員。使用 typedef 和 struct 定義的新類 型名稱,其用途與內(nèi)建類型的名稱相同,可以用來:聲明和初始化結 構體變量;創(chuàng)建并根據(jù)自己的意愿初始化結構數(shù)組;(2) 單鏈表的建立 單鏈表有兩個域, data

8、 域和 next 域,一個是存放數(shù)據(jù),一個是存放 指針而且指向它的后繼。并且還有個head,稱表結點,它一般不存放數(shù)據(jù),只是做個特殊標記。表的結束是NULL也就是最后的那個鏈域 next 為空單鏈表的插入運算有兩種,一種是頭插法,另一種是尾插法,這里運用的是尾插法(3)一元多項式的建立 輸入多項式采用插頭的方式, 輸入多項式中一個項的系數(shù)和指數(shù), 就 產(chǎn)生一個新的節(jié)點,建立起它的右指針,并用頭節(jié)點指向它;為了判 斷一個多項式是否結束,定義一個結束標志,并輸入非 0 時就繼續(xù), 當輸入 0 時,就結束一個多項式的輸入(4)顯示一元多項式如果系數(shù)是大于 0 的話就輸出 +系數(shù) x 指數(shù)形式;如果系

9、數(shù)小于 0 的 話輸出系數(shù) x 指數(shù)形式;如果指數(shù)為 0 的話,直接輸出系數(shù);如果系 數(shù)是的話就直接輸出+X;如果系數(shù)是-1的話直接輸出-X輸出多項式 ( 5)一元多項式的加法計算它從兩個多項式的頭部開始, 兩個多項式的某一項都不為空時, 如果 數(shù)相等的話,系數(shù)就應該相加;相加的和不為 0 的話,用頭插法建立 一個新的節(jié)點。 p 的指數(shù)小于 q 的指數(shù)的話,就應該復制 q 節(jié)點到多 項式中。p的指數(shù)大于q的指數(shù)的話,就應該復制p節(jié)點到多形式中。 當?shù)诙€多項式為空時, 第一個多項式不為空時, 將第一個多項式用 心節(jié)點產(chǎn)生。當?shù)谝粋€多項式為空,第二個多項式不為空時,將第二 個多項式用新節(jié)點產(chǎn)生(

10、6)一元多項式的減法計算 它從兩個多項式的頭部開始, 兩個多項式的某一項都不為空時, 如果 數(shù)相等的話,系數(shù)就應該相減;相加的和不為 0 的話,用頭插法建立 一個新的節(jié)點。 p 的指數(shù)小于 q 的指數(shù)的話,就應該復制 q 節(jié)點到多 項式中。p的指數(shù)大于q的指數(shù)的話,就應該復制p節(jié)點到多形式中。 并且建立的節(jié)點的系數(shù)為原來的相反數(shù); 當?shù)诙€多項式為空時, 第 一個多項式不為空時, 將第一個多項式用心節(jié)點產(chǎn)生。 當?shù)谝粋€多項 式為空,第二個多項式不為空時,將第二個多項式用新節(jié)點產(chǎn)生,并 且建立的節(jié)點系數(shù)為原來的相反數(shù)。數(shù)學模型:在數(shù)學上,一個一元多項式 Pn(x) 可按升冪寫成 :R(X)= P

11、 0+PiX+P2X2+pnXn它由n+1個系數(shù)唯一確定,因此,在計算機中它可用一個線性表 P來 表示:P= ( Po ,Pl,P2, ,P n)每一項的指數(shù) i 隱含在其系數(shù) Pi 的序號里,每一項的值順序為各個 多項式的系數(shù)值。加法模型:假設Qm(X)是一元m次多項式,同樣可用線性表 Q來表示:Q=(q,qi,q2,qm)不失一般性,設mvn,則兩個多項式相加的結果Rn(x)=P(x)+Q(x)也可 用線性表R來表示,為了更具一般性,設nm ,相加的結果也可以用單 鏈表來表示,規(guī)則是相同指數(shù)的項的系數(shù)相加,所以 P(x)+Q(x)=(po+q0,pi+qiPm+qm, pm+1Pn),例如

12、:P(x)=2x 4+5x2+3x+1,Q(x)=3x 2+1,相加后 R(x)= 2x 4+8x2+3x+2,用一維 向量表表示分別為( 1, 3, 5, 0, 2) +(1, 0,3 ,) =(2,3,8,0 , 2),寫成數(shù)學形式即為2x4+8x2+3x+2,結論正確。減法模型同加法模型具體函數(shù)模塊的流程圖:功能選擇模塊:輸入數(shù)據(jù)函數(shù):四、主要源程序代碼#include #include #include typedef struct duoxiangshiint coef;int exp; struct duoxiangshi *next;DXS;int getNum()int num

13、;printf( 輸入選擇功能對應的數(shù)字 : ); scanf(%d, &num);return num;void fun1( DXS *PHEAD, DXS *QHEAD )int zs, xs;/ 定義指數(shù)系數(shù)printf( 請輸入 P(x) 中各項的系數(shù)和指數(shù) n); scanf(%d %d, &xs, &zs);while( zs != 0 | xs != 0 )DXS *p = (DXS*) malloc(sizeof(DXS); p-coef = xs;p-exp = zs; PHEAD-next = p; p-next = NULL;PHEAD = PHEAD-next; sca

14、nf(%d %d, &xs, &zs);printf( 請輸入 Q(x) 中各項的系數(shù)和指數(shù) n); scanf(%d %d, &xs, &zs);while( zs != 0 |xs != 0 )DXS *p = (DXS*) malloc(sizeof(DXS); p-coef = xs;p-exp = zs; QHEAD-next = p; p-next = NULL;QHEAD = p; scanf(%d %d, &xs, &zs);printf( 輸入 5 顯示結果 n);void fun2( DXS *PHEAD, DXS *QHEAD )/ 升冪排序 DXS *p, *q;/鏈表

15、的冒泡排序p = PHEAD-next;for( p; p != NULL; p = p-next )for( q = p-next; q != NULL; q = q-next )if( p-exp q-exp )int temp;temp = p-coef; p-coef = q-coef; q-coef = temp; temp = p-exp; p-exp = q-exp; q-exp = temp;p = QHEAD-next;for( p; p != NULL; p = p-next )for( q = p-next; q != NULL; q = q-next )if( p-ex

16、p q-exp )int temp;temp = p-coef; p-coef = q-coef; q-coef = temp; temp = p-exp; p-exp = q-exp; q-exp = temp;printf( 輸入 5 顯示結果。 n);void fun5( DXS *PHEAD, DXS *QHEAD )printf( 當前保存的 P(x),Q(x) 序列如下 :n); printf(P(x)=);while( PHEAD-next != NULL )PHEAD = PHEAD-next;prin tf(%d*xA%d, PHEAD-coef, PHEAD-exp); i

17、f( PHEAD-next != NULL )printf( + );printf(n);printf(Q(x)=);while( QHEAD-next != NULL )QHEAD = QHEAD-next;prin tf(%d*xA%d, QHEAD-coef, QHEAD-exp); if( QHEAD-next != NULL )printf( + );printf(nn);void fun4( DXS *PHEAD, DXS *QHEAD )int x0;double sum;printf(輸入 x 的值: );scanf(%d, &x0);sum = 0;while( PHEAD-

18、next != NULL )PHEAD = PHEAD-next;sum += PHEAD-coef * pow( x0, PHEAD-exp );printf(P(x) = %.0lfn, sum);sum = 0;while( QHEAD-next != NULL )QHEAD = QHEAD-next;sum += QHEAD-coef * pow( x0, QHEAD-exp ); printf(Q(x0) = %.0lfnn, sum);void fun3( DXS *PHEAD, DXS *QHEAD )/ 求兩個多項式的和差 fun2( PHEAD, QHEAD );/ 先進行升

19、冪排序DXS *RHEAD, *THEAD;RHEAD = (DXS*) malloc(sizeof(DXS);THEAD = (DXS*) malloc(sizeof(DXS); RHEAD-next = NULL;THEAD-next = NULL;DXS *p = PHEAD, *q = QHEAD;/ 多項式相加DXS *r = RHEAD;p = p-next;q = q-next;while( p != NULL & q != NULL )/當兩個序列都有數(shù)值時DXS *t = (DXS*) malloc(sizeof(DXS);if ( p-exp = q-exp )/t-coe

20、f = p-coef + q-coef; t-exp = p-exp;p = p-next;q = q-next;else if( p-exp exp )/Pt-coef = p-coef;t-exp = p-exp;p = p-next;else if( p-exp q-exp )/Pt-coef = q-coef;指數(shù)相同的情況的指數(shù)小于Q的指數(shù)的指數(shù)大于Q的指數(shù)t-exp = q-exp; q = q-next;r-next = t;r = r-next; r-next = NULL;while ( p != NULL )/ 當只有一個序列有數(shù)值時 DXS *t = (DXS*) mal

21、loc(sizeof(DXS); t-coef = p-coef;t-exp = p-exp; r-next = t;r = r-next;r-next = NULL;p = p-next; while ( q != NULL )DXS *t = (DXS*) malloc(sizeof(DXS); t-coef = q-coef;t-exp = q-exp; r-next = t;r = r-next;r-next = NULL;q = q-next;r = RHEAD; printf(R(x) = ); while( r-next != NULL )r = r-next;if (r-coe

22、f=0)if(r!=RHEAD-next)printf( + );prin tf(%d*xA%d,r-coef,r-exp);elseprintf( - %d*xA%d,-1*r-coef,r-exp);printf(nn);/ 多項式相減 p = PHEAD;q = QHEAD; DXS *T = THEAD;p = p-next;q = q-next;while( p != NULL & q != NULL )DXS *t = (DXS*) malloc(sizeof(DXS);if ( p-exp = q-exp )t-coef = p-coef - q-coef; t-exp = p-

23、exp;p = p-next;q = q-next;else if( p-exp exp )t-coef = p-coef; t-exp = p-exp; p = p-next;else if( p-exp q-exp )t-coef = -1 * q-coef; t-exp = q-exp;q = q-next;T-next = t;T = T-next;T-next = NULL;while ( p != NULL )DXS *t = (DXS*) malloc(sizeof(DXS); t-coef = p-coef;t-exp = p-exp;T-next = t;T = T-next

24、;T-next = NULL;p = p-next;while ( q != NULL )DXS *t = (DXS*) malloc(sizeof(DXS); t-coef = -1 * q-coef;t-exp = q-exp;T-next = t;T = T-next;T-next = NULL;q = q-next;T = THEAD;/ 消除系數(shù)為 0 項 while ( T-next != NULL )if( T-next-coef = 0 )T-next = T-next-next;T = T-next;if( T = NULL )break;T = THEAD;printf(T

25、(x) = );while( T-next != NULL )T = T-next;if( T-coef =0 )if(T!=THEAD-next) printf( + );prin tf(%d*xA%d,T-coef,T-exp);elseprin tf( - %d*xA%d, -1 * T-coef, T-exp);if (THEAD-next=NULL)printf(0n);printf(n);void menu() printf(n);printf(1.分別輸入 Pn(x)和 Qn(x)。n);printf(2.分別對Pn(x)和Qn(x)進行升幕排序。n);printf(3.分別求出

26、 Pn(x) 和 Qn(x) 的和差。 n);Pn(x) 和 Qn(x) 的值。 n);printf(4.任意輸入一個實數(shù) x, 分別求出一元多項式n);printf(5.分別輸出上一步運行結果的 Pn(x) 和 Qn(x)printf(n);printf(If you want to exit the system,please input 0.n); int main()printf(Welcome to the menun); menu();int num;num = getNum();if ( num = 0 )printf(nExit the system,goodbyen);DXS

27、 *PHEAD, *QHEAD;PHEAD = (DXS *)malloc(sizeof(DXS);QHEAD = (DXS *)malloc(sizeof(DXS);PHEAD-next = NULL;QHEAD-next = NULL;while ( num )switch ( num )case 1:fun1( PHEAD, QHEAD ); break;case 2:fun2( PHEAD, QHEAD ); break;case 3:fun3( PHEAD, QHEAD ); break;case 4:fun4( PHEAD, QHEAD ); break;case 5:fun5(

28、PHEAD, QHEAD ); break;default:printf( 輸入錯誤 , 請重新輸入 nn);num = getNum();if ( num = 0 )printf(nExit the system,goodbye!n);return 0;五、調(diào)試分析過程描述 測試數(shù)據(jù)及實驗過程: 1、歡迎界面以及選擇功能 1 和功能 5 得到的結果: 2、調(diào)用功能 2 對應的函數(shù)并輸出結果2、調(diào)用功能 2 對應的函數(shù) :3、調(diào)用功能 3 對應的函數(shù):4、調(diào)用功能 4 對應的函數(shù):5、退出本系統(tǒng):調(diào)試:當輸入的兩個多項式相同時,相減結果應為0,但T (X)顯示的是0*x4。此時應當修改功能函數(shù),當指數(shù)相同系數(shù)也相同的項相減 時,釋放 p,q 指針所指向的結點,輸出 0。修正常改程序后,正常輸 出。在此之前也遇到了一些問題,同樣是減法函數(shù),如果 P,Q 中相同 指數(shù)對應的項相減時負數(shù), 剛開始輸出的是“+ -x”, 即加上負的差值, 通過修改代碼,在原先函數(shù)功能的基礎上增加判斷條件:If(T-coef=o)if(T!=THEAD-next)printf( “ + ” );printf( “ d*xA%d,T-coef,T-exp);elseprintf( “ - %d*xA%d ” ,-1*T-coef,T-e

溫馨提示

  • 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論