順序結(jié)構(gòu)、動(dòng)態(tài)鏈表下的一元多項(xiàng)式-程序設(shè)計(jì)報(bào)告_第1頁(yè)
順序結(jié)構(gòu)、動(dòng)態(tài)鏈表下的一元多項(xiàng)式-程序設(shè)計(jì)報(bào)告_第2頁(yè)
順序結(jié)構(gòu)、動(dòng)態(tài)鏈表下的一元多項(xiàng)式-程序設(shè)計(jì)報(bào)告_第3頁(yè)
順序結(jié)構(gòu)、動(dòng)態(tài)鏈表下的一元多項(xiàng)式-程序設(shè)計(jì)報(bào)告_第4頁(yè)
順序結(jié)構(gòu)、動(dòng)態(tài)鏈表下的一元多項(xiàng)式-程序設(shè)計(jì)報(bào)告_第5頁(yè)
已閱讀5頁(yè),還剩10頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、精選優(yōu)質(zhì)文檔-傾情為你奉上中北大學(xué)數(shù) 據(jù) 結(jié) 構(gòu)課 程 設(shè) 計(jì) 說(shuō) 明 書(shū)   學(xué)生姓名: 席旺學(xué) 號(hào): 學(xué) 院:軟件學(xué)院專 業(yè):軟件工程題 目:順序結(jié)構(gòu)、動(dòng)態(tài)鏈表下的一元多項(xiàng)式指導(dǎo)教師何志英    2011年12月20日1. 設(shè)計(jì)任務(wù)概述(包括系統(tǒng)總體框圖及功能描述)在這次的課程設(shè)計(jì)中我選擇的題目是順序結(jié)構(gòu)、動(dòng)態(tài)鏈表結(jié)構(gòu)下的一元多項(xiàng)式的加法、減法、乘法的實(shí)現(xiàn)。分別采用順序結(jié)構(gòu)和鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu),利用多項(xiàng)得結(jié)果,最后得多項(xiàng)式中不含有重復(fù)階項(xiàng)和零系數(shù)得項(xiàng)。除此之外,還得分為降冪和升冪兩種排序方式。一元多項(xiàng)式相乘

2、一元多項(xiàng)式輸出一元多項(xiàng)式銷毀退出一元多項(xiàng)式創(chuàng)建一元多項(xiàng)式相加一元多項(xiàng)式的四則運(yùn)算一元多項(xiàng)式相減 一元多項(xiàng)式計(jì)算器模塊調(diào)用圖2.本設(shè)計(jì)所采用的數(shù)據(jù)結(jié)構(gòu)(如:鏈表、棧、樹(shù)、圖等)順序存儲(chǔ)結(jié)構(gòu)和鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)。3.功能模塊詳細(xì)設(shè)計(jì)本程序主要分為四大模塊:主程序模塊輸入模塊:通過(guò)Getpolyn函數(shù)輸入輸出模塊(升冪降冪):PrintPolyn函數(shù)實(shí)現(xiàn)輸出數(shù)據(jù)處理模塊(多項(xiàng)式的加減乘):通過(guò)一元多項(xiàng)式的Polynomial基本操作實(shí)現(xiàn)3.1 詳細(xì)設(shè)計(jì)思想動(dòng)態(tài)鏈表結(jié)構(gòu)下的一元多項(xiàng)式的加法、減法、乘法的實(shí)現(xiàn)。  設(shè)有一元多項(xiàng)式Am(x)和Bn(x).  Am(x)=A0+A1x1+A2x

3、2+A3x3+ +Amxm  Bn(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)輸入形式和輸入值范圍:輸入的系數(shù)為float類型,輸入的冪為int類型請(qǐng)選擇:1請(qǐng)輸入你要運(yùn)算的第一個(gè)一元多項(xiàng)式的項(xiàng)數(shù):2請(qǐng)輸入第1項(xiàng)的系數(shù)和指數(shù):系數(shù):1指數(shù):1請(qǐng)輸入第2項(xiàng)的系數(shù)和指數(shù):系數(shù):1指數(shù):2(2)輸出形式請(qǐng)選擇:5一元多項(xiàng)式A為:x+x2一元多項(xiàng)式B為:4x4+5x5+6x6(3)程序所能達(dá)到的功能1) 首先判定多項(xiàng)式是否稀疏;2)

4、0;采用動(dòng)態(tài)存儲(chǔ)結(jié)構(gòu)實(shí)現(xiàn);3) 結(jié)果M(x)中無(wú)重復(fù)階項(xiàng)和無(wú)零系數(shù)項(xiàng);4) 要求輸出結(jié)果的升冪和降冪兩種排列情況(4)測(cè)試數(shù)據(jù):包括正確地輸入及其輸出結(jié)果和含有錯(cuò)誤的輸入及其輸出結(jié)果。正確的輸入:請(qǐng)選擇:5一元多項(xiàng)式A為:x+x2一元多項(xiàng)式B為:4x4+5x5+6x6錯(cuò)誤的輸入:請(qǐng)輸入第1項(xiàng)的系數(shù)和指數(shù):系數(shù):1指數(shù):1請(qǐng)輸入第2項(xiàng)的系數(shù)和指數(shù):系數(shù):2指數(shù):1輸入的該項(xiàng)指數(shù)與多項(xiàng)式中已存在的某項(xiàng)相同,請(qǐng)重新創(chuàng)建一個(gè)正確的多項(xiàng)式請(qǐng)輸入第1項(xiàng)的系數(shù)和指數(shù):.3.2 核心代碼#include<stdio.h>#include<stdlib.h>typed

5、ef struct float coef; /系數(shù) int expn; /指數(shù)term;typedef struct LNode term data; /term多項(xiàng)式值 struct LNode *next;LNode,*LinkList;typedef LinkList polynomail;/*比較指數(shù)*/int cmp(term a,term b) if(a.expn>b.expn) return 1; if(a.expn=b.expn) return 0; if(a.expn<b.expn) return -1; else exit(-2);/*又小到大排列*/void

6、arrange1(polynomail pa) polynomail h=pa,p,q,r; if(pa=NULL) exit(-2); for(p=pa;p->next!=NULL;p=p->next); r=p; for(h=pa;h->next!=r;)/大的沉底 for(p=h;p->next!=r&&p!=r;p=p->next) if(cmp(p->next->data,p->next->next->data)=1) q=p->next->next; p->next->next=q-

7、>next; q->next=p->next; p->next=q; r=p;/r指向參與比較的最后一個(gè),不斷向前移動(dòng) /*由大到小排序*/void arrange2(polynomail pa) polynomail h=pa,p,q,r; if(pa=NULL) exit(-2); for(p=pa;p->next!=NULL;p=p->next); r=p; for(h=pa;h->next!=r;)/小的沉底 for(p=h;p->next!=r&&p!=r;p=p->next) if(cmp(p->next-

8、>next->data,p->next->data)=1) q=p->next->next; p->next->next=q->next; q->next=p->next; p->next=q; r=p;/r指向參與比較的最后一個(gè),不斷向前移動(dòng) /*打印多項(xiàng)式,求項(xiàng)數(shù)*/int printpolyn(polynomail P) int i; polynomail q; if(P=NULL) printf("無(wú)項(xiàng)!n"); else if(P->next=NULL) printf("Y=0

9、n"); else printf("該多項(xiàng)式為Y=");q=P->next;i=1; if(q->data.coef!=0&&q->data.expn!=0) printf("%.2fX%d",q->data.coef,q->data.expn); i+; if(q->data.expn=0&&q->data.coef!=0) printf("%.2f",q->data.coef);/打印第一項(xiàng) q=q->next; if(q=NULL)

10、printf("n");return 1; while(1)/while中,打印剩下項(xiàng)中系數(shù)非零的項(xiàng), if(q->data.coef!=0&&q->data.expn!=0) if(q->data.coef>0) printf("+"); printf("%.2fX%d",q->data.coef,q->data.expn); i+; if(q->data.expn=0&&q->data.coef!=0) if(q->data.coef>0)

11、 printf("+"); printf("%f",q->data.coef); q=q->next; if(q=NULL) printf("n"); break; return 1;/*1、創(chuàng)建并初始化多項(xiàng)式鏈表*/polynomail creatpolyn(polynomail P,int m) polynomail r,q,p,s,Q; int i; P=(LNode*)malloc(sizeof(LNode); r=P; for(i=0;i<m;i+) s=(LNode*)malloc(sizeof(LNod

12、e); printf("請(qǐng)輸入第%d項(xiàng)的系數(shù)和指數(shù):",i+1); scanf("%f%d",&s->data.coef,&s->data.expn); r->next=s; r=s; r->next=NULL; if(P->next->next!=NULL) for(q=P->next;q!=NULL/*&&q->next!=NULL*/;q=q->next)/合并同類項(xiàng) for(p=q->next,r=q;p!=NULL;) if(q->data.exp

13、n=p->data.expn) q->data.coef=q->data.coef+p->data.coef; r->next=p->next; Q=p;p=p->next; free(Q); else r=r->next; p=p->next; return P;/*2、兩多項(xiàng)式相加*/polynomail addpolyn(polynomail pa,polynomail pb) polynomail s,newp,q,p,r;int j; p=pa->next;q=pb->next; newp=(LNode*)malloc

14、(sizeof(LNode); r=newp; while(p&&q) s=(LNode*)malloc(sizeof(LNode); switch(cmp(p->data,q->data) case -1: s->data.coef=p->data.coef; s->data.expn=p->data.expn; r->next=s; r=s; p=p->next; break; case 0: s->data.coef=p->data.coef+q->data.coef; if(s->data.coef

15、!=0.0) s->data.expn=p->data.expn; r->next=s; r=s; p=p->next; q=q->next; break; case 1: s->data.coef=q->data.coef; s->data.expn=q->data.expn; r->next=s; r=s; q=q->next; break; /switch /while while(p) s=(LNode*)malloc(sizeof(LNode); s->data.coef=p->data.coef; s-&

16、gt;data.expn=p->data.expn; r->next=s; r=s; p=p->next; while(q) s=(LNode*)malloc(sizeof(LNode); s->data.coef=q->data.coef; s->data.expn=q->data.expn; r->next=s; r=s; q=q->next; r->next=NULL; for(q=newp->next;q->next!=NULL;q=q->next)/合并同類項(xiàng) for(p=q;p!=NULL&&am

17、p;p->next!=NULL;p=p->next) if(q->data.expn=p->next->data.expn) q->data.coef=q->data.coef+p->next->data.coef; r=p->next; p->next=p->next->next; free(r); printf("升序 1 , 降序 2n"); printf("選擇:"); scanf("%d",&j); if(j=1) arrange1(new

18、p); else arrange2(newp); return newp;/*3、兩多項(xiàng)式相減*/polynomail subpolyn(polynomail pa,polynomail pb) polynomail s,newp,q,p,r,Q; int j; p=pa->next;q=pb->next; newp=(LNode*)malloc(sizeof(LNode); r=newp; while(p&&q) s=(LNode*)malloc(sizeof(LNode); switch(cmp(p->data,q->data) case -1: s

19、->data.coef=p->data.coef; s->data.expn=p->data.expn; r->next=s; r=s; p=p->next; break; case 0: s->data.coef=p->data.coef-q->data.coef; if(s->data.coef!=0.0) s->data.expn=p->data.expn; r->next=s; r=s; p=p->next; q=q->next; break; case 1: s->data.coef=-q

20、->data.coef; s->data.expn=q->data.expn; r->next=s; r=s; q=q->next; break; /switch /while while(p) s=(LNode*)malloc(sizeof(LNode); s->data.coef=p->data.coef; s->data.expn=p->data.expn; r->next=s; r=s; p=p->next; while(q) s=(LNode*)malloc(sizeof(LNode); s->data.coef

21、=-q->data.coef; s->data.expn=q->data.expn; r->next=s; r=s; q=q->next; r->next=NULL; if(newp->next!=NULL&&newp->next->next!=NULL)/合并同類項(xiàng) for(q=newp->next;q!=NULL;q=q->next) for(p=q->next,r=q;p!=NULL;) if(q->data.expn=p->data.expn) q->data.coef=q->

22、;data.coef+p->data.coef; r->next=p->next; Q=p;p=p->next; free(Q); else r=r->next; p=p->next; printf("升序 1 , 降序 2n"); printf("選擇:"); scanf("%d",&j); if(j=1) arrange1(newp); else arrange2(newp); return newp;/*4兩多項(xiàng)式相乘*/polynomail mulpolyn(polynomail p

23、a,polynomail pb) polynomail s,newp,q,p,r; int i=20,j; newp=(LNode*)malloc(sizeof(LNode); r=newp; for(p=pa->next;p!=NULL;p=p->next) for(q=pb->next;q!=NULL;q=q->next) s=(LNode*)malloc(sizeof(LNode); s->data.coef=p->data.coef*q->data.coef; s->data.expn=p->data.expn+q->data

24、.expn; r->next=s; r=s; r->next=NULL; printf("升序 1 , 降序 2n"); printf("選擇:"); scanf("%d",&j); if(j=1) arrange1(newp); else arrange2(newp); for(;i!=0;i-) for(q=newp->next;q->next!=NULL;q=q->next)/合并同類項(xiàng) for(p=q;p!=NULL&&p->next!=NULL;p=p->ne

25、xt) if(q->data.expn=p->next->data.expn) q->data.coef=q->data.coef+p->next->data.coef; r=p->next; p->next=p->next->next; free(r); return newp;/*5、銷毀已建立的兩個(gè)多項(xiàng)式*/void delpolyn(polynomail pa,polynomail pb) polynomail p,q; p=pa; while(p!=NULL) q=p; p=p->next; free(q); p

26、=pb; while(p!=NULL) q=p; p=p->next; free(q); printf("兩個(gè)多項(xiàng)式已經(jīng)銷毀n");void main() polynomail pa=NULL,pb=NULL; polynomail p,q; polynomail addp=NULL,subp=NULL,mulp=NULL; int n,m; int sign='y' printf("1、創(chuàng)建兩個(gè)一元多項(xiàng)式n"); printf("2、兩多項(xiàng)式相加得一新多項(xiàng)式n"); printf("3、兩多項(xiàng)式相減得

27、一新多項(xiàng)式n"); printf("4、兩多項(xiàng)式相乘得一新多項(xiàng)式n"); printf("5、銷毀已建立的兩個(gè)多項(xiàng)式n"); printf("6、退出n"); printf("n"); while(sign!='n') printf("請(qǐng)選擇:"); scanf("%d",&n); switch(n) case 1: if(pa!=NULL) printf("已建立兩個(gè)一元多項(xiàng)式,請(qǐng)選擇其他操作!"); break; pr

28、intf("請(qǐng)輸入第一個(gè)多項(xiàng)式:n"); printf("要輸入幾項(xiàng):"); scanf("%d",&m); while(m=0) printf("m不能為0,請(qǐng)重新輸入m:"); scanf("%d",&m); pa=creatpolyn(pa,m); printpolyn(pa); printf("請(qǐng)輸入第二個(gè)多項(xiàng)式:n"); printf("要輸入幾項(xiàng):"); scanf("%d",&m); pb=creatpolyn(pb,m); printpolyn(pb); break; case 2: if(pa=NULL) printf("請(qǐng)先創(chuàng)建兩個(gè)一元多項(xiàng)式!n"); break; addp=addpolyn(pa,pb); printpolyn(addp

溫馨提示

  • 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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論