版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
PAGEPAGE2數(shù)據(jù)結(jié)構(gòu)與算法課程設(shè)計(jì)說(shuō)明書
設(shè)計(jì)題目:一元多項(xiàng)式的加法.減法的實(shí)現(xiàn)需求分析功能:首先建立一個(gè)有序鏈表,輸入一個(gè)多項(xiàng)式,進(jìn)行降冪排列。接著判斷進(jìn)行加減乘哪種運(yùn)算,再輸入一個(gè)多項(xiàng)式進(jìn)行運(yùn)算.2概要設(shè)計(jì)a.建立多項(xiàng)式鏈表輸入m項(xiàng)的系數(shù)和指數(shù),建立表示一元多項(xiàng)式的有序鏈表P。依次輸入m個(gè)非零項(xiàng),生成結(jié)點(diǎn)并插入鏈表。再在界面上輸入n個(gè)非零項(xiàng)的系數(shù)和指數(shù)structterm*CreatPolyn(structterm*P,intm){//輸入m項(xiàng)的系數(shù)和指數(shù),建立表示一元多項(xiàng)式的有序鏈表Pinti; structterm*h=P=(structterm*)malloc(sizeof(structterm)),*q;if(m<=0)returnNULL;P->coef=0.0;printf("依次輸入%d個(gè)非零項(xiàng)\n",m);for(i=1;i<=m;++i){//依次輸入m個(gè)非零項(xiàng)scanf("%f%d",&P->coef,&P->expn);if(P->coef)q=P;P=P->next=(structterm*)malloc(sizeof(structterm));}q->next=NULL;free(P);returnh;}//CreatPolynb.多項(xiàng)式加法利用兩個(gè)多項(xiàng)式的結(jié)點(diǎn)構(gòu)成“和多項(xiàng)式”,Pa=Pa+Pb.structterm*APolyn(structterm*Pa,structterm*Pb){//多項(xiàng)式加法:Pa=Pa+Pb,利用兩個(gè)多項(xiàng)式的結(jié)點(diǎn)構(gòu)成"和多項(xiàng)式"。structterm*h,*qa=Pa,*qb=Pb,*p,*q;floatsum;h=p=(structterm*)malloc(sizeof(structterm));p->next=NULL;while(qa&&qb){//Pa和Pb均非空switch(Compare(qa,qb)){case-1://多項(xiàng)式PA中當(dāng)前結(jié)點(diǎn)的指數(shù)值小p->next=qb;p=qb;qb=qb->next;break;case0://兩者的指數(shù)值相等sum=qa->coef+qb->coef;if(sum!=0.0){//修改多項(xiàng)式PA中當(dāng)前結(jié)點(diǎn)的系數(shù)值p->next=qa;qa->coef=sum;p=qa;qa=qa->next;}else{//刪除多項(xiàng)式PA中當(dāng)前結(jié)點(diǎn)q=qa;qa=qa->next;free(q);}q=qb;qb=qb->next;free(q);break;case1://多項(xiàng)式PB中當(dāng)前結(jié)點(diǎn)的指數(shù)值小p->next=qa;p=qa;qa=qa->next;break;}//switch}//whileif(Pa)p->next=qa;//鏈接Pa中剩余結(jié)點(diǎn)if(Pb)p->next=qb;//鏈接Pb中剩余結(jié)點(diǎn)q=h;h=h->next;free(q);returnh;}//APolync.多項(xiàng)式減法Pa=Pa-Pb,利用兩個(gè)多項(xiàng)式的結(jié)點(diǎn)構(gòu)成"差多項(xiàng)式"。structterm*BPolyn(structterm*Pa,structterm*Pb){//多項(xiàng)式減法:Pa=Pa-Pb,利用兩個(gè)多項(xiàng)式的結(jié)點(diǎn)構(gòu)成"差多項(xiàng)式"。structterm*p=Pb;while(p){p->coef*=-1;p=p->next;}returnAPolyn(Pa,Pb);}//BPolynd.多項(xiàng)式乘法多項(xiàng)式乘法:Pa=Pa*Pb,利用兩個(gè)多項(xiàng)式的結(jié)點(diǎn)構(gòu)成"積多項(xiàng)式"。tructterm*CPolyn(structterm*Pa,structterm*Pb){//多項(xiàng)式乘法:Pa=Pa*Pb,利用兩個(gè)多項(xiàng)式的結(jié)點(diǎn)構(gòu)成"積多項(xiàng)式"。structterm*pa=Pa,*p,*q,*r,*s,*t;r=p=(structterm*)malloc(sizeof(structterm));if(!Pb)returnNULL;while(pa){p->coef=pa->coef;p->expn=pa->expn;q=p;p=p->next=(structterm*)malloc(sizeof(structterm));pa=pa->next;}q->next=NULL;free(p);pa=Pa;t=s=(structterm*)malloc(sizeof(structterm));while(pa){q=s;s=s->next=(structterm*)malloc(sizeof(structterm));pa=pa->next;}q->next=NULL;free(s);pa=Pa;while(pa){pa->coef*=Pb->coef;pa->expn+=Pb->expn;pa=pa->next;}Pb=Pb->next;while(Pb){p=r;s=t;while(p){s->coef=p->coef*Pb->coef;s->expn=p->expn+Pb->expn;p=p->next;s=s->next;}Pa=APolyn(Pa,t);Pb=Pb->next;}returnPa;}//CPolyne.主函數(shù)建立主函數(shù)界面,實(shí)現(xiàn)加、減、乘主要功能。界面運(yùn)算由輸入第一個(gè)一元多項(xiàng)式開(kāi)始,逐步實(shí)現(xiàn)多項(xiàng)式計(jì)算。voidmain(){structterm*M,*N;chars[2];inti,n;puts("一元多項(xiàng)式計(jì)算:\n輸入一一元多項(xiàng)式的項(xiàng)數(shù)");scanf("%d",&n);M=CreatPolyn(M,n);M=selsort(M);PrintfPoly(M);p:puts("\n1:加\n2:減\n3:乘\n4:退出");getchar();q:gets(s);if(s[1]!='\0'||!isdigit(*s)){puts("輸入有誤,請(qǐng)重新輸入!");gotoq;}i=*s-48;switch(i){case1:M=A(M,N);gotop;;case2:M=B(M,N);gotop;;case3:M=C(M,N);gotop;case4:break;default:puts("輸入有誤,請(qǐng)重新輸入!");gotoq;}}3詳細(xì)設(shè)計(jì)#include<stdlib.h>#include<stdio.h>#include<ctype.h>typedefstructterm{//項(xiàng)的表示,多項(xiàng)式的項(xiàng)作為L(zhǎng)inkList的數(shù)據(jù)元素floatcoef;//系數(shù)intexpn;//指數(shù)structterm*next;}term;structterm*CreatPolyn(structterm*P,intm){//輸入m項(xiàng)的系數(shù)和指數(shù),建立表示一元多項(xiàng)式的有序鏈表Pinti;structterm*h=P=(structterm*)malloc(sizeof(structterm)),*q;if(m<=0)returnNULL;P->coef=0.0;printf("依次輸入%d個(gè)非零項(xiàng)\n",m);for(i=1;i<=m;++i){//依次輸入m個(gè)非零項(xiàng)scanf("%f%d",&P->coef,&P->expn);if(P->coef)q=P;P=P->next=(structterm*)malloc(sizeof(structterm));}q->next=NULL;free(P);returnh;}//CreatPolynstructterm*selsort(structterm*h){structterm*g,*p,*q;floatf;inti,fini=1;if(!h)returnNULL;for(g=h;g->next&&fini;g=g->next){fini=0;for(p=h,q=h->next;q;p=p->next,q=q->next)if(p->expn<q->expn){f=p->coef;i=p->expn;p->coef=q->coef;p->expn=q->expn;q->coef=f;q->expn=i;fini=1;}}for(g=h,p=g->next;p;)if(g->expn==p->expn){g->coef+=p->coef;g->next=p->next;q=p;p=p->next;free(q);}elseif(g->next){g=g->next;p=p->next;}returnh;}PrintfPoly(structterm*P){structterm*q=P;if(!q){putchar('0');return;}if(q->coef!=1){printf("%g",q->coef);if(q->expn==1)putchar('X');elseif(q->expn)printf("X^%d",q->expn);}elseif(!q->expn)putchar('1');elseif(q->expn==1)putchar('X');elseprintf("X^%d",q->expn);q=q->next;while(q){if(q->coef>0)putchar('+');if(q->coef!=1){printf("%g",q->coef);if(q->expn==1)putchar('X');elseif(q->expn)printf("X^%d",q->expn);}elseif(!q->expn)putchar('1');elseif(q->expn==1)putchar('X');elseprintf("X^%d",q->expn);q=q->next;}}Compare(structterm*a,structterm*b){if(a->expn<b->expn)return-1;if(a->expn>b->expn)return1;return0;}structterm*APolyn(structterm*Pa,structterm*Pb){//多項(xiàng)式加法:Pa=Pa+Pb,利用兩個(gè)多項(xiàng)式的結(jié)點(diǎn)構(gòu)成"和多項(xiàng)式"。structterm*h,*qa=Pa,*qb=Pb,*p,*q;floatsum;h=p=(structterm*)malloc(sizeof(structterm));p->next=NULL;while(qa&&qb){//Pa和Pb均非空switch(Compare(qa,qb)){case-1://多項(xiàng)式PA中當(dāng)前結(jié)點(diǎn)的指數(shù)值小p->next=qb;p=qb;qb=qb->next;break;case0://兩者的指數(shù)值相等sum=qa->coef+qb->coef;if(sum!=0.0){//修改多項(xiàng)式PA中當(dāng)前結(jié)點(diǎn)的系數(shù)值p->next=qa;qa->coef=sum;p=qa;qa=qa->next;}else{//刪除多項(xiàng)式PA中當(dāng)前結(jié)點(diǎn)q=qa;qa=qa->next;free(q);}q=qb;qb=qb->next;free(q);break;case1://多項(xiàng)式PB中當(dāng)前結(jié)點(diǎn)的指數(shù)值小p->next=qa;p=qa;qa=qa->next;break;}//switch}//whileif(Pa)p->next=qa;//鏈接Pa中剩余結(jié)點(diǎn)if(Pb)p->next=qb;//鏈接Pb中剩余結(jié)點(diǎn)q=h;h=h->next;free(q);returnh;}//APolynstructterm*A(structterm*Pa,structterm*Pb){intn;puts("再輸入一一元多項(xiàng)式的項(xiàng)數(shù)");scanf("%d",&n);Pb=CreatPolyn(Pb,n);Pb=selsort(Pb);PrintfPoly(Pa);if(Pb&&Pb->coef>0)printf("+");PrintfPoly(Pb);Pa=APolyn(Pa,Pb);printf("=");Pa=selsort(Pa);PrintfPoly(Pa);returnPa;}structterm*BPolyn(structterm*Pa,structterm*Pb){//多項(xiàng)式減法:Pa=Pa-Pb,利用兩個(gè)多項(xiàng)式的結(jié)點(diǎn)構(gòu)成"差多項(xiàng)式"。structterm*p=Pb;while(p){p->coef*=-1;p=p->next;}returnAPolyn(Pa,Pb);}//BPolynstructterm*B(structterm*Pa,structterm*Pb){intn;puts("再輸入一一元多項(xiàng)式的項(xiàng)數(shù)");scanf("%d",&n);Pb=CreatPolyn(Pb,n);Pb=selsort(Pb);PrintfPoly(Pa);printf("-");putchar('(');PrintfPoly(Pb);putchar(')');Pa=BPolyn(Pa,Pb);printf("=");Pa=selsort(Pa);PrintfPoly(Pa);returnPa;}structterm*CPolyn(structterm*Pa,structterm*Pb){//多項(xiàng)式乘法:Pa=Pa*Pb,利用兩個(gè)多項(xiàng)式的結(jié)點(diǎn)構(gòu)成"積多項(xiàng)式"。structterm*pa=Pa,*p,*q,*r,*s,*t;r=p=(structterm*)malloc(sizeof(structterm));if(!Pb)returnNULL;while(pa){p->coef=pa->coef;p->expn=pa->expn;q=p;p=p->next=(structterm*)malloc(sizeof(structterm));pa=pa->next;}q->next=NULL;free(p);pa=Pa;t=s=(structterm*)malloc(sizeof(structterm));while(pa){q=s;s=s->next=(structterm*)malloc(sizeof(structterm));pa=pa->next;}q->next=NULL;free(s);pa=Pa;while(pa){pa->coef*=Pb->coef;pa->expn+=Pb->expn;pa=pa->next;}Pb=Pb->next;while(Pb){p=r;s=t;while(p){s->coef=p->coef*Pb->coef;s->expn=p->expn+Pb->expn;p=p->next;s=s->next;}Pa=APolyn(Pa,t);Pb=Pb->next;}returnPa;}//CPolynstructterm*C(structterm*Pa,structterm*Pb){intn;puts("再輸入一一元多項(xiàng)式的項(xiàng)數(shù)");s
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- APP運(yùn)營(yíng)專員招聘面試題及答案
- “夢(mèng)工場(chǎng)”招商銀行南通分行2026寒假實(shí)習(xí)生招聘?jìng)淇碱}庫(kù)附答案
- 中共贛州市贛縣區(qū)委政法委下屬事業(yè)單位面向全區(qū)選調(diào)工作人員參考題庫(kù)附答案
- 樂(lè)山市公安局2025年第四批次警務(wù)輔助人員招聘(40人)考試備考題庫(kù)必考題
- 北京市石景山區(qū)教育系統(tǒng)教育人才庫(kù)教師招聘?jìng)淇碱}庫(kù)附答案
- 山東高速集團(tuán)有限公司2025年下半年校園招聘(339人) 考試備考題庫(kù)附答案
- 廣安市關(guān)于2025年社會(huì)化選聘新興領(lǐng)域黨建工作專員的考試備考題庫(kù)必考題
- 永豐縣2025年退役士兵選調(diào)考試【25人】考試備考題庫(kù)必考題
- 浙江國(guó)企招聘-2025杭州臨平環(huán)境科技有限公司公開(kāi)招聘49人參考題庫(kù)附答案
- 滎經(jīng)縣財(cái)政局關(guān)于滎經(jīng)縣縣屬國(guó)有企業(yè)2025年公開(kāi)招聘工作人員的(14人)參考題庫(kù)附答案
- 2025年溫州肯恩三位一體筆試英語(yǔ)真題及答案
- 云南師大附中2026屆高三高考適應(yīng)性月考卷(六)歷史試卷(含答案及解析)
- PCR技術(shù)在食品中的應(yīng)用
- 輸液滲漏處理課件
- 教育培訓(xùn)行業(yè)發(fā)展趨勢(shì)與機(jī)遇分析
- 2025醫(yī)療器械經(jīng)營(yíng)質(zhì)量管理體系文件(全套)(可編輯?。?/a>
- 物業(yè)與商戶裝修協(xié)議書
- 湖南鐵道職業(yè)技術(shù)學(xué)院2025年單招職業(yè)技能測(cè)試題
- GB/T 46318-2025塑料酚醛樹(shù)脂分類和試驗(yàn)方法
- 果農(nóng)水果出售合同范本
- 小學(xué)三年級(jí)數(shù)學(xué)選擇題專項(xiàng)測(cè)試100題帶答案
評(píng)論
0/150
提交評(píng)論