版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、二一五二一六 學(xué)年第 二 學(xué)期信息科學(xué)與工程學(xué)院軟件綜合設(shè)計(jì)報(bào)告書課程名稱: C語(yǔ)言課程設(shè)計(jì) 班 級(jí): 學(xué) 號(hào): 姓 名: 指導(dǎo)教師: 二一六 年 六 月一、需求分析用單鏈表實(shí)現(xiàn)任意兩個(gè)一元多項(xiàng)式的加、減法運(yùn)算任務(wù):編程實(shí)現(xiàn)以下功能: 分別輸入一元多項(xiàng)式pn (x)和Q n (x)。 從鍵盤輸入一元對(duì)項(xiàng)式中各項(xiàng)的系數(shù)和指數(shù),并用單鏈表加以表示。分別對(duì)一元多項(xiàng)式pn (x)和Q n (x)進(jìn)行升冪排序。將一元多項(xiàng)式中各子項(xiàng)按照指數(shù)從小到大的順序排序。分別輸出一元多項(xiàng)式pn (x)和Q n (x)。 將用單鏈表表示的一元多項(xiàng)式輸出,即打印多項(xiàng)式的系數(shù)和指數(shù)。任意輸入一個(gè)實(shí)數(shù)x0,分別求出一元多項(xiàng)式
2、pn (x0)和Q n (x0)的值。已知有兩個(gè)一元多項(xiàng)式分別為Pn (x)和Qn (x),求出兩個(gè)多項(xiàng)式的和R n (x)和差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))保存多項(xiàng)式,即分別將一元多項(xiàng)式pn (x)和Q n (x)各項(xiàng)的系數(shù)和指數(shù)保存到外部磁盤文件。由程序從所存文件中讀出多項(xiàng)式的系數(shù)和指數(shù),重新構(gòu)建一元多項(xiàng)式 Pn (x) 和Q n (x),并可對(duì)其再次進(jìn)行運(yùn)算操作。用戶操作流程:(1) 進(jìn)入菜單界面;(2) 根據(jù)提示輸入對(duì)應(yīng)功能數(shù)字,調(diào)用功能;(
3、3) 根據(jù)提示輸入?yún)?shù);(4) 選擇功能輸出結(jié)果;(5) 退出。2、 概要設(shè)計(jì)1、 系統(tǒng)總體設(shè)計(jì)框架:主程序功能選擇函數(shù)輸入數(shù)據(jù)函數(shù)升冪函數(shù)賦值函數(shù)求和求差函數(shù)輸出結(jié)果函數(shù)2、 系統(tǒng)功能模塊 (1) 功能選擇函數(shù):通過(guò)輸入對(duì)應(yīng)功能的數(shù)字,調(diào)用對(duì)應(yīng)的函數(shù)進(jìn)行多項(xiàng)式的運(yùn)算。(2) 輸入數(shù)據(jù)函數(shù):采用尾插法建立單鏈表并輸入保存兩個(gè)多項(xiàng)式的各項(xiàng)指數(shù)和系數(shù)。 (3) 升冪函數(shù):通過(guò)冒泡排序法對(duì)兩個(gè)多項(xiàng)式進(jìn)行升冪排序。 (4) 求和求差函數(shù):定義空鏈用來(lái)存儲(chǔ)結(jié)果,將兩個(gè)多項(xiàng)式相加減分別得到Rn(x)和Tn(x)。 (5) 輸出函數(shù):輸出當(dāng)前保存的多項(xiàng)式。三、詳細(xì)設(shè)計(jì)創(chuàng)建一元多項(xiàng)式鏈表,鏈表中的每一個(gè)結(jié)點(diǎn)存
4、放多項(xiàng)式的一個(gè)系數(shù)非零項(xiàng),它包含三個(gè)域,分別存放該項(xiàng)的系數(shù)、指數(shù)以及指向下一個(gè)多項(xiàng)式項(xiàng)結(jié)點(diǎn)的指針。對(duì)每一項(xiàng)的系數(shù)和指數(shù)進(jìn)行相應(yīng)的操作完成計(jì)算1. 定義結(jié)構(gòu)體struct使用typedef和struct定義的新類型名稱,聲明和初始化結(jié)構(gòu)體變量;創(chuàng)建并根據(jù)自己的意愿初始化結(jié)構(gòu)數(shù)組。2. 建立單鏈表并輸入保存一元多項(xiàng)式各項(xiàng)的系數(shù)和指數(shù)。單鏈表有兩個(gè)域,data域和next域,一個(gè)是存放數(shù)據(jù),一個(gè)是存放指針而且指向它的后繼。將表的最后一個(gè)結(jié)點(diǎn)的next置NULL,以示表的結(jié)束。由于Pn(x)和Qn(x)的輸入方式一樣,所以在這里就只討論P(yáng)n(x)的輸入。在輸入系數(shù)和指數(shù)的時(shí)候,在最后輸入0以示輸入結(jié)束
5、。開始一次輸入Pn(x)各項(xiàng)的系數(shù)和指數(shù)將輸入的數(shù)據(jù)作為多項(xiàng)式保存調(diào)用函數(shù)顯示保存的一元多項(xiàng)式結(jié)束3. 建立功能選擇函數(shù)通過(guò)switch來(lái)判斷外界輸入的數(shù)字,調(diào)用對(duì)應(yīng)的函數(shù)開始輸入要調(diào)用函數(shù)的數(shù)字判斷輸入的數(shù)字是否合法通過(guò)switch判斷返回對(duì)應(yīng)的功能函數(shù)調(diào)用該函數(shù)結(jié)束4. 多項(xiàng)式相加減:多項(xiàng)式相加的運(yùn)算規(guī)則是:兩個(gè)多項(xiàng)式中所有指數(shù)相同的項(xiàng)的對(duì)應(yīng)系數(shù)相加,若和不為零,則構(gòu)成“和多項(xiàng)式”中的一項(xiàng);所有指數(shù)不相同的的項(xiàng)均復(fù)抄到“和多項(xiàng)式”中。以單鏈表作為存儲(chǔ)結(jié)構(gòu),并且“和多項(xiàng)式”中的節(jié)點(diǎn)無(wú)需另外生成,則可看做是將多項(xiàng)式Q加到多項(xiàng)式P中,由此得到下列運(yùn)算規(guī)則:(設(shè)p、q分別是多項(xiàng)式Pn(x)和Qn(
6、x)的一項(xiàng),比較結(jié)點(diǎn)的指數(shù)項(xiàng));若p->exp<q->exp,則結(jié)點(diǎn)p所指的結(jié)點(diǎn)應(yīng)是“和多項(xiàng)式”中的一項(xiàng),令指針p后移。 若p->exp>q->exp,則結(jié)點(diǎn)q所指的結(jié)點(diǎn)應(yīng)是“和多項(xiàng)式”中的一項(xiàng),將結(jié)點(diǎn)q插入在結(jié)點(diǎn)p之前,且令指針q在原來(lái)的鏈表上后移。 若p->exp=q->exp,則將兩個(gè)結(jié)點(diǎn)的系數(shù)相加,當(dāng)和不為零是修改結(jié)點(diǎn)p的系數(shù),釋放q結(jié)點(diǎn);若和為零,則“和多項(xiàng)式”中無(wú)此項(xiàng),從P中p結(jié)點(diǎn),同時(shí)釋放p和q結(jié)點(diǎn)。 多項(xiàng)式相減運(yùn)算規(guī)則同加法。求和函數(shù)程序流程圖:開始定義用來(lái)存儲(chǔ)結(jié)果的空鏈R調(diào)用排序函數(shù)先對(duì)多項(xiàng)式進(jìn)行升冪排序判斷鏈表P是否為空?判斷
7、鏈表Q是否為空?將P、Q同指數(shù)項(xiàng)的系數(shù)相加然后賦給R直接將多項(xiàng)式P的各項(xiàng)系數(shù)指數(shù)賦給R直接將多項(xiàng)式Q的各項(xiàng)系數(shù)指數(shù)賦給R輸出結(jié)果R結(jié)束是是否否求差函數(shù)程序流程圖:開始調(diào)用排序函數(shù)先對(duì)多項(xiàng)式進(jìn)行升冪排序定義用來(lái)存儲(chǔ)結(jié)果的空鏈T判斷鏈表P是否為空?判斷鏈表Q是否為空?將P、Q同指數(shù)項(xiàng)的系數(shù)相減然后賦給R輸出結(jié)果T結(jié)束直接將多項(xiàng)式P的各項(xiàng)系數(shù)指數(shù)賦給T將多項(xiàng)式Q的系數(shù)變負(fù)后再賦給T是是否否四、主要源程序代碼#include <stdio.h> #include <math.h> #include <algorithm> typedef struct Ploynod
8、e int coef; int exp; struct Ploynode *next; DXS; int get() int num; printf("輸入選擇功能對(duì)應(yīng)的數(shù)字: "); scanf("%d", &num); return num; void fun1( DXS *PHEAD, DXS *QHEAD ) int e, c;/定義指數(shù)系數(shù) printf("請(qǐng)輸入P(x)中各項(xiàng)的系數(shù)和指數(shù)n"); scanf("%d %d", &c, &e); while( c != 0 | e
9、!= 0 ) /*若c=0,則代表多項(xiàng)式的輸入結(jié)束*/ DXS *p = (DXS*) malloc(sizeof(DXS);/*申請(qǐng)新的結(jié)點(diǎn)*/ p->coef = c; p->exp = e; PHEAD->next = p;/*在當(dāng)前表尾做插入*/ p->next = NULL; /*將表的最后一個(gè)結(jié)點(diǎn)的next置NULL,以示表結(jié)束*/ PHEAD = PHEAD->next; scanf("%d %d", &c, &e); printf("請(qǐng)輸入Q(x)中各項(xiàng)的系數(shù)和指數(shù)n"); scanf(&qu
10、ot;%d %d", &c, &e); while( c != 0 |e != 0 ) /*若c=0,則代表多項(xiàng)式的輸入結(jié)束*/ DXS *p = (DXS*) malloc(sizeof(DXS);/*申請(qǐng)新的結(jié)點(diǎn)*/ p->coef = c; p->exp = e; QHEAD->next = p; /*在當(dāng)前表尾做插入*/ p->next = NULL; /*將表的最后一個(gè)結(jié)點(diǎn)的next置NULL,以示表結(jié)束*/ QHEAD = p; scanf("%d %d", &c, &e); printf(&qu
11、ot;輸入5顯示結(jié)果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( p->exp > q->exp ) int temp; temp = p->coef; p->coef = q->coef; q->coef = temp; temp = p-&
12、gt;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 temp; temp = p->coef; p->coef = q->coef; q->coef = temp; temp = p->exp; p->exp = q->exp; q
13、->exp = temp; printf("輸入5顯示結(jié)果。n"); void fun5( DXS *PHEAD, DXS *QHEAD ) printf("當(dāng)前保存的P(x),Q(x)序列如下:n"); printf("P(x)="); while( PHEAD->next != NULL ) PHEAD = PHEAD->next; printf("%dx%d", PHEAD->coef, PHEAD->exp); if( PHEAD->next != NULL ) prin
14、tf(" + "); printf("n"); printf("Q(x)="); while( QHEAD->next != NULL ) QHEAD = QHEAD->next; printf("%dx%d", QHEAD->coef, QHEAD->exp); if( QHEAD->next != NULL ) printf(" + "); printf("nn"); void fun4( DXS *PHEAD, DXS *QHEAD ) i
15、nt x0; double sum; printf("輸入x的值: "); scanf("%d", &x0); sum = 0; while( PHEAD->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; s
16、um += QHEAD->coef * pow( x0, QHEAD->exp ); printf("Q(x0) = %.0lfnn", sum); void fun3( DXS *PHEAD, DXS *QHEAD )/求兩個(gè)多項(xiàng)式的和差 fun2( PHEAD, QHEAD );/先進(jìn)行升冪排序 DXS *RHEAD, *THEAD; RHEAD = (DXS*) malloc(sizeof(DXS); THEAD = (DXS*) malloc(sizeof(DXS); RHEAD->next = NULL; THEAD->next = NUL
17、L; DXS *p = PHEAD, *q = QHEAD; /多項(xiàng)式相加 DXS *r = RHEAD; p = p->next; q = q->next; while( p != NULL && q != NULL )/當(dāng)兩個(gè)序列都有數(shù)值時(shí) DXS *t = (DXS*) malloc(sizeof(DXS); if ( p->exp = q->exp )/指數(shù)相同的情況 t->coef = p->coef + q->coef; t->exp = p->exp; p = p->next; q = q->nex
18、t; 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->exp = q->exp; q = q->next; r->next = t; r = r->next; r->next = NULL; while ( p != NULL )/當(dāng)只有一
19、個(gè)序列有數(shù)值時(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 = (DXS*) malloc(sizeof(DXS); t->coef = q->coef; t->exp = q->exp; r->next = t; r = r->next; r->
20、;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("%dx%d",r->coef,r->exp); else printf(" - %dx%d",-1*r->coef,r->exp); printf(&qu
21、ot;nn"); p = PHEAD; q = QHEAD; DXS *T = THEAD; /多項(xiàng)式相減 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->exp; p = p->next; q = q->next; else if( p-
22、>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; T->next = t; T = T->next; T->next = NULL; while ( p != NULL ) DXS *t = (DXS*) malloc(sizeof(DXS);
23、 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->coef; t->exp = q->exp; T->next = t; T = T->next; T->next = NULL; q = q->next; T = THEA
24、D;/消除系數(shù)為0項(xiàng) 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->next != NULL ) T = T->next; if( T->coef >=0 ) if(T!=THEAD->next) printf(" + "); pri
25、ntf("%dx%d",T->coef,T->exp); else printf(" - %dx%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.分別對(duì)Pn(x)和Qn(x)進(jìn)行升冪排序。n"
26、); printf("3.分別求出Pn(x)和Qn(x)的和差。n"); printf("4.任意輸入一個(gè)實(shí)數(shù)x,分別求出一元多項(xiàng)式Pn(x)和Qn(x)的值。n"); printf("5.分別輸出上一步運(yùn)行結(jié)果的Pn(x)和Qn(x)。n"); 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 = get(); if ( num = 0 ) printf("nExit the system,goodbyen"); DXS *PHEAD, *QHEAD; PHEAD = (DXS *)malloc(sizeof(DXS); QHEAD = (DXS *)malloc(sizeof(DXS); PHEAD->next = NULL; QHEAD->next = NULL;
溫馨提示
- 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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2022-2023學(xué)年山東省泰安市寧陽(yáng)縣四年級(jí)(上)期末數(shù)學(xué)試卷
- 2025年個(gè)體工商戶名稱轉(zhuǎn)讓協(xié)議(三篇)
- 2025年產(chǎn)品銷售協(xié)議格式范文(2篇)
- 2025年五年級(jí)美術(shù)教學(xué)總結(jié)樣本(四篇)
- 2025年中學(xué)九年級(jí)教導(dǎo)處工作總結(jié)范文(二篇)
- 2025年九年級(jí)教師教學(xué)工作總結(jié)范文(二篇)
- 2025年乳膠漆施工合同范文(2篇)
- 2025年個(gè)人押車借款合同常用版(五篇)
- 2025年個(gè)人建材租賃擔(dān)保合同范文(2篇)
- 冷鏈物流服務(wù)合同范本
- 2024-2025學(xué)年人教版生物八年級(jí)上冊(cè)期末綜合測(cè)試卷
- GB/T 709-2019熱軋鋼板和鋼帶的尺寸、外形、重量及允許偏差
- GB/T 14177-2003林業(yè)機(jī)械便攜式割灌機(jī)和割草機(jī)試驗(yàn)方法
- FZ/T 54007-2019錦綸6彈力絲
- DB11-T 291-2022日光溫室建造規(guī)范
- 2021-2022學(xué)年山東省淄博市高二(下)期末英語(yǔ)試卷(附答案詳解)
- 北師大版高中數(shù)學(xué)選修4-6初等數(shù)論初步全套課件
- 外貿(mào)業(yè)務(wù)員面試試卷
- 紀(jì)檢知識(shí)答題測(cè)試題及答案
- 創(chuàng)傷急救-止血、包扎課件
- 大數(shù)據(jù)背景下網(wǎng)絡(luò)輿情成因及治理
評(píng)論
0/150
提交評(píng)論