




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、精選優(yōu)質(zhì)文檔-傾情為你奉上實習(xí)1、一元稀疏多項式計算器一、 需求分析1. 問題描述設(shè)計一個一元稀疏多項式簡單計算器。2. 基本要求 一元稀疏多項式簡單計算器的基本功能是:(1)輸入并建立多項式。(2)輸出多項式,輸出形式為整數(shù)序列:n, c1, e1, c2, e2, ········,cn, en ,其中n是多項式的項數(shù),ci,ei分別是第i項的系數(shù)和指數(shù),序列按指數(shù)降序排列。(3)多項式a和b想加,建立多項式a+b 。(4)多項式a和b想減,建立多項式a-b 。3. 測試數(shù)據(jù) (1) (2x+5x8-3.1x1
2、1)+(7-5x8+11x9)=(-3.1x11+11x9+2x+7) (2) (6x-3-x+4.4x2-1.2x9)-(-6x-3+5.4x2-x2+7.8x15)=(-7.8x15-1.2x9+12x-3-x) (3) (1+x+x2+x3+x4+x5)+(-x3-x4)=(1+x+x2+x5) (4) (x+x3)+(-x-x3)=0 (5) (x+x100)+(x100+x200)=(x+2x100+x200) (6) (x+x2+x3)+0=(x+x2+x3) (7) 互換測試數(shù)據(jù)的前后兩個多項式。4. 實現(xiàn)提示 用帶表頭結(jié)點的單鏈表存儲多項式。二、概要設(shè)計為實現(xiàn)上述程序功能,應(yīng)用
3、帶頭結(jié)點的單鏈表存儲多項式。為此需要一個抽象數(shù)據(jù)類型:一元多項式。1.抽象數(shù)據(jù)類型一元多項式定義為:ATD Ploynomial 數(shù)據(jù)對象:D=ai|aiTermset, i=1,2,3···,m,m0 Termset中的每個元素包含一個表示系數(shù)的實數(shù)和表示指數(shù)的整數(shù)數(shù)據(jù)關(guān)系:R1=<ai-1,ai>ai-1,aiD,且ai-1中的指數(shù)<ai中的指數(shù)的值,i=1,2,3···n基本操作:Insert(p,h)初始條件:h已存在。操作結(jié)果:插入p項。CreateLinklist(head, m)操作結(jié)果:建立一個頭指針
4、為head、項數(shù)為m的一元多項式。DestroyLinklist( p)初始條件:一元多項式p已存在。操作結(jié)果:銷毀一元多項式p。PrintLinklist( P)初始條件:一元多項式p已存在。操作結(jié)果:輸出一元多項式p。Compare(a,b) 初始條件:項a,b已存在。操作結(jié)果:比較a,b中x的指數(shù)的大小。 AddLinklist(pa,pb)初始條件:一元多項式pa,pb已存在。操作結(jié)果:完成一元多項式pa,pb的相加運算。SubtractionLinklist(Sa,Sb) 初始條件:一元多項式Sa,Sb已存在。操作結(jié)果:完成一元多項式Sa,Sb的相減運算。 ATD Ploynomia
5、l三、詳細(xì)設(shè)計(源代碼)(使用C語言)#include<stdio.h>#include<malloc.h>#define maxlen 10#define large 999typedef struct Linklistomial float coef; int expn; struct Linklistomial *next;Linklistomial,*Linklist;/結(jié)點類型,指針類型void Insert(Linklist p,Linklist h)/ h已存在插入p項 if(p->coef=0) free(p);/系數(shù)為0的話釋放結(jié)點 else L
6、inklist q1,q2; q1=h; q2=h->next; while(q2&&p->expn<q2->expn) /查找插入位置 q1=q2; q2=q2->next; if(q2&&p->expn=q2->expn) /將指數(shù)相同相合并 q2->coef+=p->coef; free(p); if(!q2->coef) /系數(shù)為0的話釋放結(jié)點 q1->next=q2->next; free(q2); else /指數(shù)為新時將結(jié)點插入 p->next=q2; q1->ne
7、xt=p; Linklist CreateLinklist(Linklist head,int m)/建立一個頭指針為head、項數(shù)為m的一元多項式 int i; Linklist p; p=head=(Linklist)malloc(sizeof(struct Linklistomial); head->next=NULL; for(i=0;i<m;i+) p=(Linklist)malloc(sizeof(struct Linklistomial);/建立新結(jié)點以接收數(shù)據(jù) printf("請輸入第%d項的系數(shù)與指數(shù):",i+1); scanf("%
8、f %d",&p->coef,&p->expn); Insert(p,head); /調(diào)用Insert函數(shù)插入結(jié)點 return head;void DestroyLinklist(Linklist p)/銷毀多項式p Linklist D1,D2; D1=p; while(D1) D2=D1->next; free(D1); D1=D2; void PrintLinklist(Linklist P)/輸出一元多項式p Linklist q=P->next; int flag=1; /項數(shù)計數(shù)器 if(!q) /若多項式為空,輸出0 putch
9、ar('0'); printf("n"); return; while(q) if(q->coef>0&&flag!=1) putchar('+'); /系數(shù)大于0且不是第一項 if(q->coef!=1&&q->coef!=-1) /系數(shù)非1或-1的普通情況 printf("%g",q->coef); if(q->expn=1) putchar('X'); else if(q->expn) printf("X%d"
10、;,q->expn); else if(q->coef=1) if(!q->expn) putchar('1'); else if(q->expn=1) putchar('X'); else printf("X%d",q->expn); if(q->coef=-1) if(!q->expn) printf("-1"); else if(q->expn=1) printf("-X"); else printf("-X%d",q->e
11、xpn); q=q->next; flag+; printf("n");int Compare(Linklist a,Linklist b)/比較a,b中x的指數(shù)的大小 if(a&&b) if(!b|a->expn>b->expn) return 1; else if(!a|a->expn<b->expn) return -1; else return 0; else if(!a&&b)/a多項式已空,但b多項式非空 return -1; else/b多項式已空,但a多項式非空 return 1;Li
12、nklist AddLinklist(Linklist pa,Linklist pb)/求解并建立多項式a+b,返回其頭指針 Linklist qa=pa->next; Linklist qb=pb->next; Linklist headc,hc,qc; hc=(Linklist)malloc(sizeof(struct Linklistomial);/建立頭結(jié)點 hc->next=NULL; headc=hc; while(qa|qb) qc=(Linklist)malloc(sizeof(struct Linklistomial); switch(Compare(qa,
13、qb) case 1: qc->coef=qa->coef; qc->expn=qa->expn; qa=qa->next; break; case 0: qc->coef=qa->coef+qb->coef; qc->expn=qa->expn; qa=qa->next; qb=qb->next; break; case -1: qc->coef=qb->coef; qc->expn=qb->expn; qb=qb->next; break; if(qc->coef!=0) qc-&g
14、t;next=hc->next; hc->next=qc; hc=qc; else free(qc);/當(dāng)相加系數(shù)為0時,釋放該結(jié)點 return headc;Linklist SubtractionLinklist(Linklist Sa,Linklist Sb)/求解并建立多項式a-b,返回其頭指針 Linklist Cb=Sb->next; while(Cb) Cb->coef=(-1)*Cb->coef; Cb=Cb->next; return AddLinklist(Sa,Sb);int main() int m,n,a=1; char flag;
15、 Linklist pa=0,pb=0,pc; printf(" 歡迎使用一元多項式加法器nn");/輸出菜單 printf(" *n"); printf(" * 一元多項式簡單運算器 *n"); printf(" * *n"); printf(" * A: 輸入多項式a B: 輸入多項式b *n"); printf(" * *n"); printf(" * C: 輸出多項式a D: 輸出多項式b *n"); printf(" * *n"
16、;); printf(" * E: 輸出a+b F: 輸出a-b *n"); printf(" * *n"); printf(" * G: 使用完畢! *n"); printf(" *n"); while(a) printf("n 請選擇操作:"); scanf(" %c",&flag);/空格符號一定要注意 switch(flag) case'A': case'a': printf("下面進(jìn)行多項式a的輸入:n")
17、; printf("請輸入a的項數(shù):"); scanf("%d",&m); pa=CreateLinklist(pa,m);/建立多項式a break; case'B': case'b': printf("下面進(jìn)行多項式b的輸入:n"); printf("請輸入b的項數(shù):"); scanf("%d",&n); pb=CreateLinklist(pb,n);/建立多項式b break; case'C': case'c': printf("n 多項式a="); PrintLinklist(pa); break; case'D': case'd': printf("n 多項式b="); PrintLinklist(pb); break; case'E': case'e': pc=AddLinklist(pa,pb); printf("n a+b="); PrintLinklist(pc); break; case'F': case'f': pc=Subt
溫馨提示
- 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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 步行街個人店鋪租賃合同書
- 區(qū)商貿(mào)城商鋪租賃合同
- 健身場地租賃合同
- 農(nóng)副產(chǎn)品購銷合同
- 土地租賃建房合同
- 借款抵押擔(dān)保合同
- 停車位代理銷售合同
- 知識產(chǎn)權(quán)專項法律服務(wù)合同
- 焦作師范高等專科學(xué)?!陡郀柗蚯蚓呔S護(hù)》2023-2024學(xué)年第二學(xué)期期末試卷
- 長沙航空職業(yè)技術(shù)學(xué)院《廣播電視技術(shù)實務(wù)》2023-2024學(xué)年第二學(xué)期期末試卷
- 河北省高等職業(yè)院校技能大賽關(guān)務(wù)實務(wù)賽項參考試題及答案
- 《fema失效模式分析》課件
- 聯(lián)合救治房顫患者的協(xié)議書
- 企業(yè)自查報告范文
- 沐足店長合同范例
- 母嬰護(hù)理的職業(yè)道德
- 《商務(wù)溝通-策略、方法與案例》課件 第二章 口頭溝通
- 運灰安全管理制度模版(2篇)
- 2024年生態(tài)環(huán)境局公務(wù)員考試600題內(nèi)部選題庫(A卷)
- 2024年湖南省公務(wù)員錄用考試《行測》真題及答案解析
- 工商企業(yè)管理畢業(yè)論文的范文
評論
0/150
提交評論