![專(zhuān)業(yè)課程設(shè)計(jì)一元稀疏多項(xiàng)式計(jì)算器程序_第1頁(yè)](http://file4.renrendoc.com/view11/M00/10/19/wKhkGWX1SSSAb9uwAAB4_bcPZ5A731.jpg)
![專(zhuān)業(yè)課程設(shè)計(jì)一元稀疏多項(xiàng)式計(jì)算器程序_第2頁(yè)](http://file4.renrendoc.com/view11/M00/10/19/wKhkGWX1SSSAb9uwAAB4_bcPZ5A7312.jpg)
![專(zhuān)業(yè)課程設(shè)計(jì)一元稀疏多項(xiàng)式計(jì)算器程序_第3頁(yè)](http://file4.renrendoc.com/view11/M00/10/19/wKhkGWX1SSSAb9uwAAB4_bcPZ5A7313.jpg)
![專(zhuān)業(yè)課程設(shè)計(jì)一元稀疏多項(xiàng)式計(jì)算器程序_第4頁(yè)](http://file4.renrendoc.com/view11/M00/10/19/wKhkGWX1SSSAb9uwAAB4_bcPZ5A7314.jpg)
![專(zhuān)業(yè)課程設(shè)計(jì)一元稀疏多項(xiàng)式計(jì)算器程序_第5頁(yè)](http://file4.renrendoc.com/view11/M00/10/19/wKhkGWX1SSSAb9uwAAB4_bcPZ5A7315.jpg)
版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
課程設(shè)計(jì)結(jié)果學(xué)院:計(jì)算機(jī)工程學(xué)院班級(jí):計(jì)算機(jī)科學(xué)和技術(shù)班學(xué)生姓名:學(xué)號(hào):設(shè)計(jì)地點(diǎn)(單位):
設(shè)計(jì)題目:一元稀疏多項(xiàng)式計(jì)算器程序完成日期:年月日成績(jī)(五級(jí)記分制):________________老師署名:_________________________
荊楚理工學(xué)院課程設(shè)計(jì)任務(wù)書(shū)設(shè)計(jì)題目:學(xué)生姓名王巍課程名稱(chēng)數(shù)據(jù)結(jié)果13級(jí)計(jì)算機(jī)科學(xué)和技術(shù)1班地點(diǎn)起止時(shí)間設(shè)計(jì)內(nèi)容及要求設(shè)計(jì)參數(shù)進(jìn)度要求參考資料其它說(shuō)明1.本表應(yīng)在每次實(shí)施前一周由負(fù)責(zé)老師填寫(xiě)二份,教研室審批后交學(xué)院院立案,一份由負(fù)責(zé)老師留用。2.若填寫(xiě)內(nèi)容較多可另紙附后。3.一題多名學(xué)生共用,在設(shè)計(jì)內(nèi)容、參數(shù)、要求等方面應(yīng)有所區(qū)分。教研室主任:指導(dǎo)老師:目錄1需求分析 12設(shè)計(jì)概要 22.1基礎(chǔ)結(jié)構(gòu) 22.2基礎(chǔ)功效模塊圖 23算法思想 33.1建立多項(xiàng)式 33.2多項(xiàng)式相加 33.3多項(xiàng)式相減 33.4鏈表輸出 34具體設(shè)計(jì) 44.1函數(shù)功效介紹 44.2結(jié)構(gòu)體定義 44.3產(chǎn)生鏈表函數(shù) 44.4插入結(jié)點(diǎn) 54.5多項(xiàng)式相加函數(shù) 54.6多項(xiàng)式相減函數(shù) 74.7主函數(shù) 75 測(cè)試結(jié)果及運(yùn)行效果 10參考文件 13附錄全部代碼 141需求分析1、一元多項(xiàng)式簡(jiǎn)單計(jì)算器基礎(chǔ)功效是:1.1輸入并建立多項(xiàng)式;1.2輸出多項(xiàng)式,輸出形式為整數(shù)序列n,c1,e1,c2,e2,…,cn,en,其中n是多項(xiàng)式項(xiàng)數(shù),ci和ei分別是第I項(xiàng)系數(shù)和指數(shù),序列指指數(shù)降序排列;1.3多項(xiàng)式a和b相加,建立多項(xiàng)式a+b;(4)多項(xiàng)式a和b相減,建立多項(xiàng)式a-b。實(shí)現(xiàn)提醒:用帶頭結(jié)點(diǎn)單鏈表存放多項(xiàng)式,多項(xiàng)式項(xiàng)數(shù)存在頭結(jié)點(diǎn)2、設(shè)計(jì)思緒:2.1定義線(xiàn)性表動(dòng)態(tài)分配次序存放結(jié)構(gòu);2.2建立多項(xiàng)式存放結(jié)構(gòu),定義指針*next2.3利用鏈表實(shí)現(xiàn)隊(duì)列結(jié)構(gòu)。每次輸入一項(xiàng)系數(shù)和指數(shù),能夠輸出結(jié)構(gòu)一元多項(xiàng)式2.4演示程序以用戶(hù)和計(jì)算機(jī)對(duì)話(huà)方法實(shí)施,即在計(jì)算機(jī)終站上顯示“提醒信息”以后,由用戶(hù)在鍵盤(pán)上輸入演示程序中要求運(yùn)行命令;最終依據(jù)對(duì)應(yīng)輸入數(shù)據(jù)(濾去輸入中非法字符)建立多項(xiàng)式和多項(xiàng)式相加運(yùn)行結(jié)果在屏幕上顯示。多項(xiàng)式顯示格式為:c1x^e1+c2x^e2+…+cnx^en3、設(shè)計(jì)思緒分析:要處理多項(xiàng)式相加,必需要有多項(xiàng)式,所以必需首先建立兩個(gè)多項(xiàng)式,在這里采取鏈表方法存放鏈表,所以我將結(jié)點(diǎn)結(jié)構(gòu)體定義為序數(shù)coef指數(shù)expn指針域next利用尾插法建立兩條單鏈表,以單鏈表polynp和polynh分別表示兩個(gè)一元多項(xiàng)式a和b,a+b求和運(yùn)算等同于單鏈表插入問(wèn)題(將單鏈表polynp中結(jié)點(diǎn)插入到單鏈表polynh中),所以“和多項(xiàng)式”中結(jié)點(diǎn)無(wú)須另生成。為了實(shí)現(xiàn)處理,設(shè)p、q分別指向單鏈表polya和polyb目前項(xiàng),比較p、q結(jié)點(diǎn)指數(shù)項(xiàng),由此得到下列運(yùn)算規(guī)則:①若p->expn<q->expn,則結(jié)點(diǎn)p所指結(jié)點(diǎn)應(yīng)是“和多項(xiàng)式”中一項(xiàng),令指針p后移。②若p->expn=q->expn,則將兩個(gè)結(jié)點(diǎn)中系數(shù)相加,當(dāng)和不為0時(shí)修改結(jié)點(diǎn)p系數(shù)。③若p->expn>q->expn,則結(jié)點(diǎn)q所指結(jié)點(diǎn)應(yīng)是“和多項(xiàng)式”中一項(xiàng),將結(jié)點(diǎn)q插入在結(jié)點(diǎn)p之前,且令指針q在原來(lái)鏈表上后移。2設(shè)計(jì)概要2.1基礎(chǔ)結(jié)構(gòu)1、元素類(lèi)型、結(jié)點(diǎn)類(lèi)型和指針類(lèi)型:typedefstructPolynomial{floatcoef;//系數(shù)intexpn;//指數(shù)structPolynomial*next;}*Polyn,Polynomial;2、建立一個(gè)頭指針為head、項(xiàng)數(shù)為m一元多項(xiàng)式,建立新結(jié)點(diǎn)以接收數(shù)據(jù),調(diào)用Insert函數(shù)插入結(jié)點(diǎn): PolynCreatePolyn(Polynhead,intm){inti;Polynp;p=head=(Polyn)malloc(sizeof(structPolynomial));head->next=NULL;for(i=0;i<m;i++) {p=(Polyn)malloc(sizeof(structPolynomial));printf("請(qǐng)輸入第%d項(xiàng)系數(shù)和指數(shù):",i+1);scanf("%f%d",&p->coef,&p->expn);Insert(p,head); }returnhead;3、主函數(shù)和其它函數(shù):voidmain(){intm,n,a,x; charflag;Polynpa=0,pb=0,pc;}floatValuePolyn(Polynhead,intx)//輸入x值,計(jì)算并返回多項(xiàng)式值2.2基礎(chǔ)功效模塊圖3算法思想3.1建立多項(xiàng)式一元多項(xiàng)式是由多個(gè)項(xiàng)和組成,將一元多項(xiàng)式每個(gè)項(xiàng)用一結(jié)點(diǎn)表示,該結(jié)點(diǎn)中應(yīng)包含該項(xiàng)系數(shù)、該項(xiàng)指數(shù)、指向下一項(xiàng)指針,能夠用線(xiàn)性表來(lái)依次輸入各項(xiàng)結(jié)點(diǎn),從而完成多項(xiàng)式鏈表建立,為了使原多項(xiàng)式各項(xiàng)次序不變,故采取尾插法建表。3.2多項(xiàng)式相加多項(xiàng)式相加關(guān)鍵是經(jīng)過(guò)將多項(xiàng)式每一項(xiàng)指數(shù)cxpn進(jìn)行比較,當(dāng)指數(shù)expn相同時(shí),將兩個(gè)結(jié)點(diǎn)中系數(shù)coef相加存放在第一個(gè)鏈表中,然后釋放第二條鏈表中這個(gè)結(jié)點(diǎn)。當(dāng)兩個(gè)結(jié)點(diǎn)中指數(shù)expn不相同時(shí),按高次在前低次在后降序插入到鏈表當(dāng)中。3.3多項(xiàng)式相減多項(xiàng)式相減過(guò)程,其實(shí)就是相同指數(shù)項(xiàng)系數(shù)相減,對(duì)于不一樣指數(shù)項(xiàng),若是被減多項(xiàng)式,則將該結(jié)點(diǎn)復(fù)制輸出,若是減多項(xiàng)式,則將該結(jié)點(diǎn)系數(shù)變?yōu)樵禂?shù)相反數(shù)輸出,將結(jié)果用降冪輸出函數(shù)輸出。3.4鏈表輸出 PrintPolyn(PolynP)函數(shù)接收鏈表頭結(jié)點(diǎn)地址,然后依次輸出兩個(gè)鏈表合并后鏈表中每個(gè)結(jié)點(diǎn)中系數(shù)和指數(shù)。4具體設(shè)計(jì)4.1函數(shù)功效介紹voidmain()//該函數(shù)依據(jù)用戶(hù)選擇,完成指定操作函數(shù)并依據(jù)用戶(hù)選擇,完成指定操作PolynCreatePolyn(Polynhead,intm)/*制造鏈表頭結(jié)點(diǎn),并調(diào)用voidInsert(Polynp,Polynh)函數(shù)實(shí)現(xiàn)依據(jù)多項(xiàng)式項(xiàng)數(shù)創(chuàng)建對(duì)應(yīng)數(shù)量個(gè)節(jié)點(diǎn)鏈表*/voidInsert(Polynp,Polynh)/*向存放鏈表多項(xiàng)式中插入結(jié)點(diǎn)*/voidDestroyPolyn(Polynp)/*該函數(shù)用來(lái)釋放結(jié)點(diǎn),在加減操作中當(dāng)多項(xiàng)式一項(xiàng)系數(shù)為0或兩項(xiàng)指數(shù)相同進(jìn)行相加或相減時(shí)可用次函數(shù)來(lái)釋放對(duì)應(yīng)結(jié)點(diǎn)*/intcompare(Polyna,Polynb)//該函數(shù)用于判定兩個(gè)鏈表在加減狀態(tài)中結(jié)點(diǎn)狀態(tài)PolynAddPolyn(Polynpa,Polynpb)//該函數(shù)用于實(shí)現(xiàn)多項(xiàng)式相加操作PolynSubtractPolyn(Polynpa,Polynpb)//該函數(shù)用于實(shí)現(xiàn)多項(xiàng)式相減操作floatValuePolyn(Polynhead,intx)//該函數(shù)用于對(duì)多項(xiàng)式求值voidPrintPolyn(PolynP)//該函數(shù)用于鏈表輸出4.2結(jié)構(gòu)體定義typedefstructPolynomial{floatcoef;//系數(shù)intexpn;//指數(shù)structPolynomial*next;//指向結(jié)構(gòu)體指針}*Polyn,Polynomial;定義一個(gè)結(jié)構(gòu)體,結(jié)構(gòu)體中包含3個(gè)組員分別是:folat型coef用于存放多項(xiàng)式中一項(xiàng)系數(shù),int型expn用于存放多項(xiàng)式中一項(xiàng)指數(shù),指向結(jié)構(gòu)體本身類(lèi)型指針next,定義了結(jié)構(gòu)體我們就可用利用創(chuàng)建一個(gè)單鏈表方法對(duì)一個(gè)多項(xiàng)式各項(xiàng)系數(shù)和指數(shù)進(jìn)行存放、處理。4.3產(chǎn)生鏈表函數(shù)PolynCreatePolyn(Polynhead,intm){//建立一個(gè)頭指針為head、項(xiàng)數(shù)為m一元多項(xiàng)式inti;Polynp;p=head=(Polyn)malloc(sizeof(structPolynomial));head->next=NULL;for(i=0;i<m;i++) {p=(Polyn)malloc(sizeof(structPolynomial));//建立新結(jié)點(diǎn)以接收數(shù)據(jù)printf("請(qǐng)輸入第%d項(xiàng)系數(shù)和指數(shù):",i+1);scanf("%f%d",&p->coef,&p->expn);Insert(p,head);//調(diào)用Insert函數(shù)插入結(jié)點(diǎn) }returnhead;}CreatePolyn函數(shù)接收兩個(gè)參數(shù),分別是鏈表頭結(jié)點(diǎn)和多項(xiàng)式項(xiàng)數(shù),使head指向鏈表頭結(jié)點(diǎn),然后利用for語(yǔ)句循環(huán)調(diào)用Insert函數(shù),這么就能夠動(dòng)態(tài)分配內(nèi)存,依據(jù)用戶(hù)輸入項(xiàng)數(shù)來(lái)制造結(jié)點(diǎn)。4.4插入結(jié)點(diǎn) voidInsert(Polynp,Polynh){if(p->coef==0)free(p);//系數(shù)為0話(huà)釋放結(jié)點(diǎn)else {Polynq1,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話(huà)釋放結(jié)點(diǎn)q1->next=q2->next;free(q2); } }else {//指數(shù)為新時(shí)將結(jié)點(diǎn)插入p->next=q2;q1->next=p; } }}Insert函數(shù)接收兩個(gè)指針,分別是p(p永遠(yuǎn)指向帶插入那個(gè)結(jié)點(diǎn)),和鏈表頭指針,首先依次判定鏈表中每個(gè)結(jié)點(diǎn)中組員coef(多項(xiàng)式系數(shù))是否為0,假如為0則釋放該結(jié)點(diǎn),若系數(shù)不為0,則經(jīng)過(guò)q1、q2查找插入結(jié)點(diǎn)位置。4.5多項(xiàng)式相加函數(shù)PolynAddPolyn(Polynpa,Polynpb){//求解并建立多項(xiàng)式a+b,返回其頭指針Polynqa=pa->next;Polynqb=pb->next;Polynheadc,hc,qc;hc=(Polyn)malloc(sizeof(structPolynomial));//建立頭結(jié)點(diǎn)hc->next=NULL;headc=hc;while(qa||qb) {qc=(Polyn)malloc(sizeof(structPolynomial));switch(compare(qa,qb)){case1: {qc->coef=qa->coef;qc->expn=qa->expn;qa=qa->next;break; }case0: {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->next=hc->next;hc->next=qc;hc=qc; }elsefree(qc);//當(dāng)相加系數(shù)為0時(shí),釋放該結(jié)點(diǎn) }returnheadc;}PolynAddPolyn(Polynpa,Polynpb)函數(shù)接收鏈表a、鏈表b頭結(jié)點(diǎn)便于實(shí)現(xiàn)對(duì)兩個(gè)多項(xiàng)式進(jìn)行操作,在函數(shù)中又調(diào)用intcompare(Polyna,Polynb),a多項(xiàng)式已空,但b多項(xiàng)式非空函數(shù)返回-1,b多項(xiàng)式已空,但a多項(xiàng)式非空,不一樣返回值,能夠明確讓PolynAddPolyn(Polynpa,Polynpb)進(jìn)行對(duì)應(yīng)操作。4.6多項(xiàng)式相減函數(shù)PolynSubtractPolyn(Polynpa,Polynpb){//求解并建立多項(xiàng)式a-b,返回其頭指針Polynh=pb;Polynp=pb->next;Polynpd;while(p) {//將pb系數(shù)取反p->coef*=-1;p=p->next; }pd=AddPolyn(pa,h);for(p=h->next;p;p=p->next)//恢復(fù)pb系數(shù)p->coef*=-1;returnpd;}floatValuePolyn(Polynhead,intx){//輸入x值,計(jì)算并返回多項(xiàng)式值 Polynp;inti,t; floatsum=0;for(p=head->next;p;p=p->next) {t=1;for(i=p->expn;i!=0;) {if(i<0){t/=x;i++;}//指數(shù)小于0,進(jìn)行除法else{t*=x;i--;}//指數(shù)大于0,進(jìn)行乘法 }sum+=p->coef*t; }returnsum;}PolynSubtractPolyn(Polynpa,Polynpb)函數(shù)作用用于進(jìn)行多項(xiàng)式相減操作,其實(shí)現(xiàn)方法實(shí)質(zhì)是在調(diào)用PolynAddPolyn(Polynpa,Polynpb)函數(shù)同時(shí)將被減多項(xiàng)式每項(xiàng)系數(shù)取其相反數(shù)進(jìn)行相加運(yùn)算。4.7主函數(shù) voidmain(){intm,n,a,x; charflag;Polynpa=0,pb=0,pc;printf("請(qǐng)輸入a項(xiàng)數(shù):");scanf("%d",&m);pa=CreatePolyn(pa,m);//建立多項(xiàng)式aprintf("請(qǐng)輸入b項(xiàng)數(shù):");scanf("%d",&n);pb=CreatePolyn(pb,n);//建立多項(xiàng)式b//輸出菜單printf("**************************************************\n");printf("*多項(xiàng)式操作程序*\n");printf("**\n"); printf("*A:輸出多項(xiàng)式aB:輸出多項(xiàng)式b*\n"); printf("**\n"); printf("*C:代入x值計(jì)算aD:代入x值計(jì)算b*\n"); printf("**\n"); printf("*E:輸出a+bF:輸出a-b*\n"); printf("**\n");printf("*G:退出程序*\n"); printf("**\n");printf("*************************************************\n"); while(a) {printf("\n請(qǐng)選擇操作:");scanf("%c",&flag); switch(flag) { case'A': case'a': { printf("\n多項(xiàng)式a="); PrintPolyn(pa); break; } case'B': case'b': { printf("\n多項(xiàng)式b="); PrintPolyn(pb); break; }case'C': case'c': { printf("輸入x值:x="); scanf("%d",&x); printf("\nx=%d時(shí),a=%.3f\n",x,ValuePolyn(pa,x)); break; }case'D': case'd': { printf("輸入x值:x="); scanf("%d",&x); printf("\nx=%d時(shí),b=%.3f\n",x,ValuePolyn(pb,x)); break; } case'E': case'e': { pc=AddPolyn(pa,pb);printf("\na+b="); PrintPolyn(pc); break; }case'F': case'f': { pc=SubtractPolyn(pa,pb);printf("\na-b="); PrintPolyn(pc); break; } case'G': case'g': { printf("\n感謝使用此程序!\n"); DestroyPolyn(pa); DestroyPolyn(pb); a=0; break; }default: printf("\n您選擇錯(cuò)誤,請(qǐng)重新選擇!\n"); } }}主函數(shù),運(yùn)行以后出現(xiàn)歡迎使用界面并提醒用戶(hù)輸入,多項(xiàng)式項(xiàng)數(shù),每項(xiàng)系數(shù),指數(shù)由用戶(hù)依次輸入。然后程序反饋給用戶(hù)一個(gè)對(duì)兩個(gè)多項(xiàng)式進(jìn)行對(duì)應(yīng)操作提醒,程序用switch語(yǔ)句實(shí)現(xiàn)用戶(hù)依據(jù)提醒鍵入對(duì)應(yīng)字符便調(diào)用實(shí)現(xiàn)對(duì)應(yīng)函數(shù),若輸入字符超不在程序提醒輸入字符集合內(nèi)則輸出“您選擇錯(cuò)誤,請(qǐng)重新選擇!”。5 測(cè)試結(jié)果及運(yùn)行效果程序運(yùn)行后出現(xiàn)“歡迎使用”信息,用戶(hù)依據(jù)提醒輸入多項(xiàng)式a項(xiàng)數(shù),圖6-1,始建立第一個(gè)多項(xiàng)式。圖5-1程序運(yùn)行后界面以a=2X2+X5+1,b=X2+3X4+X+X3為例鍵入多項(xiàng)式項(xiàng)數(shù),各項(xiàng)指數(shù)、系數(shù),程序提醒用戶(hù)鍵入需進(jìn)行操作相對(duì)應(yīng)字符,圖6-2:圖5-2輸入多項(xiàng)式信息后鍵入對(duì)應(yīng)字符后,程序?qū)崿F(xiàn)了用戶(hù)所需求功效,經(jīng)數(shù)次測(cè)試,程序運(yùn)行得到結(jié)果正確無(wú)誤,達(dá)成設(shè)計(jì)此程序目標(biāo),以之前輸入兩個(gè)多項(xiàng)式為例,鍵入對(duì)應(yīng)命令按鈕,程序進(jìn)行對(duì)應(yīng)操作,圖6-3所表示:圖5-3輸入對(duì)應(yīng)操作命令后得到結(jié)果參考文件[1]劉覺(jué)夫,王更生等編著.C++程序設(shè)計(jì).北京:北京郵電大學(xué)出版社,.[2]曾輝,王更生,李廣麗等編著.C++程序設(shè)計(jì)實(shí)訓(xùn)教程.北京:北京郵電大學(xué)出版社,1998.[3]譚浩強(qiáng)編著.C++面向?qū)ο蟪绦蛟O(shè)計(jì).北京:北京清華大學(xué)出版社,.[4]譚浩強(qiáng).C++面向?qū)ο蟪绦蛟O(shè)計(jì).北京:清華大學(xué)出版社,.[5]譚浩強(qiáng).C++程序設(shè)計(jì)實(shí)踐指導(dǎo).北京:清華大學(xué)出版社,.[6]劉玉英,張怡芳等.C++試驗(yàn)指導(dǎo)和課程設(shè)計(jì).人民郵電出版社,.附錄全部代碼#include<stdio.h>#include<stdlib.h>//定義多項(xiàng)式項(xiàng)typedefstructPolynomial{floatcoef;//系數(shù)intexpn;//指數(shù)structPolynomial*next;}*Polyn,Polynomial;voidInsert(Polynp,Polynh){if(p->coef==0)free(p);//系數(shù)為0話(huà)釋放結(jié)點(diǎn)else {Polynq1,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話(huà)釋放結(jié)點(diǎn)q1->next=q2->next;free(q2); } }else {//指數(shù)為新時(shí)將結(jié)點(diǎn)插入p->next=q2;q1->next=p; } }}PolynCreatePolyn(Polynhead,intm){//建立一個(gè)頭指針為head、項(xiàng)數(shù)為m一元多項(xiàng)式inti;Polynp;p=head=(Polyn)malloc(sizeof(structPolynomial));head->next=NULL;for(i=0;i<m;i++) {p=(Polyn)malloc(sizeof(structPolynomial));//建立新結(jié)點(diǎn)以接收數(shù)據(jù)printf("請(qǐng)輸入第%d項(xiàng)系數(shù)和指數(shù):",i+1);scanf("%f%d",&p->coef,&p->expn);Insert(p,head);//調(diào)用Insert函數(shù)插入結(jié)點(diǎn) }returnhead;}voidDestroyPolyn(Polynp){//銷(xiāo)毀多項(xiàng)式pPolynq1,q2;q1=p->next;q2=q1->next;while(q1->next) {free(q1);q1=q2;q2=q2->next; }}voidPrintPolyn(PolynP){ Polynq=P->next;intflag=1;//項(xiàng)數(shù)計(jì)數(shù)器if(!q) {//若多項(xiàng)式為空,輸出0putchar('0');printf("\n");return; }while(q) {if(q->coef>0&&flag!=1)putchar('+');//系數(shù)大于0且不是第一項(xiàng)if(q->coef!=1&&q->coef!=-1) {//系數(shù)非1或-1一般情況printf("%g",q->coef);if(q->expn==1)putchar('X');elseif(q->expn)printf("X^%d",q->expn); }else {if(q->coef==1) {if(!q->expn)putchar('1');elseif(q->expn==1)putchar('X');elseprintf("X^%d",q->expn); }if(q->coef==-1) {if(!q->expn)printf("-1");elseif(q->expn==1)printf("-X");elseprintf("-X^%d",q->expn); } }q=q->next;flag++; }printf("\n");}intcompare(Polyna,Polynb){if(a&&b) {if(!b||a->expn>b->expn)return1;elseif(!a||a->expn<b->expn)return-1;elsereturn0; }elseif(!a&&b)return-1;//a多項(xiàng)式已空,但b多項(xiàng)式非空elsereturn1;//b多項(xiàng)式已空,但a多項(xiàng)式非空}PolynAddPolyn(Polynpa,Polynpb){//求解并建立多項(xiàng)式a+b,返回其頭指針Polynqa=pa->next;Polynqb=pb->next;Polynheadc,hc,qc;hc=(Polyn)malloc(sizeof(structPolynomial));//建立頭結(jié)點(diǎn)hc->next=NULL;headc=hc;while(qa||qb) {qc=(Polyn)malloc(sizeof(structPolynomial));switch(compare(qa,qb)){case1: {qc->coef=qa->coef;qc->expn=qa->expn;qa=qa->next;break; }case0: {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->next=hc->next;hc->next=qc;hc=qc; }elsefree(qc);//當(dāng)相加系數(shù)為0時(shí),釋放該結(jié)點(diǎn) }returnheadc;}PolynSubtractPolyn(Polynpa,Polynpb){//求解并建立多項(xiàng)式a-b,返回其頭指針Polynh=pb;Polynp=pb->next;Polynpd;while(p) {//將pb系數(shù)取反p->coef*=-1;p=p->next; }pd=AddPolyn(pa,h);for(p=h->next;p;p=p->next)//恢復(fù)pb系數(shù)p->coef*=-1;returnpd;}floatValuePolyn(Polynhead,intx){//輸入x值,計(jì)算并返回多項(xiàng)式值 Polynp;inti,t; floatsum=0;for(p=head->next;p;p=p->next) {t=1;for(i=p->expn;i!=0;) {if(i<0){t/=x;i++;}//指數(shù)小于0,進(jìn)行除法else{t*=x;i--;}//指數(shù)大于0,進(jìn)行乘法 }sum+=p->coef*t; }returnsum;}voidmain(){intm,n,a,x; charflag;Polynpa=0,pb=0,pc;printf("請(qǐng)輸入a項(xiàng)數(shù):");scanf("%d",&m);pa=CreatePolyn(pa,m);//建立多項(xiàng)式aprintf("請(qǐng)輸入b項(xiàng)數(shù):");scanf("%d",&n);pb=CreatePolyn(pb,n);//建立多項(xiàng)式b//輸出菜單 printf("*A:輸出多項(xiàng)式aB:輸出多項(xiàng)式b*\n"); 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 日文版勞動(dòng)合同
- 游戲開(kāi)發(fā)引擎授權(quán)使用及技術(shù)支持服務(wù)協(xié)議
- 三字經(jīng)學(xué)習(xí)感悟
- Oleic-acid-Standard-生命科學(xué)試劑-MCE
- 小學(xué)生經(jīng)典國(guó)學(xué)啟蒙讀后感
- 2-2-Dibutylpropane-1-3-diol-生命科學(xué)試劑-MCE
- 年終團(tuán)隊(duì)建設(shè)活動(dòng)安排
- 年度銷(xiāo)售部門(mén)工作總結(jié)報(bào)告新趨勢(shì)與成效分析
- 公司融資計(jì)劃及投資策略分析
- 試用期員工勞動(dòng)合同
- 原發(fā)性血小板減少性紫癜患者的生活質(zhì)量
- HG20202-2014 脫脂工程施工及驗(yàn)收規(guī)范
- 基層醫(yī)療機(jī)構(gòu)公共衛(wèi)生健康教育工作手冊(cè)(各類(lèi)表格模板)
- 2024版《保密法》培訓(xùn)課件
- 2024年內(nèi)蒙古中考地理生物試卷(含答案)
- 廣東省汕尾市汕尾市2024年中考一模英語(yǔ)試題(含答案)
- LY/T 3378-2024木蠟油地板
- 元宵節(jié)猜燈謎 11
- 施工現(xiàn)場(chǎng)視頻監(jiān)控系統(tǒng)施工方案
- 2024年江西電力職業(yè)技術(shù)學(xué)院?jiǎn)握新殬I(yè)適應(yīng)性測(cè)試題庫(kù)含答案
- (正式版)JTT 1495-2024 公路水運(yùn)危險(xiǎn)性較大工程安全專(zhuān)項(xiàng)施工方案審查規(guī)程
評(píng)論
0/150
提交評(píng)論