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

下載本文檔

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

文檔簡介

1、信息科學與工程學院綜合設計報告書課程名稱: C語言課程設計 班 級: 學 號: 姓 名: 指導教師: 目 錄(一) 需求分析.2-31 設計題目; 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)進行升冪排序。將一元多項式中各子項按照指數(shù)從小到大的順序排序。(3) 分別輸出一元多項式pn (x)和Q n (x)。 將用單鏈表表示的一元多項式輸出,即打印多項式的系數(shù)和指數(shù)。(4) 任意輸入一個實數(shù)x0,分別求出一元多項式pn (x0)和Q n (x0)的值。(5) 已知有兩個一元多項式分別為Pn (x)和Qn (x),求出兩個多項式的和R n (x)和差T n (x),分別

3、用單鏈表表示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) 輸入x0,通過指針將其帶入P(x)和Q(x)的表達式求出具體的數(shù)值。(4) 通過鏈表對兩個多項式求和求差。(5) 通過鏈表輸出運行結果。;二、 概要

4、設計1、 系統(tǒng)總體設計框架:主程序功能選擇函數(shù)函數(shù)求差求和函數(shù)輸入數(shù)據(jù)函數(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ù)非零的項。鏈表中的每一個結點存放多項式的一個系數(shù)非零項,它包含三個

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

6、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域和next域,一個是存放數(shù)據(jù),一個是存放指針而且指向它的后繼。并且還有個head,

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

9、輸出多項式 (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)生(6)一元多項式的減法計算它從兩個多項式的頭部開始,兩個多項式的某一項都不為空時,如果數(shù)相等的話,系數(shù)就應該相減;相加的和不為0的話,用頭插法建立一個新的節(jié)點。p的指數(shù)小于q的指數(shù)

10、的話,就應該復制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)可按升冪寫成 :Pn(x)=p0+p1x+p2x2+pnxn它由n+1個系數(shù)唯一確定,因此,在計算機中它可用一個線性表P來表示:P=(p0 ,p1,p2,pn)每一項的指數(shù)i隱含在其系數(shù)Pi的序號里,每一項的值順序為各個多項式的系數(shù)值。加法模型:假設 Qm

11、(X)是一元m次多項式,同樣可用線性表Q來表示:Q=(q0,q1,q2,qm)不失一般性,設m<n,則兩個多項式相加的結果Rn(x)=P(x)+Q(x)也可用線性表R來表示,為了更具一般性,設n>m ,相加的結果也可以用單鏈表來表示,規(guī)則是相同指數(shù)的項的系數(shù)相加,所以P(x)+Q(x)=(p0+q0,p1+q1pm+qm,pm+1pn),例如:P(x)=2x4+5x2+3x+1,Q(x)=3x2+1,相加后R(x)= 2x4+8x2+3x+2,用一維向量表表示分別為(1,3,5,0,2)+(1,0,3,)=(2,3,8,0,2),寫成數(shù)學形式即為2x4+8x2+3x+2,結論正確。

12、減法模型同加法模型。具體函數(shù)模塊的流程圖: 功能選擇模塊: 輸入數(shù)據(jù)函數(shù): 顯示運行結果調(diào)用輸出函數(shù)結束輸入各項的指指數(shù)系數(shù)開始開始判斷輸入是否合法通過switch判斷返回哪一個功能函數(shù)調(diào)用該功能函數(shù)結束輸入功能函數(shù)對應的數(shù)字 求和函數(shù)模塊:開始定義存儲結果的空鏈 r是 否輸出存儲多項式的和的鏈r結束是否同指數(shù)項系數(shù)相加后存入r中直接把p中各項存入r中直接把q中各項存入r存儲多項式2的空鏈Q是否為空存儲多項式1的空鏈P是否為空合并同類項開始定義存儲結果的空鏈 r是 否輸出存儲多項式的和的鏈r結束是否同指數(shù)項系數(shù)相加后存入r中直接把p中各項存入r中直接把q中各項存入r存儲多項式2的空鏈Q是否為空

13、存儲多項式1的空鏈P是否為空合并同類項求差函數(shù)模塊:開始定義存儲結果的空鏈 r是 否輸出存儲多項式的和的鏈r結束是否同指數(shù)項系數(shù)相加后存入r中把p中各項系數(shù)改變符號后存入r中直接把q中各項存入r存儲多項式2的空鏈Q是否為空存儲多項式1的空鏈P是否為空合并同類項四、 主要源程序代碼#include <stdio.h>#include <math.h>#include <algorithm>typedef struct duoxiangshi int coef; int exp; struct duoxiangshi *next;DXS;int getNum()

14、 int num; 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

15、 = xs; p->exp = zs; PHEAD->next = p; p->next = NULL; PHEAD = PHEAD->next; scanf("%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->ex

16、p = 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;/鏈表的冒泡排序 p = PHEAD->next; for( p; p != NULL; p = p->next ) for( q = p->next; q != NULL; q = q->next ) if(

17、 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->exp > q->exp ) int

18、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

19、 = PHEAD->next; printf("%d*x%d", PHEAD->coef, PHEAD->exp); if( PHEAD->next != NULL ) printf(" + "); printf("n"); printf("Q(x)="); while( QHEAD->next != NULL ) QHEAD = QHEAD->next; printf("%d*x%d", QHEAD->coef, QHEAD->exp); if(

20、 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->next != NULL ) PHEAD = PHEAD->next; sum += PHEAD->coef * pow( x0, PHEAD->e

21、xp ); 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 );/先進行升冪排序 DXS *RHEAD, *THEAD; RH

22、EAD = (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 =

23、 q->exp )/指數(shù)相同的情況 t->coef = p->coef + q->coef; t->exp = p->exp; p = p->next; q = q->next; else if( p->exp < q->exp )/P的指數(shù)小于Q的指數(shù) t->coef = p->coef; t->exp = p->exp; p = p->next; else if( p->exp > q->exp )/P的指數(shù)大于Q的指數(shù) t->coef = q->coef; t-&

24、gt;exp = q->exp; q = q->next; r->next = t; r = r->next; r->next = NULL; while ( p != NULL )/當只有一個序列有數(shù)值時 DXS *t = (DXS*) malloc(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 = (

25、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->coef>=0)if(r!=RHEAD->next)printf(" + ");printf(&q

26、uot;%d*x%d",r->coef,r->exp);elseprintf(" - %d*x%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->ex

27、p ) t->coef = p->coef - q->coef; t->exp = p->exp; p = p->next; q = q->next; else if( p->exp < q->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

28、; 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; T->next = NULL; p = p->next; while ( q != NULL ) DXS *t = (DXS*) malloc(sizeof(DXS); t->coef = -1 * q-

29、>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(x) = "); while( T-&

30、gt;next != NULL ) T = T->next; if( T->coef >=0 )if(T!=THEAD->next)printf(" + ");printf("%d*x%d",T->coef,T->exp); else printf(" - %d*x%d", -1 * T->coef, T->exp); if (THEAD->next=NULL)printf("0n");printf("n");void menu() prin

31、tf("-n"); printf("1.分別輸入Pn(x)和Qn(x)。n"); printf("2.分別對Pn(x)和Qn(x)進行升冪排序。n"); printf("3.分別求出Pn(x)和Qn(x)的和差。n"); printf("4.任意輸入一個實數(shù)x,分別求出一元多項式Pn(x)和Qn(x)的值。n"); printf("5.分別輸出上一步運行結果的Pn(x)和Qn(x)。n"); printf("-n"); printf("If yo

32、u 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 *PHEAD, *QHEAD; PHEAD = (DXS *)malloc(sizeof(DXS); QHEAD = (DXS *)malloc(sizeof(DXS); PHEAD->ne

33、xt = 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( 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。修正常改程序后,正常輸出。在此之前也遇

溫馨提示

  • 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

提交評論