版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 企業(yè)文化宣傳合同范例
- 農(nóng)村裝修貸款合同范本
- 2021-2026年中國(guó)電力維護(hù)合板市場(chǎng)競(jìng)爭(zhēng)策略及行業(yè)投資潛力預(yù)測(cè)報(bào)告
- 中醫(yī)私承合同范本
- 一租房合同范本個(gè)人
- 獸藥代加工合同范本
- 上海汽車租車合同范本
- 保潔補(bǔ)簽合同范本
- 2025年度酒水行業(yè)知識(shí)產(chǎn)權(quán)保護(hù)與糾紛解決合同范本
- 勞務(wù)公司之間合同范本
- 廣東大灣區(qū)2024-2025學(xué)年度高一上學(xué)期期末統(tǒng)一測(cè)試英語(yǔ)試題(無(wú)答案)
- 失效模式和效應(yīng)分析護(hù)理
- 2025年四川中煙工業(yè)限責(zé)任公司招聘110人高頻重點(diǎn)提升(共500題)附帶答案詳解
- 2025年山東菏澤投資發(fā)展集團(tuán)限公司招聘61人管理單位筆試遴選500模擬題附帶答案詳解
- 2025山東能源集團(tuán)新能源限公司招聘12人管理單位筆試遴選500模擬題附帶答案詳解
- 課題申報(bào)書(shū):反饋對(duì)青少年努力投入的影響機(jī)制及干預(yù)研究
- 康復(fù)評(píng)定頸椎病
- 公司章程范本(完整版)
- 廠房委托經(jīng)營(yíng)管理合同范本
- 高中語(yǔ)文《記念劉和珍君》隨堂練習(xí)(含答案)
- 部編教材《村居》《詠柳》1-古詩(shī)兩首名師公開(kāi)課獲獎(jiǎng)?wù)n件百校聯(lián)賽一等獎(jiǎng)?wù)n件
評(píng)論
0/150
提交評(píng)論