版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、問(wèn)題描述:完成一元稀疏多項(xiàng)式運(yùn)算器,完成多項(xiàng)式創(chuàng)建,顯示,復(fù)制,求和,求差,求值,稀疏一元多項(xiàng)式運(yùn)算器0.退出1.創(chuàng)建多項(xiàng)式2.顯示多項(xiàng)式3.復(fù)制多項(xiàng)式4.求和5.求差6.求值7.銷(xiāo)毀多項(xiàng)式8.清空多項(xiàng)式9.修改多項(xiàng)式階微分11.不定微分12.定微分銷(xiāo)毀,清空,修改,n階微分,不定積分,定積分操作。函數(shù)功能描述如下:退出創(chuàng)建并打印打印復(fù)制多項(xiàng)式a至空域b,非空?qǐng)?bào)錯(cuò)輸入abc位置,c=a+b輸入abc位置,c=a-b輸入位置,doublex,輸出doubleresult銷(xiāo)毀,使pi為NULL清空保留頭指針,輸出為0選擇插入,刪除,修改(刪了再插)輸入微分位置,階數(shù),結(jié)果存放于原位置輸入積分位置,
2、不定積分,常數(shù)C取0輸入積分位置,上下限值,輸出定積分結(jié)果算法描述:通過(guò)主菜單調(diào)用函數(shù)完成各項(xiàng)功能,函數(shù)描述見(jiàn)程序結(jié)構(gòu)描述部分。數(shù)據(jù)結(jié)構(gòu)描述:多項(xiàng)式每一項(xiàng)結(jié)點(diǎn)定義如下:typedefstructlnodedoublecoef;intexp;structlnode*next;lnode,*linklist;包含指向下一結(jié)點(diǎn)指針linklistnext,存儲(chǔ)系數(shù)的數(shù)據(jù)單元doublecoef,存儲(chǔ)指數(shù)的數(shù)據(jù)單元intexp;結(jié)點(diǎn)名lnode,指向結(jié)點(diǎn)指針linklist。每一個(gè)多項(xiàng)式由頭指針引出,頭指針數(shù)組lnode*pN。每一個(gè)單元存儲(chǔ)一多項(xiàng)式頭指針。當(dāng)多項(xiàng)式不存在,pi=NULL;多項(xiàng)式為空,
3、pi-next=NULL,即只存在頭指針。操作函數(shù)見(jiàn)程序結(jié)構(gòu)描述部分。程序結(jié)構(gòu)描述:函數(shù)包括創(chuàng)建結(jié)點(diǎn)函數(shù),有序插入函數(shù),打印函數(shù),創(chuàng)建多項(xiàng)式函數(shù),多項(xiàng)式清空函數(shù),多項(xiàng)式銷(xiāo)毀函數(shù),求值函數(shù),求和函數(shù),求差函數(shù),復(fù)制函數(shù),刪除結(jié)點(diǎn)函數(shù),修改函數(shù),n階微分函數(shù),不定積分函數(shù)。對(duì)函數(shù)原型,功能,借口逐一描述如下:1. 創(chuàng)建結(jié)點(diǎn)函數(shù)函數(shù)原型:linklistmakenode(doublecoef,intexp)輸入double型系數(shù)項(xiàng),int型指數(shù)項(xiàng),創(chuàng)建lnode結(jié)點(diǎn),返回指向結(jié)點(diǎn)的linklist指針。功能:創(chuàng)建新結(jié)點(diǎn),在復(fù)制函數(shù)以及輸入系數(shù)指數(shù)插入結(jié)點(diǎn)時(shí)(修改多項(xiàng)式)調(diào)用。2. 有序插入函數(shù)函數(shù)原
4、型:voidinsert(linklistphead,linklisthead)輸入插入結(jié)點(diǎn)指針phead以及多項(xiàng)式頭指針head,無(wú)返回值功能:新結(jié)點(diǎn)phead有序插入頭結(jié)點(diǎn)為head的多項(xiàng)式內(nèi)(按指數(shù)項(xiàng)降序排列),在創(chuàng)建,復(fù)制,修改函數(shù)中調(diào)用。3. 打印函數(shù)函數(shù)原型:voidprintlinklist(linklistphead)輸入待打印多項(xiàng)式頭指針phead,無(wú)返回值分別打印系數(shù)項(xiàng)和指數(shù)項(xiàng),打印系數(shù)項(xiàng)是使用g輸入取消無(wú)效0,通過(guò)特殊情況討論(如exp=0,exp=1,首項(xiàng)的加號(hào)等情況),使多項(xiàng)式輸出符合書(shū)寫(xiě)習(xí)慣。功能:打印多項(xiàng)式4. 創(chuàng)建多項(xiàng)式函數(shù)原型:linklistcreatlis
5、t()返回創(chuàng)建多項(xiàng)式頭指針,調(diào)用時(shí)先在主函數(shù)中輸入該多項(xiàng)式頭指針在頭指針數(shù)組中位置。實(shí)現(xiàn):先若該位置無(wú)多項(xiàng)式,申請(qǐng)頭結(jié)點(diǎn),之后新建數(shù)據(jù)結(jié)點(diǎn),有序插入頭結(jié)點(diǎn)對(duì)應(yīng)多項(xiàng)式。5. 清空多項(xiàng)式函數(shù)原型:voidlinklistclear(linklisthead)輸入待清空多項(xiàng)式頭結(jié)點(diǎn),無(wú)返回值,將pi僅保留頭結(jié)點(diǎn)。實(shí)現(xiàn):用前后兩指針,遍歷多項(xiàng)式并逐一刪去結(jié)點(diǎn),最后將頭指針的next域置NULL。6. 銷(xiāo)毀多項(xiàng)式函數(shù)原型:voidlinklistdestroy(linklist&head)輸入待銷(xiāo)毀多項(xiàng)式頭結(jié)點(diǎn),無(wú)返回值,將pi置NULL實(shí)現(xiàn)方法類(lèi)似清空,刪去包括head在內(nèi)結(jié)點(diǎn)。7. 多項(xiàng)式求值函數(shù)原
6、型:doublelinklistvalue(linklisthead,doublex)輸入待求多項(xiàng)式頭結(jié)點(diǎn),變量x值doublex,返回double型結(jié)果實(shí)現(xiàn):通過(guò)exp求每一項(xiàng)權(quán)重,與系數(shù)coef相乘,最后累加所有結(jié)果。8. 多項(xiàng)式求和函數(shù)原型:voidlinklistadd(linklistahead,linklistbhead,linklist&chead)輸入相加兩多項(xiàng)式a,b頭指針以及輸出位置c,無(wú)返回值實(shí)現(xiàn):通過(guò)pa,pb遍歷a,b,新建c結(jié)點(diǎn)對(duì)比當(dāng)前位置a,bexp大小,分別做對(duì)應(yīng)賦值,之后將c結(jié)點(diǎn)插入c多項(xiàng)式中(*當(dāng)c新結(jié)點(diǎn)系數(shù)為0時(shí)不進(jìn)行插入)9. 多項(xiàng)式求差函數(shù)原型:voi
7、dlinklistsub(linklistahead,linklistbhead,linklist&chead)輸入相減兩多項(xiàng)式a,b頭指針以及輸出位置c,無(wú)返回值實(shí)現(xiàn)完全與求和相同10. 多項(xiàng)式復(fù)制函數(shù)原型:linklistlinklistcopy(linklista)輸入待復(fù)制多項(xiàng)式頭指針linklista,輸出復(fù)制結(jié)果指針linklist。遍歷多項(xiàng)式a,讀取每一結(jié)點(diǎn)coef,exp值,調(diào)用makenode函數(shù)創(chuàng)建新結(jié)點(diǎn),插入多項(xiàng)式b,返回b頭指針head。11. 刪除多項(xiàng)式中一節(jié)點(diǎn)函數(shù)原型:intlinklistdelete(linklisthead,intm)輸入待刪除多項(xiàng)式頭指針li
8、nklisthead,待刪除項(xiàng)指數(shù)值intm,成功返回1,反之-1刪除head中一指數(shù)為m項(xiàng),修改函數(shù)中調(diào)用實(shí)現(xiàn):遍歷多項(xiàng)式,若指數(shù)項(xiàng)系數(shù)為m,free(p)12. 修改多項(xiàng)式函數(shù)原型:voidlinklistmodify(linklisthead)輸入待修改多項(xiàng)式頭指針linklisthead,無(wú)返回值調(diào)用函數(shù)時(shí)輸入1,2,3選擇插入結(jié)點(diǎn),刪除結(jié)點(diǎn),修改結(jié)點(diǎn)操作(刪除后插入),分別調(diào)用delete函數(shù)及insert函數(shù)實(shí)現(xiàn)。13. 微分函數(shù)原型:voidlinklistdiff(linklist&head)輸入待微分多項(xiàng)式頭指針linklisthead,按照求導(dǎo)規(guī)則逐項(xiàng)修改系數(shù),指數(shù),并對(duì)原
9、常數(shù)項(xiàng)結(jié)點(diǎn)進(jìn)行刪除操作。實(shí)現(xiàn)N階微分是在主函數(shù)中n次調(diào)用即可。14. 不定積分函數(shù)原型:voiditeintegral(linklisthead)輸入多項(xiàng)式頭指針linklisthead,無(wú)返回值按多項(xiàng)式積分規(guī)則逐項(xiàng)修改系數(shù),指數(shù),對(duì)不定積分中C取0。實(shí)現(xiàn)定積分是同時(shí)調(diào)用不定積分函數(shù)與求值函數(shù)即可。算法時(shí)空分析:無(wú)復(fù)雜嵌套,均一次遍歷即可,對(duì)多項(xiàng)式操作復(fù)雜度均為0(N)數(shù)量級(jí)。調(diào)試及結(jié)果分析:選擇鍵面:創(chuàng)建多項(xiàng)式:創(chuàng)建并打印,指數(shù)為0結(jié)束顯示多項(xiàng)式:判斷第一項(xiàng)前不輸出+,指數(shù)正負(fù)1,0修改輸出格式復(fù)制多項(xiàng)式:求和:a,在未修改前因訪(fǎng)說(shuō)明:為測(cè)試一個(gè)多項(xiàng)式先加完的情況,選擇b多項(xiàng)式指數(shù)項(xiàng)系數(shù)大于
10、問(wèn)b-exp,而b=NULL報(bào)錯(cuò)。修改分情況討論。求差:求值:銷(xiāo)毀:清空:修改:n階微分:驗(yàn)證刪除常數(shù)項(xiàng)微分功能,選擇該實(shí)驗(yàn)數(shù)據(jù)不定積分:定積分:遍歷每個(gè)函數(shù)驗(yàn)證可行,一些特殊分支的測(cè)試函數(shù)不予以列出,調(diào)試時(shí)主要解決一些健壯性問(wèn)題以及一些未考慮周全的方面。實(shí)驗(yàn)體會(huì)和收貨:1. 實(shí)驗(yàn)中大部分函數(shù)思路較為簡(jiǎn)單,但存在大量細(xì)節(jié)問(wèn)題。如打印多項(xiàng)式中,系數(shù)的無(wú)效0去除,打印結(jié)果與正常書(shū)寫(xiě)習(xí)慣的符合性;add函數(shù)中某多項(xiàng)式先插完的極端情況;加減函數(shù)中結(jié)果為0項(xiàng)的刪除;主函數(shù)中輸入位置i合法性檢查等。完善其在各種極端情況下的健壯性很多時(shí)候更為耗時(shí),但卻是必須的。2. 在寫(xiě)較大函數(shù)時(shí)應(yīng)進(jìn)行分塊。本實(shí)驗(yàn)完成時(shí),
11、我采取了完成create,print函數(shù)后逐一寫(xiě)運(yùn)算函數(shù)的方法,盡管在單個(gè)函數(shù)調(diào)試時(shí)并未有明顯障礙,但給之后調(diào)用和閱讀帶來(lái)極大不便,以后需要避免。3. 處理這類(lèi)問(wèn)題時(shí),最復(fù)雜的步驟往往是確定和建立數(shù)據(jù)結(jié)構(gòu),本次完成實(shí)驗(yàn)的很大一部分時(shí)間花在了基礎(chǔ)函數(shù)(create,insert,print)的完成上,而非簡(jiǎn)單的運(yùn)算函數(shù)。4. 測(cè)試數(shù)據(jù)選擇需加以仔細(xì)思考一方面是有些數(shù)據(jù)可同時(shí)測(cè)試多路,提高效率,更重要的是很多極端情況只有特定函數(shù)才能完成測(cè)試。#include#include#includetypedefstructlnodedoublecoef;intexp;structlnode*next;ln
12、ode,*linklist;除結(jié)點(diǎn)n2.增加結(jié)點(diǎn)n3.修改結(jié)點(diǎn)#defineN20lnode*pN=NULL;n);scanf(%d,&flag);switch(flag)case1:printf(輸入刪除結(jié)點(diǎn)指數(shù)值:);scanf(%d,&exp);linklistdelete(head,exp);break;case2:printf(輸入增加結(jié)點(diǎn)指數(shù)值系數(shù):);scanf(%d%lf,&exp,&coef);insert(makenode(coef,exp),head);break;case3:printf(輸入指數(shù)修改后系數(shù):);scanf(%d%lf,&exp,&coef);linkl
13、istdelete(head,exp);insert(makenode(coef,exp),head);break;voidlinklistdiff(linklist&head)linklistp=head-next;while(p!=NULL)if(p-exp=0)linklistdelete(head,0);break;elsep-coef*=p-exp;p-exp-=1;p=p-next;voiditeintegral(linklisthead)linklistp=head-next;while(p!=NULL)p-exp+=1;p-coef=p-coef/p-exp;p=p-next;
14、intmain()intflag,i;printf(*n);printf(*稀疏一元多項(xiàng)式運(yùn)算器退出*n);*n);建多項(xiàng)式printf(*0.*n);示多項(xiàng)式*n);制多項(xiàng)式*n);和*n);差*n);值*n);毀多項(xiàng)式*n);空多項(xiàng)式*n);改多項(xiàng)式*n);定微分*n);printf(*12.定微分*n);printf(*n);while(1)printf(鍵入數(shù)字選擇操作:);scanf(%d,&flag);switch(flag)case0:printf(thanksforusingn);return0;case1:printf(inputlocation:);scanf(%d,&i)
15、;if(pi-1=NULL)pi-1=creatlist();elseprintf(空間已被占用n);break;case2:printf(輸入顯示位置:);scanf(%d,&i);if(pi-1!=NULL)printlinklist(pi-1);elseprintf(該位置無(wú)多項(xiàng)式n);break;case3:intj;printf(input原位置復(fù)制位置:);scanf(%d%d,&i,&j);if(pi-1!=NULL&pj-1=NULL)pj-1=linklistcopy(pi-1);elseprintf(輸入位置空或輸出位置滿(mǎn));break;case4:intj,k;print
16、f(輸入a,b位置,以及輸出c位置:);scanf(%d%d%d,&i,&j,&k);if(pi-1!=NULL&pj-1!=NULL&pk-1=NULL)linklistadd(pi-1,pj-1,pk-1);elseprintf(位置被占用或原多項(xiàng)式不存在n);break;case5:intj,k;printf(輸入a,b位置,以及輸出c位置:);scanf(%d%d%d,&i,&j,&k);if(pi-1!=NULL&pj-1!=NULL&pk-1=NULL)linklistsub(pi-1,pj-1,pk-1);elseprintf(位置被占用或原多項(xiàng)式不存在n);break;case
17、6:printf(輸入多項(xiàng)式位置:);scanf(%d,&i);if(pi-1!=NULL)doubletempx;printf(輸入x值:);scanf(%lf,&tempx);printf(結(jié)果為%gn,linklistvalue(pi-1,tempx);elseprintf(該位置無(wú)多項(xiàng)式n);break;case7:printf(輸入刪除位置:);scanf(%d,&i);if(pi-1!=NULL)linklistdestroy(pi-1);elseprintf(該位置無(wú)多項(xiàng)式n)break;case8:printf(輸入清空位置:);scanf(%d,&i);if(pi-1!=NU
18、LL)linklistclear(pi-1);elsen);printf(該位置不存在多項(xiàng)式break;case9:printf(輸入修改對(duì)象位置:);scanf(%d,&i);if(pi-1!=NULL)linklistmodify(pi-1);elseprintf(對(duì)應(yīng)位置為空n);break;case10:printf(輸入微分位置:);scanf(%d,&i);printf(輸入求導(dǎo)階數(shù):);intn,j;scanf(%d,&n);if(pi-1!=NULL)for(j=0;jn;j+)linklistdiff(pi-1);elseprintf(該位置無(wú)多項(xiàng)式n)break;case11:printf(
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025屆寧夏吳忠市高三上學(xué)期適應(yīng)性考試(一模)歷史試題(解析版)
- 《社區(qū)自治》課件
- 單位管理制度集合大全職員管理篇
- 單位管理制度匯編大全【人力資源管理】
- 單位管理制度合并選集人事管理
- 單位管理制度分享合集【人事管理】十篇
- 單位管理制度范例匯編【人力資源管理篇】十篇
- 單位管理制度呈現(xiàn)大全【人力資源管理篇】十篇
- 七年級(jí)英語(yǔ)Whatwouldyouliketohave課件
- 《珠海酒店信息》課件
- 重大隱患判定標(biāo)準(zhǔn)培訓(xùn)課件
- 畫(huà)法幾何及機(jī)械制圖課件
- 棋牌游戲自審自查報(bào)告
- 地質(zhì)災(zāi)害風(fēng)險(xiǎn)調(diào)查評(píng)價(jià)項(xiàng)目招標(biāo)文件
- JJF 2088-2023大型蒸汽滅菌器溫度、壓力、時(shí)間參數(shù)校準(zhǔn)規(guī)范
- 幼兒園食堂食品安全主體責(zé)任風(fēng)險(xiǎn)管控清單(日管控)
- 九年級(jí)上冊(cè)第二單元民主與法治 單元作業(yè)設(shè)計(jì)
- 陜西華縣皮影戲調(diào)研報(bào)告
- 2016年食堂期末庫(kù)存
- 運(yùn)籌學(xué)課程設(shè)計(jì)報(bào)告
- (完整)雙溪課程評(píng)量表
評(píng)論
0/150
提交評(píng)論