數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)一元多項(xiàng)式的加法與減法_第1頁
數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)一元多項(xiàng)式的加法與減法_第2頁
數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)一元多項(xiàng)式的加法與減法_第3頁
數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)一元多項(xiàng)式的加法與減法_第4頁
數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)一元多項(xiàng)式的加法與減法_第5頁
已閱讀5頁,還剩25頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、精選優(yōu)質(zhì)文檔-傾情為你奉上課程設(shè)計(jì)(論文)題 目 名 稱 一元多項(xiàng)式的加法、減法、乘法的實(shí)現(xiàn) 課 程 名 稱 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì) 學(xué) 生 姓 名 郭晗 學(xué) 號 系 、專 業(yè) 信息工程系、信息類 指 導(dǎo) 教 師 黃同成 2012年 12 月 23 日摘 要設(shè)有一元多項(xiàng)式Am(x)和Bn(x):Am(x)=A0+A1x+A2x2+A3x3+ +AmxmBn(x)=B0+B1x1+B2x2+B3x3+ +Bnxn分別采用順序和鏈?zhǔn)酱鎯Y(jié)構(gòu)實(shí)現(xiàn):M(x)=Am(x)+Bn(x)、M(x)=Am(x)-Bn(x)和M (x)=Am(x)×Bn(x)。并要結(jié)果M(x)中無重復(fù)階項(xiàng)和無零系數(shù)項(xiàng),且輸

2、出結(jié)果用升冪和降冪兩種排列情況。關(guān)鍵詞:一元多項(xiàng)式;順序存儲;鏈?zhǔn)酱鎯Γ簧齼?;降冪?錄專心-專注-專業(yè)1 問題描述設(shè)有一元多項(xiàng)式Am(x)和Bn(x):Am(x)=A0+A1x+A2x2+A3x3+ +AmxmBn(x)=B0+B1x1+B2x2+B3x3+ +Bnxn 實(shí)現(xiàn)M(x)=Am(x)+Bn(x)、M(x)=Am(x)-Bn(x)和M(x)=Am(x)×Bn(x)。要求: (1)分別采用順序和鏈?zhǔn)酱鎯Y(jié)構(gòu)實(shí)現(xiàn);(2)結(jié)果M(x)中無重復(fù)階項(xiàng)和無零系數(shù)項(xiàng);(3)要求輸出結(jié)果用升冪和降冪兩種排列情況。2 需求分析(1)用一維數(shù)組cp1n1和cp2n2存儲一元多項(xiàng)式Am(x)和

3、Bn(x)的系數(shù),用for循環(huán)來計(jì)算順序結(jié)構(gòu)中的加法減法乘法的結(jié)果。(2)用指針*d,*q來存儲一元多項(xiàng)式的內(nèi)容,再利用指針計(jì)算動(dòng)態(tài)鏈表下一元多項(xiàng)式的加法減法乘法的結(jié)果。(3)在用降冪升冪兩種排列輸出結(jié)果時(shí),用expn和coef表示一元多項(xiàng)式的系數(shù)和指數(shù),輸出兩種排列結(jié)果。3 概要設(shè)計(jì)31抽象數(shù)據(jù)類型定義(1)順序存儲結(jié)構(gòu)的抽象數(shù)據(jù)類型定義int n1,n2;利用一維數(shù)組cp1n1和cp2n2存儲多項(xiàng)式的系數(shù)基本操作:void creatpoly1(double *a,int pt)操作結(jié)果:建立順序結(jié)構(gòu)void addpoly(double *a,double *b,double *c)初始

4、條件:一維數(shù)組cp1n1和cp2n2已建立操作結(jié)果:順序結(jié)構(gòu)相加void subpoly(double *a,double *b,double *c)初始條件:一維數(shù)組cp1n1和cp2n2已建立操作結(jié)果:順序結(jié)構(gòu)相減 void mulpoly(double *a,double *b,double *c) 初始條件:一維數(shù)組cp1n1和cp2n2已建立操作結(jié)果:順序結(jié)構(gòu)相乘void ansprint(double *a,int n) 初始條件: 一維數(shù)組cp1n1和cp2n2已建立操作結(jié)果:選用升冪或降冪排列打印出結(jié)果(2)動(dòng)態(tài)鏈表結(jié)構(gòu)的抽象數(shù)據(jù)類型定義typedef struct p_pol

5、 double coef; int expn; p_pol *next;MPP;基本操作:MPP * creatlink(MPP *p,int n,int pt)初始條件:動(dòng)態(tài)鏈表已定義操作結(jié)果:構(gòu)造動(dòng)態(tài)鏈表結(jié)構(gòu)void addlink(MPP *p1,MPP *p2,MPP *p3)初始條件:動(dòng)態(tài)鏈表已定義操作結(jié)果:動(dòng)態(tài)鏈表相加void sublink(MPP *p1,MPP *p2,MPP *p3)初始條件:動(dòng)態(tài)鏈表已定義操作結(jié)果:動(dòng)態(tài)鏈表相減void mullink(MPP *p1,MPP *p2,MPP *p3)初始條件:動(dòng)態(tài)鏈表已定義操作結(jié)果:動(dòng)態(tài)鏈表相乘void printlink

6、(MPP * p)初始條件:動(dòng)態(tài)鏈表已定義操作結(jié)果:選用升冪或降冪排列打印結(jié)果void deletelink(MPP *p)初始條件:動(dòng)態(tài)鏈表已定義操作結(jié)果:刪除結(jié)點(diǎn)釋放內(nèi)存32模塊劃分本程序包括三個(gè)模塊:(1)主程序模塊void main()輸入第一個(gè)多項(xiàng)式的項(xiàng)數(shù);分別輸入各項(xiàng)的系數(shù)和指數(shù);輸入第二個(gè)多項(xiàng)式的項(xiàng)數(shù);分別輸入各項(xiàng)的系數(shù)和指數(shù);請選擇實(shí)現(xiàn)結(jié)構(gòu):1 順序結(jié)構(gòu) 2 動(dòng)態(tài)鏈表結(jié)構(gòu)選擇操作方式:1 相加 2 相減 3 相乘(2)順序存儲結(jié)構(gòu)模塊實(shí)現(xiàn)順序存儲結(jié)構(gòu)的抽象數(shù)據(jù)類型(3)動(dòng)態(tài)鏈表結(jié)構(gòu)模塊實(shí)現(xiàn)動(dòng)態(tài)鏈表結(jié)構(gòu)的抽象數(shù)據(jù)類型4 詳細(xì)設(shè)計(jì)41數(shù)據(jù)類型的定義(1)順序存儲結(jié)構(gòu)類型int n1

7、,n2;int cp1n1; intcp2n2(2)動(dòng)態(tài)鏈表結(jié)構(gòu)類型#define INFEX 10000#define INFCO 10000double coef;int expn;p_pol *next;42主要模塊的算法描述該題可畫三個(gè)流程圖:(1)一元多項(xiàng)式的計(jì)算主流程圖;(2)順序存儲結(jié)構(gòu)流程圖;(3)動(dòng)態(tài)鏈表結(jié)構(gòu)流程圖。流程圖如下:(1)一元多項(xiàng)式的計(jì)算主流程圖:如圖4.1所示為動(dòng)態(tài)鏈表結(jié)構(gòu)為順序結(jié)構(gòu)開始輸入兩個(gè)多項(xiàng)式各項(xiàng)的系數(shù)和選擇實(shí)現(xiàn)結(jié)構(gòu)順序結(jié)構(gòu)?是否打印輸出處理后的結(jié)果選擇操作方式選擇打印輸出方式結(jié)束圖4.1一元多項(xiàng)式的計(jì)算主流程圖(2)順序存儲結(jié)構(gòu)流程圖如圖4.2所示減法

8、開始順序存儲結(jié)構(gòu)加法調(diào)用加法函數(shù)是否調(diào)用降冪輸出函數(shù)調(diào)用升冪輸出函數(shù)是否調(diào)用減法函數(shù)調(diào)用乘法函數(shù)選擇打印輸出順序升冪是否打印輸出處理后的結(jié)果結(jié)束圖4.2順序存儲結(jié)構(gòu)流程圖(3)動(dòng)態(tài)鏈表結(jié)構(gòu)流程圖如圖4.3所示減法開始動(dòng)態(tài)鏈表存儲結(jié)構(gòu)加法調(diào)用加法函數(shù)是否調(diào)用降冪輸出函數(shù)調(diào)用升冪輸出函數(shù)是否調(diào)用減法函數(shù)調(diào)用乘法函數(shù)選擇打印輸出順序升冪是否打印輸出處理后的結(jié)果結(jié)束圖4.3動(dòng)態(tài)鏈表結(jié)構(gòu)流程圖5 測試分析測試數(shù)據(jù)及結(jié)果如下:6 課程設(shè)計(jì)總結(jié) 從這次數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì),我不僅學(xué)會了怎樣編出一個(gè)一元多項(xiàng)式的加法、減法、乘法的實(shí)現(xiàn),而且還深深的體會到編好一個(gè)程序是一件非常有意義的事。我覺得編程不僅需要信心,還需

9、要耐心,更需要團(tuán)隊(duì)合作之心,有了這些還不夠,我們應(yīng)該從實(shí)踐出發(fā),并從實(shí)踐得到檢驗(yàn),不懂就是不懂,虛心求教才是解決問題的好辦法。最后我要感謝老師給了我這次編程的機(jī)會,讓我知道了團(tuán)隊(duì)合作原來如此重要,并且感受到數(shù)據(jù)結(jié)構(gòu)原來也很奇妙,編程之路有點(diǎn)苦,但有我們團(tuán)隊(duì)一起走過的痕跡,我最后發(fā)現(xiàn)這是甜的味道!兩周的課程設(shè)計(jì)結(jié)束了,在這次的課程設(shè)計(jì)中不僅檢驗(yàn)了我所學(xué)習(xí)的知識,也培養(yǎng)了我如何去把握一件事情,如何去做一件事情,又如何完成一件事情。在設(shè)計(jì)過程中,與同學(xué)分工設(shè)計(jì),和同學(xué)們相互探討,相互學(xué)習(xí),相互監(jiān)督。學(xué)會了合作,學(xué)會了運(yùn)籌帷幄,學(xué)會了寬容,學(xué)會了理解,也學(xué)會了做人與處世。課程設(shè)計(jì)是我們專業(yè)課程知識綜合

10、應(yīng)用的實(shí)踐訓(xùn)練,是我們邁向社會,從事職業(yè)工作前一個(gè)必不少的過程”千里之行始于足下”,通過這次課程設(shè)計(jì),我深深體會到這句千古名言的真正含義我今天認(rèn)真的進(jìn)行課程設(shè)計(jì),學(xué)會腳踏實(shí)地邁開這一步,就是為明天能穩(wěn)健地在社會大潮中奔跑打下堅(jiān)實(shí)的基礎(chǔ)通過這次課程設(shè)計(jì),本人在多方面都有所提高。提高了編程能力,繪圖能力,熟悉了規(guī)范和標(biāo)準(zhǔn),同時(shí)各科相關(guān)的課程都有了全面的復(fù)習(xí),獨(dú)立思考的能力也有了提高。在這次設(shè)計(jì)過程中,體現(xiàn)出自己綜合運(yùn)用知識的能力,體會了學(xué)以致用、突出自己勞動(dòng)成果的喜悅心情,從中發(fā)現(xiàn)自己平時(shí)學(xué)習(xí)的不足和薄弱環(huán)節(jié),從而加以彌補(bǔ)參考文獻(xiàn)1 黃同成,黃俊民,董建寅數(shù)據(jù)結(jié)構(gòu)M北京:中國電力出版社,20082

11、 董建寅,黃俊民,黃同成數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)指導(dǎo)與題解M北京:中國電力出版社,20083 嚴(yán)蔚敏,吳偉民. 數(shù)據(jù)結(jié)構(gòu)(C語言版)M. 北京:清華大學(xué)出版社,20024 劉振鵬,張曉莉,郝杰數(shù)據(jù)結(jié)構(gòu)M北京:中國鐵道出版社,2003附錄(源程序清單)#include<stdio.h>#include<math.h>#include<stdlib.h>#define INFEX 10000#define INFCO 10000typedef struct poldouble coef;int expn;MPOL;MPOL *cp1,*cp2;/-順序結(jié)構(gòu)部分-int n1

12、,n2;void ansprint(double *a,int n) /打印出結(jié)果int choose;puts("請選擇輸出順序:1 升冪 2 降冪:");scanf("%d",&choose);int i,num;if(choose!=2) /升冪打印if(choose!=1)printf("沒有%d選項(xiàng),系統(tǒng)將默認(rèn)輸出升序:nY(X)=",choose);elseprintf("Y(X)=");num=0;for(i=0;i<=n;i+)if(fabs(ai)>1e-8)if(num+)p

13、utchar('+');printf("%lfX%d",ai,i);else /降冪打印printf("Y(X)=");num=0;for(i=n;i>=0;i-)if(fabs(ai)>1e-8)if(num+)putchar('+'); printf("%lfX%d",ai,i);putchar(10);void addpoly(double *a,double *b,double *c) /順序結(jié)構(gòu)相加int min=(cp1n1-1.expn>cp2n2-1.expn?cp2n

14、2-1.expn:cp1n1-1.expn);int max=(cp1n1-1.expn<cp2n2-1.expn?cp2n2-1.expn:cp1n1-1.expn);int i;for(i=0;i<=min;i+)ci=ai+bi;for(;i<=max;i+)if(cp1n1-1.expn>cp2n2-1.expn)ci=ai;elseci=bi;puts("相加結(jié)果為:");ansprint(c,max);void subpoly(double *a,double *b,double *c) /順序結(jié)構(gòu)相減int min=(cp1n1-1.e

15、xpn>cp2n2-1.expn?cp2n2-1.expn:cp1n1-1.expn);int max=(cp1n1-1.expn<cp2n2-1.expn?cp2n2-1.expn:cp1n1-1.expn);int i;for(i=0;i<=min;i+)ci=ai-bi;for(;i<=max;i+)if(cp1n1-1.expn>cp2n2-1.expn)ci=ai;elseci=-bi;puts("相減結(jié)果為:");ansprint(c,max);void mulpoly(double *a,double *b,double *c)

16、/順序結(jié)構(gòu)相乘int max=cp1n1-1.expn+cp2n2-1.expn+2;int i,j;for(i=0;i<max;i+)ci=0;for(i=0;i<=cp1n1-1.expn;i+)for(j=0;j<=cp2n2-1.expn;j+)ci+j+=ai*bj;puts("相乘結(jié)果為:");ansprint(c,max-1);void creatpoly1(double *a,int pt) /建立順序結(jié)構(gòu)int i;if(pt=1)for(i=0;i<=cp1n1-1.expn;i+)ai=0;for(i=0;i<n1;i+)

17、acp1i.expn=cp1i.coef;elsefor(i=0;i<=cp2n2-1.expn;i+)ai=0;for(i=0;i<n2;i+)acp2i.expn=cp2i.coef;/-動(dòng)態(tài)鏈?zhǔn)浇Y(jié)構(gòu)部分-typedef struct p_pol /結(jié)點(diǎn)定義double coef;int expn;p_pol *next;MPP;MPP * creatlink(MPP *p,int n,int pt) /構(gòu)造動(dòng)態(tài)鏈表結(jié)構(gòu)MPP *d,*q;int i;q=(MPP *)malloc(sizeof(MPP);if(q=NULL)exit(0);q->next=NULL;q-

18、>coef=INFCO;q->expn=-INFEX;p=q;for(i=0;i<n;i+)d=(MPP *)malloc(sizeof(MPP);if(d=NULL)exit(0);d->next=NULL;if(pt=1)d->coef=cp1i.coef;d->expn=cp1i.expn;elsed->coef=cp2i.coef;d->expn=cp2i.expn;q->next=d;q=d;return p;void printlink(MPP * p) /打印結(jié)果int num=0,i=0,choose,count;puts(

19、"請選擇輸出順序:1 升冪 2 降冪:");scanf("%d",&choose);MPP *tp=p;p=p->next;while(p!=NULL)num+;p=p->next;MPOL *d=new MPOLnum;p=tp->next;while(p!=NULL)di.coef=p->coef;di.expn=p->expn;i+;p=p->next;if(choose=2) /降冪打印count=0;printf("Y(X)=");for(i=num-1;i>=0;i-)if

20、(count+)putchar('+');printf("%lfX%d",di.coef,di.expn);else /升冪打印if(choose!=1)printf("沒有%d選項(xiàng),系統(tǒng)將默認(rèn)輸出升序:nY(X)=",choose);elseprintf("Y(X)=");for(i=0;i<num;i+)if(count+)putchar('+');printf("%lfX%d",di.coef,di.expn);putchar(10);void addlink(MPP *

21、p1,MPP *p2,MPP *p3) /動(dòng)態(tài)鏈表相加MPP * p,*head;p=(MPP *)malloc(sizeof(MPP);if(p=NULL)exit(0);p->coef=INFCO;p->expn=-INFEX;p->next=NULL;head=p3=p;p1=p1->next;p2=p2->next;while(p1!=NULL|p2!=NULL)if(fabs(head->coef)>1e-8)p=(MPP *)malloc(sizeof(MPP);if(p=NULL)exit(0);head->next=p;head=

22、p;head->next=NULL;if(p1=NULL)head->coef=p2->coef;head->expn=p2->expn;p2=p2->next;continue;if(p2=NULL)head->coef=p1->coef;head->expn=p1->expn;p1=p1->next;continue;if(p1->expn=p2->expn)head->coef=p1->coef+p2->coef;head->expn=p1->expn;p1=p1->next

23、;p2=p2->next;else if(p1->expn<p2->expn)head->coef=p1->coef;head->expn=p1->expn;p1=p1->next;elsehead->coef=p2->coef;head->expn=p2->expn;p2=p2->next;puts("相加結(jié)果為:");printlink(p3);void sublink(MPP *p1,MPP *p2,MPP *p3) /動(dòng)態(tài)鏈表相減MPP * p,*head;p=(MPP *)mall

24、oc(sizeof(MPP);if(p=NULL)exit(0);p->coef=INFCO;p->expn=-INFEX;p->next=NULL;head=p3=p;p1=p1->next;p2=p2->next;while(p1!=NULL|p2!=NULL)if(fabs(head->coef)>1e-8)p=(MPP *)malloc(sizeof(MPP);if(p=NULL)exit(0);head->next=p;head=p;head->next=NULL;if(p1=NULL)head->coef=-p2->

25、coef;head->expn=p2->expn;p2=p2->next;continue;if(p2=NULL)head->coef=p1->coef;head->expn=p1->expn;p1=p1->next;continue;if(p1->expn=p2->expn)head->coef=p1->coef-p2->coef;head->expn=p1->expn;p1=p1->next;p2=p2->next;else if(p1->expn<p2->expn)he

26、ad->coef=p1->coef;head->expn=p1->expn;p1=p1->next;elsehead->coef=-p2->coef;head->expn=p2->expn;p2=p2->next;puts("相減結(jié)果為:");printlink(p3);void mullink(MPP *p1,MPP *p2,MPP *p3) /動(dòng)態(tài)鏈表相乘MPP *p,*head,*d,*tp;int i,j;p=(MPP *)malloc(sizeof(MPP);if(p=NULL)exit(0);p->

27、;coef=INFCO;p->expn=-INFEX;p->next=NULL;tp=head=p3=p;p=(MPP *)malloc(sizeof(MPP);if(p=NULL)exit(0);p->coef=INFCO;p->expn=INFEX;p->next=NULL;tp->next=p;for(i=0;i<n1;i+)p1=p1->next;d=p2;for(j=0;j<n2;j+)d=d->next;p=(MPP *)malloc(sizeof(MPP);if(p=NULL)exit(0);p->next=NUL

28、L;p->coef=p1->coef*d->coef;p->expn=p1->expn+d->expn;tp=p3;while(tp->next!=NULL)if(tp->expn=p->expn)tp->coef+=p->coef;free(p);break;if(tp->expn<p->expn&&tp->next->expn>p->expn)p->next=tp->next;tp->next=p;break;tp=tp->next;tp=p3

29、;while(tp->next!=NULL)if(tp->next->expn=INFEX)free(tp->next);tp->next=NULL;break;tp=tp->next;puts("相乘結(jié)果為:");printlink(p3);void deletelink(MPP *p) /刪除結(jié)點(diǎn)釋放內(nèi)存MPP *d;while(p!=NULL)d=p;p=p->next;free(d);int main()int i,choose,choose2;puts("輸入第一個(gè)多項(xiàng)式的項(xiàng)數(shù):");scanf(&qu

30、ot;%d",&n1);cp1=(MPOL *)malloc(n1*sizeof(MPOL);puts("分別輸入各項(xiàng)的系數(shù)和指數(shù):");for(i=0;i<n1;i+)scanf("%lf%d",&cp1i.coef,&cp1i.expn);puts("輸入第二個(gè)多項(xiàng)式的項(xiàng)數(shù):");scanf("%d",&n2);cp2=(MPOL *)malloc(n2*sizeof(MPOL);puts("分別輸入各項(xiàng)的系數(shù)和指數(shù):");for(i=0;i<n2;i+)scanf("%lf%d",&cp2i.coef,&cp2i.expn);puts("請選擇實(shí)現(xiàn)結(jié)構(gòu):1 順序結(jié)構(gòu) 2 動(dòng)態(tài)鏈表結(jié)構(gòu)!");scanf("%d",&choose);double *c1,*c2,*c3;MPP *p1=NULL,*p2=NULL,*p3=NULL;switch(choose)ca

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論