課程設(shè)計(jì) 一元稀疏多項(xiàng)式簡(jiǎn)單計(jì)數(shù)器_第1頁(yè)
課程設(shè)計(jì) 一元稀疏多項(xiàng)式簡(jiǎn)單計(jì)數(shù)器_第2頁(yè)
課程設(shè)計(jì) 一元稀疏多項(xiàng)式簡(jiǎn)單計(jì)數(shù)器_第3頁(yè)
課程設(shè)計(jì) 一元稀疏多項(xiàng)式簡(jiǎn)單計(jì)數(shù)器_第4頁(yè)
課程設(shè)計(jì) 一元稀疏多項(xiàng)式簡(jiǎn)單計(jì)數(shù)器_第5頁(yè)
已閱讀5頁(yè),還剩21頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

.緒論1.1前言計(jì)算機(jī)是隨著社會(huì)的發(fā)展應(yīng)運(yùn)而生,它貫穿了人們生活的方方面面。其中,在科學(xué)計(jì)算方面,由于算法的高精確和高復(fù)雜度,對(duì)于計(jì)算機(jī)的依賴不可言喻。在這里,我設(shè)計(jì)了一個(gè)一元稀疏多項(xiàng)式簡(jiǎn)單計(jì)數(shù)器,科學(xué)計(jì)算算不上,但作為學(xué)習(xí)性的實(shí)踐,對(duì)自己卻很重要。當(dāng)前計(jì)算機(jī)軟件技術(shù)和網(wǎng)絡(luò)技術(shù)飛速發(fā)展,軟件系統(tǒng)日趨大型化、復(fù)雜化。因此社會(huì)對(duì)軟件開發(fā)者日出了比以往更高的要求。相應(yīng)的系統(tǒng)要求也有了很大的提高。本系統(tǒng)用C語言作為程序語言,設(shè)計(jì)出的系統(tǒng)功能完善,操作方便靈活。1.2問題的提出一元稀疏多項(xiàng)式簡(jiǎn)單計(jì)數(shù)器基本功能要求:(1)輸入并建立多項(xiàng)式(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ù)降序排列。(3)多項(xiàng)式a和b相加,建立多項(xiàng)式a+b,輸出相加的多項(xiàng)式。(4)多項(xiàng)式a和b相減,建立多項(xiàng)式a-b,輸出相減的多項(xiàng)式。用帶表頭結(jié)點(diǎn)的單鏈表存儲(chǔ)多項(xiàng)式。學(xué)院課程設(shè)計(jì)(論文)課程設(shè)計(jì)目的2.課程設(shè)計(jì)目的使我們進(jìn)一步理解和掌握課堂上所學(xué)各種基本抽象數(shù)據(jù)類型的邏輯結(jié)構(gòu)、存儲(chǔ)結(jié)構(gòu)和操作實(shí)現(xiàn)算法,以及它們?cè)诔绦蛑械氖褂梅椒āJ刮覀冋莆哲浖O(shè)計(jì)的基本內(nèi)容和設(shè)計(jì)方法,并培養(yǎng)學(xué)生進(jìn)行規(guī)范化軟件設(shè)計(jì)的能力。使我們掌握使用各種計(jì)算機(jī)資料和有關(guān)參考資料,提高學(xué)生進(jìn)行程序設(shè)計(jì)的基本能力。熟練掌握數(shù)據(jù)結(jié)構(gòu)這門課程,掌握線性表、棧、隊(duì)列、串、數(shù)組、廣義表、樹和二叉樹以及圖等基本類型的數(shù)據(jù)結(jié)構(gòu)及其應(yīng)用。進(jìn)一步熟悉抽象數(shù)據(jù)類型的定義和實(shí)現(xiàn)、如何利用數(shù)組的動(dòng)態(tài)分酚實(shí)現(xiàn)順序結(jié)構(gòu)、繼承的實(shí)現(xiàn)方式。學(xué)會(huì)分析研究計(jì)算機(jī)加工的數(shù)據(jù)結(jié)構(gòu)的特性,以便為應(yīng)用涉及的數(shù)據(jù)選擇適當(dāng)?shù)倪壿嫿Y(jié)構(gòu)、想念結(jié)構(gòu)及基相應(yīng)的算法并初步掌握算法的時(shí)間分析和空間分析的技術(shù)。基本掌握程序設(shè)計(jì)的基本思路和方法。利用所學(xué)的基本知識(shí)和技能,解決簡(jiǎn)單的程序設(shè)計(jì)問題各算法描述培養(yǎng)我們的數(shù)據(jù)抽象能力。學(xué)院課程設(shè)計(jì)(論文)需求分析3.需求分析3.1功能分析本程序要求輸入并建立多項(xiàng)式,能夠降冪顯示出多項(xiàng)式,實(shí)現(xiàn)多項(xiàng)式相加相減的計(jì)算問題,輸出結(jié)果。3.2設(shè)計(jì)思路采用鏈表的方式存儲(chǔ)鏈表,定義結(jié)點(diǎn)結(jié)構(gòu)體。運(yùn)用尾差法建立兩條單鏈表,以單鏈表polynp和polynh分別表示兩個(gè)一元多項(xiàng)式a和b。為實(shí)現(xiàn)處理,社p、q分別指向單鏈表polya和polyb的當(dāng)前項(xiàng),比較p、q結(jié)點(diǎn)的指數(shù)項(xiàng)。①若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在原來的鏈表上后移。學(xué)院課程設(shè)計(jì)(論文)概要設(shè)計(jì)4.概要設(shè)計(jì)4.1數(shù)據(jù)結(jié)構(gòu)的選用typedefstructPolynomial{floatcoef;//系數(shù)intexpn;//指數(shù)structPolynomial*next;}*Polyn,Polynomial;4.2多項(xiàng)式的輸入PolynCreatePolyn(Polynhead,intm){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;}4.3主函數(shù)和其它函數(shù)voidmain(){intm,n,a,x; charflag;Polynpa=0,pb=0,pc;}voidDestroyPolyn(Polynp)voidPrintPolyn(PolynP)intcompare(Polyna,Polynb)PolynAddPolyn(Polynpa,Polynpb)PolynSubtractPolyn(Polynpa,Polynpb)學(xué)院課程設(shè)計(jì)(論文)流程圖設(shè)計(jì)5.流程圖設(shè)計(jì)5.1函數(shù)調(diào)用關(guān)系5.2程序流程圖學(xué)院課程設(shè)計(jì)(論文)程序代碼6.程序代碼#include<stdio.h>#include<malloc.h>typedefstructPolynomial{//項(xiàng)的表示floatcoef;//系數(shù)intexpn;//指數(shù)structPolynomial*next;//指針域}*Polyn,Polynomial;//Polyn為結(jié)點(diǎn)指針類型voidInsert(Polynp,Polynh){//插入或者合并if(p->coef==0)free(p);//系數(shù)為0的話釋放結(jié)點(diǎn)else{Polynq1,q2;q1=h;q2=h->next;while(q2&&p->expn<q2->expn){//查找插入位置p與h項(xiàng)一次比較指數(shù)q1=q2;q2=q2->next;}if(q2&&p->expn==q2->expn){//將指數(shù)相同相合并q2->coef+=p->coef;free(p);if(!q2->coef){//系數(shù)為0的話釋放結(jié)點(diǎn)q1->next=q2->next;free(q2);}}else{//指數(shù)為新時(shí)將結(jié)點(diǎn)插入即p->expn>q2expn情況p->next=q2;q1->next=p;}}}//InsertPolynCreatePolyn(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;}//CreatePolynvoidDestroyPolyn(Polynp){//銷毀多項(xiàng)式pPolynq1,q2;q1=p->next;q2=q1->next;while(q1->next){free(q1);//釋放q1q1=q2;//指針后移,循環(huán)繼續(xù)釋放,直至銷毀q2=q2->next;}}voidPrintPolyn(PolynP){//輸出多項(xiàng)式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');//系數(shù)為1的情況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++;}//whileprintf("\n");}//PrintPolynintcompare(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)式非空}//comparePolynAddPolyn(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)){//調(diào)用compare返回值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;}}//switchif(qc->coef!=0){qc->next=hc->next;hc->next=qc;hc=qc;}elsefree(qc);//當(dāng)相加系數(shù)為0時(shí),釋放該結(jié)點(diǎn)}//whilereturnheadc;}//AddPolynPolynSubtractPolyn(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;}//SubtractPolynintmain(){//主函數(shù)intm,n,flag=0;floatx;Polynpa=0,pb=0,pc,pd,pe,pf;//定義各式的頭指針,pa與pb在使用前付初值NULLprintf("請(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)式a//輸出菜單printf("**********************************************\n");printf("操作提示:\n\t1.輸出多項(xiàng)式a和b\n\t2.建立多項(xiàng)式a+b\n\t3.建立多項(xiàng)式a-b\n\t4.退出\n");for(;;flag=0){printf("執(zhí)行操作");scanf("%d",&flag);if(flag==1){//輸出多項(xiàng)式printf("多項(xiàng)式a:");PrintPolyn(pa);printf("多項(xiàng)式b:");PrintPolyn(pb);continue;}if(flag==2){//多項(xiàng)式相加pc=AddPolyn(pa,pb);//調(diào)用函數(shù),實(shí)現(xiàn)相加printf("多項(xiàng)式a+b:");PrintPolyn(pc);DestroyPolyn(pc);continue;}if(flag==3){//多項(xiàng)式相減pd=SubtractPolyn(pa,pb);printf("多項(xiàng)式a-b:");PrintPolyn(pd);DestroyPolyn(pd);continue;}if(flag==4)break;//結(jié)束循環(huán),退出DestroyPolyn(pa);//銷毀多項(xiàng)式,釋放內(nèi)存DestroyPolyn(pb);return0;}}學(xué)院課程設(shè)計(jì)(論文)調(diào)試運(yùn)行7.調(diào)試運(yùn)行7.1運(yùn)行程序操作平臺(tái):硬件要求:PC機(jī)一臺(tái)軟件要求:windowsXP以上操作系統(tǒng)VC++軟件7.2程序的載入7.3程序的編譯7.4程序運(yùn)行測(cè)試數(shù)據(jù)(1)(2x+5x8-3.1x11)+(7-5x8+11x9)(2)(6x-3-x+4.4x2-1.2x9)-(-6x-3+5.4x2+7.8x15)(3)(x+x2+x3)+0(4)(x+x3)-(-x-x-3)學(xué)院課程設(shè)計(jì)(論文)總結(jié)8.總結(jié)這次課程設(shè)計(jì)是對(duì)數(shù)據(jù)結(jié)構(gòu)掌握的一次很有分量的測(cè)試。確實(shí)自己在這次課程設(shè)計(jì)中認(rèn)識(shí)到自己很多的不足。想了很多,思考了很多。對(duì)于知識(shí)的把握和編程的經(jīng)驗(yàn)自己真的是差的太遠(yuǎn)。編程是個(gè)細(xì)致活。不溫不火,不急不躁。在五天的編程過程中,這點(diǎn)深有體會(huì)。想法太成熟,筆快容易失誤;知識(shí)太生疏,筆慢錯(cuò)誤多。當(dāng)然,不能強(qiáng)求不出現(xiàn)錯(cuò)誤。在編程過程要善于發(fā)現(xiàn)程序中的錯(cuò)誤,并且能很快地排除這些錯(cuò)誤,使程序能正確運(yùn)行。經(jīng)驗(yàn)豐富的人在錯(cuò)誤出現(xiàn)時(shí),能很快的判斷出錯(cuò)誤的所在,并改之;經(jīng)驗(yàn)少的人,則往往要花費(fèi)大量的時(shí)間和氣力。我相信老師說的,很多程序的編寫都有靈感的參與,下次再次看自己程序的時(shí)候,也許不能很好的明白當(dāng)初某些地方的初衷。因此,在編程中,在思想靈感爆發(fā)的時(shí)候,最好的做法就是在旁邊寫上注釋。這次設(shè)計(jì)自己就走了很多彎路,程序一長(zhǎng),沒有注釋,整理調(diào)試的時(shí)候就很難快速找到問題所在。當(dāng)然我不避諱自己知識(shí)的把握太差,反而應(yīng)該更加驚醒。C語言雖然是最基礎(chǔ)的語言,但是其價(jià)值性卻不容忽視。簡(jiǎn)單的說,學(xué)會(huì)了C語言,很多語言的上手就顯得很容易。當(dāng)初對(duì)于C的學(xué)習(xí)確實(shí)有諸多的忽略,以為掌握了基本的語法過了二級(jí)就行。現(xiàn)在看來,C部分最精華最難的指針和結(jié)構(gòu)體,指針和數(shù)組自己都掌握的一塌糊涂。這學(xué)期的數(shù)據(jù)結(jié)構(gòu)課程又是C語言版的,在學(xué)習(xí)的過程中難免要咀嚼和回顧C(jī)知識(shí)。因此學(xué)起來其實(shí)不是很舒服的。很多知識(shí)點(diǎn)自己都是知其表而不懂其用。加之課程又緊,一知半解的半年過去了。

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論