版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
實驗一一元多項式的運算問題定義及需求分析1.1課題目的和任務(wù)問題描述:設(shè)計一個一元多項式簡單計算器。實驗要求:1)采用順序表或鏈表等數(shù)據(jù)結(jié)構(gòu)。2)輸入并建立多項式。3)輸出運算結(jié)果的多項式。1.2數(shù)據(jù)形式輸入數(shù)據(jù)形式:通過鍵盤輸入。輸入值的范圍:多項式的項數(shù)和指數(shù)的輸入數(shù)據(jù)為int型,輸入值范圍為-32768至32767;多項式系數(shù)的輸入值范圍為float型,范圍為1.2e-38至3.4e+38。輸出數(shù)據(jù)形式:輸出到顯示器。1.3程序功能實現(xiàn)兩個一元多項式之間的加法、減法和乘法運算。1.4測試數(shù)據(jù)4//第一個多項式的項數(shù)14//第一項的系數(shù)和指數(shù)33//第二項的系數(shù)和指數(shù)-22//第三項的系數(shù)和指數(shù)60//第四項的系數(shù)和指數(shù)5//第二個多項式的項數(shù)-35//第一項的系數(shù)和指數(shù)22//第二項的系數(shù)和指數(shù)-60//第三項的系數(shù)和指數(shù)-1-1//第四項的系數(shù)和指數(shù)1.2-2//第五項的系數(shù)和指數(shù)概要設(shè)計2.1抽象數(shù)據(jù)類型需要定義一個多項式類型的數(shù)據(jù)類型,里面包含一個int型的指數(shù)和一個float型的系數(shù),再定義一個多項式節(jié)點,里面包含一個多項式類型的數(shù)據(jù),和一個指向下一個節(jié)點的指針。通過對多項式節(jié)點的操作,實現(xiàn)對輸入數(shù)據(jù)的運算。2.2主程序流程及各模塊之間的調(diào)用關(guān)系多項式排序(冒泡排序)附錄7.1個人負(fù)責(zé)模塊的程序代碼intMultiplyPolyn(polynomial&a,polynomial&b){//多項式相乘//將a的每項分別和b所有項相乘,再將它們相加voidSort(polynomial&L);//函數(shù)聲明voidDestroyPolyn(polynomial&);polynomialha=NULL,hb=NULL,c=NULL;Polye;if(a->next==NULL||b->next==NULL){return0;}//若多項式中無項,則返回c=(polynomial)malloc(sizeof(LNode));//開辟c,存儲第一次運算結(jié)果c->next=NULL;ha=a->next;hb=b->next;for(;hb!=NULL;hb=hb->next){//將b中每項都與a的第一項相乘e.coef=(ha->data.coef)*(hb->data.coef);e.expn=(ha->data.expn)+(hb->data.expn);polynomialE=NULL;E=(polynomial)malloc(sizeof(LNode));E->data.coef=e.coef;E->data.expn=e.expn;E->next=c->next;c->next=E;//將每項結(jié)果保存在c中}Sort(c);//對c中項的指數(shù)進(jìn)行排序處理ha=ha->next;//指向下一項while(ha!=NULL){//將a中其余各項分別與b中各項相乘hb=b->next;polynomiald;d=(polynomial)malloc(sizeof(LNode));d->next=NULL;for(;hb!=NULL;hb=hb->next){//用d儲存a中后一項和b中所有項的乘積e.coef=(ha->data.coef)*(hb->data.coef);e.expn=(ha->data.expn)+(hb->data.expn);polynomialE=NULL;E=(polynomial)malloc(sizeof(LNode));E->data.coef=e.coef;E->data.expn=e.expn;E->next=d->next;d->next=E;}Sort(d);ha=ha->next;AddPolyn(c,d);//將c,d兩項相加,得到合并后的c}polynomialt=a;a=c;DestroyPolyn(b);//銷毀臨時存儲空間DestroyPolyn(t);return1;}voidDestroyPolyn(polynomial&L){//銷毀線性表while(L!=NULL){polynomialp;p=L;L=L->next;free(p);}}voidSort(polynomial&L){//冒泡排序polynomiali,j;for(i=L;i->next!=NULL;i=i->next){//總次數(shù)for(j=L;j->next->next!=NULL;j=j->next){//第一趟if(j->next->data.expn<j->next->next->data.expn){//比較大小,將大的冒到前面polynomialp,q;p=j->next;q=j->next->next;p->next=q->next;q->next=p;j->next=q;}}}}7.2程序全部代碼#include<stdio.h>#include<iostream>#include<stdlib.h>#defineTRUE1;#defineFALSE0;usingnamespacestd;typedefstruct{floatcoef;intexpn;}Poly;typedefstructLNode{Polydata;structLNode*next;}LNode,*LinkList;typedefLinkListpolynomial;intmain(){//主函數(shù)//函數(shù)聲明voidCreatPolyn(polynomial&,int);voidDestroyPolyn(polynomial&);voidconstPrintPolyn(polynomial);intAddPloyn(polynomial&,polynomial&);intSubtractPloyn(polynomial&,polynomial&);intMultiplyPloyn(polynomial&,polynomial&);voidMenu(polynomial&,polynomial&);//定義intn=1;while(n>=0){polynomiala;polynomialb;system("cls");printf("請輸入第一個多項式的項數(shù)(輸入負(fù)數(shù)退出):");scanf("%d",&n);if(n<0)exit(0);CreatPolyn(a,n);PrintPolyn(a);printf("請輸入第二個多項式的項數(shù)(輸入負(fù)數(shù)退出):");scanf("%d",&n);if(n<0)exit(0);CreatPolyn(b,n);PrintPolyn(b);//菜單Menu(a,b);//銷毀線性表DestroyPolyn(a);}return0;}voidMenu(polynomial&a,polynomial&b){//菜單intAddPolyn(polynomial&,polynomial&);intSubtractPolyn(polynomial&,polynomial&);intMultiplyPolyn(polynomial&,polynomial&);voidconstPrintPolyn(polynomial);intn=0;printf("1.多項式相加\n2.多項式相減\n3.多項式相乘\n");scanf("%d",&n);switch(n){case1:AddPolyn(a,b);printf("Answer=");PrintPolyn(a);system("pause");break;case2:SubtractPolyn(a,b);printf("Answer=");PrintPolyn(a);system("pause");break;case3:if(MultiplyPolyn(a,b)){printf("Answer=");PrintPolyn(a);}elseprintf("Answer=0\n");system("pause");break;default:break;}}voidCreatPolyn(polynomial&L,intn){//創(chuàng)建多項式voidSort(polynomial&L);L=(polynomial)malloc(sizeof(LNode));L->next=NULL;Polye;inti=1;for(;n>0;n--,i++){printf("請輸入第%d",i);printf("項的系數(shù)和指數(shù):");scanf("%f%d",&e.coef,&e.expn);polynomialE=NULL;E=(polynomial)malloc(sizeof(LNode));E->data.coef=e.coef;E->data.expn=e.expn;E->next=L->next;L->next=E;}Sort(L);}intSubtractPolyn(polynomial&Pa,polynomial&Pb){//多項式減法:Pa=Pa-Pb polynomialha=NULL,hb=NULL,p=NULL;ha=Pa;hb=Pb; if(ha->next==NULL){Pa=Pb;free(ha);return0;} else{ while(hb->next!=NULL) { if(ha->next->data.expn<hb->next->data.expn){polynomialp,q;p=hb->next;q=p->next;p->data.coef=0-p->data.coef;p->next=ha->next;ha->next=p;hb->next=q;ha=ha->next; } elseif(ha->next->data.expn==hb->next->data.expn){ha->next->data.coef=ha->next->data.coef-hb->next->data.coef;p=hb->next;hb->next=hb->next->next; free(p); } else{ha=ha->next;if(ha->next==NULL){hb->next->data.coef=0-hb->next->data.coef;ha->next=hb->next;hb->next=NULL;free(hb);}} } } return0;}voidconstPrintPolyn(polynomialP)//輸出多項式{polynomiala; a=P->next; //開始輸出 while(a->next) { printf("%gx^%d+",a->data.coef,a->data.expn); a=a->next; } //輸出最后一個printf("%gx^%d\n",a->data.coef,a->data.expn);}intAddPolyn(polynomial&Pa,polynomial&Pb)//多項式加法:Pa=Pa+Pb{ polynomialha=NULL,hb=NULL,p=NULL;ha=Pa;hb=Pb; if(ha->next==NULL){Pa=Pb;free(ha);return0;} else{ while(hb->next!=NULL) { if(ha->next->data.expn<hb->next->data.expn){polynomialp,q;p=hb->next;q=p->next;p->next=ha->next;ha->next=p;hb->next=q;ha=ha->next; } elseif(ha->next->data.expn==hb->next->data.expn){ha->next->data.coef=ha->next->data.coef+hb->next->data.coef;p=hb->next;hb->next=hb->next->next; free(p); } else{ha=ha->next;if(ha->next==NULL){ha->next=hb->next;hb->next=NULL;free(hb);}} } } return0;}intMultiplyPolyn(polynomial&a,polynomial&b){//多項式相乘voidSort(polynomial&L);voidDestroyPolyn(polynomial&);polynomialha=NULL,hb=NULL,c=NULL;Polye;if(a->next==NULL||b->next==NULL){return0;}c=(polynomial)malloc(sizeof(LNode));c->next=NULL;ha=a->next;hb=b->next;for(;hb!=NULL;hb=hb->next){e.coef=(ha->data.coef)*(hb->data.coef);e.expn=(ha->data.expn)+(hb->data.expn);polynomialE=NULL;E=(polynomial)malloc(sizeof(LNode));E->data.coef=e.coef;E->data.expn=e.expn;E->next=c->next;c->next=E;}Sort(c);ha=ha->next;while(ha!=NULL){hb=b->next;polynomiald;d=(polynomial)malloc(sizeof(LNode));d->next=NULL;for(;hb!=NULL;hb=hb->next){e.coef=(ha->data.coef)*(hb->data.coef);e.expn=(ha->data.expn)+(hb->data.expn);
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二四年度雜志封面平面模特聘用協(xié)議3篇
- 2025年度電梯安裝施工安全監(jiān)督與隱患排查合同3篇
- 專業(yè)攝影棚租賃服務(wù)協(xié)議范本:短期租賃條款明細(xì)一
- 2025至2030年中國全自動摔軟轉(zhuǎn)鼓數(shù)據(jù)監(jiān)測研究報告
- 二零二五年度油氣儲罐升級改造工程合同4篇
- 二零二五年度時尚飾品全球采購與國內(nèi)零售合同3篇
- 2025年中國電氣設(shè)備防潮絕緣保護劑市場調(diào)查研究報告
- 二零二四年物流配送與供應(yīng)鏈管理服務(wù)合同3篇
- 文物圖像處理與優(yōu)化策略-深度研究
- 2025至2031年中國防紫外線晴雨傘行業(yè)投資前景及策略咨詢研究報告
- 2024年新北師大版八年級上冊物理全冊教學(xué)課件(新版教材)
- 人教版數(shù)學(xué)四年級下冊核心素養(yǎng)目標(biāo)全冊教學(xué)設(shè)計
- JJG 692-2010無創(chuàng)自動測量血壓計
- 三年級下冊口算天天100題(A4打印版)
- 徐州市2023-2024學(xué)年八年級上學(xué)期期末地理試卷(含答案解析)
- CSSD職業(yè)暴露與防護
- 飲料對人體的危害1
- 數(shù)字經(jīng)濟學(xué)導(dǎo)論-全套課件
- 移動商務(wù)內(nèi)容運營(吳洪貴)項目三 移動商務(wù)運營內(nèi)容的策劃和生產(chǎn)
- 中考記敘文閱讀
- 產(chǎn)科溝通模板
評論
0/150
提交評論