一元多項式數(shù)據(jù)結(jié)構(gòu)課程設(shè)計報告_第1頁
一元多項式數(shù)據(jù)結(jié)構(gòu)課程設(shè)計報告_第2頁
一元多項式數(shù)據(jù)結(jié)構(gòu)課程設(shè)計報告_第3頁
一元多項式數(shù)據(jù)結(jié)構(gòu)課程設(shè)計報告_第4頁
一元多項式數(shù)據(jù)結(jié)構(gòu)課程設(shè)計報告_第5頁
已閱讀5頁,還剩16頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、一元多項式計算摘要一元多項式計算是用C語言設(shè)計一個一元多項式簡單計算器。它能夠?qū)崿F(xiàn)按指數(shù)降序排列建立并輸出多項式,并且能夠完成兩個多項式的相加,想減的運算和將其結(jié)果輸入的功能。體會鏈?zhǔn)酱娲鎯Y(jié)構(gòu)的優(yōu)缺點和適用性.了解并掌握數(shù)據(jù)結(jié)構(gòu)與算法的設(shè)計方法,具備初步的獨立分析和設(shè)計能 力;初步掌握軟件開發(fā)過程的問題分析、系統(tǒng)設(shè)計、程序編碼、測試等基本方法和技提高綜合運用所學(xué)的理論知識和方法獨立分析和解決問題的能力;加深對常用數(shù)據(jù)結(jié)構(gòu)的理解,強化學(xué)生的邏輯思維能力和動手能力,鞏固良好的編程習(xí)慣,掌握工程軟件設(shè)計的基本方法,為后續(xù)課程的學(xué)習(xí)打下堅實基礎(chǔ)。關(guān)鍵詞:C語言;一元多項式;鏈?zhǔn)酱娲鎯Y(jié)構(gòu);指數(shù)降序排

2、列;目錄1. 引言-32.需求分析-33.概要設(shè)計-33.1功能模塊圖 -33.2流程圖 -44.詳細(xì)設(shè)計-54.1一元多項式的建立-54.2顯示一元多項式 -64.3一元多項式的加法運算-74.4一元多項式的減法運算-94.5 幫助-125測試結(jié)果-126.調(diào)試分析-137.設(shè)計體會-138.結(jié)束語-149.參考文獻-1510.附錄-151.引言 此程序的數(shù)據(jù)結(jié)構(gòu)是選擇用帶頭結(jié)點的單鏈表存儲多項式。雖然一元多項式可以用順序和鏈?zhǔn)絻煞N存儲結(jié)果表示,但順序結(jié)構(gòu)的最大長度很難確定。比如當(dāng)多項式的系數(shù)較大時,此時就會浪費巨大的存儲空間,所以應(yīng)該選擇用鏈?zhǔn)酱鎯Y(jié)構(gòu)來存儲一元多項式。單鏈表的結(jié)構(gòu)體可以用

3、來存儲多項式的系數(shù),指數(shù),下一個指針3個元素,這樣便于實現(xiàn)任意多項式的加法,減法運算。2.需求分析能夠按照多項式變量的指數(shù)降序創(chuàng)建一個多項式;能夠?qū)σ褎?chuàng)建的多項式進行顯示;能夠?qū)σ褎?chuàng)建的多項式之間的加法運算;能夠?qū)σ褎?chuàng)建的多項式之間的減法運算;能夠?qū)σ褎?chuàng)建的多項式進行刪除;能夠?qū)崿F(xiàn)計算器退出操作;3.概要設(shè)計3.1 功能模塊圖一元多項式計算一元多項式的輸入顯示一元多項式一元多項式加法運算一元多項式減法運算幫助3.2流程圖開始Head=(pnode *)malloc(sizeof(pnode);Rear=head;Scanf(“%f”,&n);scanf(“%d”,&m);S=(

4、pnode *)malloc(sizeof(pnode);s->cofe=n;s->exp=m;s->next=NULLrear->next=s;rear=s;scanf(“%f,&n”);scanf(“%d”,&m)N!=ohead=head->next;Return headNY結(jié)束4.詳細(xì)設(shè)計4.1 一元多項式的建立輸入多項式采用頭插入法的方式,插入多項式中一個項的系數(shù)和指數(shù),就產(chǎn)生一個新的節(jié)點,建立起它的右指針,并用頭結(jié)點指向他;為了判斷一個多項式是否輸入結(jié)束,定義一個結(jié)束標(biāo)志,當(dāng)輸入非0時久繼續(xù),當(dāng)輸入0時,就結(jié)束一個多項式的輸入。算法:

5、pnode * creat()int m;float n; pnode *head,*rear,*s;head=(pnode *)malloc(sizeof(pnode);rear=head;printf("input coef:");scanf("%f",&n);printf("input exp:");scanf("%d",&m);while(n!=0)s=(pnode *)malloc(sizeof(pnode);s->coef=n;s->exp=m;s->next=NULL

6、;rear->next=s;rear=s;printf("input coef:");scanf("%f",&n);printf("input exp:");scanf("%d",&m);head=head->next;return head;4.2 顯示一個多項式 如果系數(shù)是大于0的話就輸出+系數(shù)x指數(shù)的形式;如果系數(shù)是小于0的話就輸出系數(shù)x指數(shù)的形式;如果系數(shù)為0的話,就直接輸出系數(shù);如果系數(shù)是1的話就直接輸出+x;如果系數(shù)是-1的話就直接輸出-x。算法:void display(p

7、node *head)pnode *p;int one_time=1; p=head;while(p!=NULL)if(one_time=1)if(p->exp=0)printf("%f",p->coef);else if(p->coef=1|p->coef=-1)printf("x%d",p->exp);else if(p->coef>0)printf("%fx%d",p->coef,p->exp);else if(p->coef<0)printf("%fx

8、%d",p->coef,p->exp);one_time=0;elseif(p->exp=0)if(p->coef>0)printf("+%f",p->coef);else if(p->coef=1)printf("+x%d",p->exp);else if(p->coef=-1)printf("x%d",p->exp);else if(p->coef>0)printf("+%fx%d",p->coef,p->exp);e

9、lse if(p->coef<0)printf("%fx%d",p->coef,p->exp);p=p->next;printf("n");4.3 一元多項式加法運算 它從兩個多項式的頭部開始,兩個多項式的某一項不為空時,如果指數(shù)相等的話,系數(shù)就相加,相加的和不為0的話,用頭插法建立一個新的節(jié)點。P的指數(shù)小于q的指數(shù)的話,就應(yīng)該復(fù)制q節(jié)點到多項式中。P指數(shù)大于q指數(shù)的話,就應(yīng)該復(fù)制p節(jié)點到多項式中。當(dāng)?shù)诙€多項式空第一個不為空時,將第一個多項式用新節(jié)點產(chǎn)生。當(dāng)?shù)谝粋€多項式空,第二個不為空時,將第二個多項式用新節(jié)點產(chǎn)生。算法:

10、pnode * add(pnode *heada,pnode *headb)pnode *headc,*p,*q,*s,*r;float x; p=heada; q=headb; headc=(pnode *)malloc(sizeof(pnode); r=headc; while(p!=NULL&&q!=NULL) if(p->exp=q->exp) x=p->coef+q->coef; if(x!=0) s=(pnode *)malloc(sizeof(pnode); s->coef=x; s->exp=p->exp; r->

11、next=s; r=s; q=q->next;p=p->next; else if(p->exp<q->exp)s=(pnode *)malloc(sizeof(pnode);s->coef=q->coef; s->exp=q->exp; r->next=s; r=s; q=q->next; else s=(pnode *)malloc(sizeof(pnode); s->coef=p->coef; s->exp=p->exp; r->next=s; r=s; p=p->next; while

12、(p!=NULL) s=(pnode *)malloc(sizeof(pnode); s->coef=p->coef;s->exp=p->exp; r->next=s; r=s; p=p->next; while(q!=NULL) s=(pnode *)malloc(sizeof(pnode); s->coef=q->coef; s->exp=q->exp; r->next=s; r=s; p=p->next; r->next=NULL; headc=headc->next; return headc; 4.4

13、 一元多項式減法運算它從兩個多項式的頭部開始,兩個多項式的某一項不為空時,如果指數(shù)相等的話,系數(shù)就相減,相減的差不為0的話,用頭插法建立一個新的節(jié)點。P的指數(shù)小于q的指數(shù)的話,就應(yīng)該復(fù)制q節(jié)點到多項式中。P指數(shù)大于q指數(shù)的話,就應(yīng)該復(fù)制p節(jié)點到多項式中,并且建立的節(jié)點的系數(shù)為原來的相反數(shù)。當(dāng)?shù)诙€多項式空第一個不為空時,將第一個多項式用新節(jié)點產(chǎn)生。當(dāng)?shù)谝粋€多項式空,第二個不為空時,將第二個多項式用新節(jié)點產(chǎn)生,并且建立的節(jié)點的系數(shù)為原來的相反數(shù)。算法:pnode * sub(pnode *heada,pnode *headb)pnode *headc,*p,*q,*s,*r;float x;p=

14、heada;q=headb;headc=(pnode *)malloc(sizeof(pnode);r=headc;while(p!=NULL&&q!=NULL)if(p->exp=q->exp)x=p->coef-q->coef;if(x!=0)s=(pnode *)malloc(sizeof(pnode);s->coef=x;s->exp=p->exp;r->next=s;r=s;q=q->next;p=p->next;else if(p->exp<q->exp)s=(pnode *)malloc

15、(sizeof(pnode);s->coef=-q->coef;s->exp=q->exp;r->next=s;r=s;q=q->next;elses=(pnode *)malloc(sizeof(pnode);s->coef=p->coef;s->exp=p->exp;r->next=s;r=s;p=p->next;while(p!=NULL)s=(pnode *)malloc(sizeof(pnode);s->coef=p->coef;s->exp=p->exp;r->next=s;r=s

16、;p=p->next;while(q!=NULL)s=(pnode *)malloc(sizeof(pnode);s->coef=-q->coef;s->exp=q->exp; r->next=s;r=s;q=q->next;r->next=NULL;headc=headc->next;return headc;4.5 幫助 提供正確的輸入多項式的方法,以及程序中多項式是如何表示的。算法:void help() printf("*幫助*n"); printf("1.輸入時只輸入多項式的系數(shù)與指數(shù)(0 0表示結(jié)束

17、)n"); printf("2.請按指數(shù)升冪形式輸入.n"); printf("3.例如輸入 "1 1 2 2 0 0" 表示 "1*X1+2*X2"n");5.測試結(jié)果程序運行成功之后如下圖所示此時可以選擇輸入的數(shù)字:0代表退出程序;1代表兩個多項式相加;2代表兩個多項式想減;3代表提供幫助。按1后如下圖所示按2后實現(xiàn)多項式想減如下圖所示按3后幫助如下圖所示6.調(diào)試分析通過以上數(shù)據(jù)對程序的測試分析可知,本程序較好的完成了題目的要求,能夠完成兩個多項式的排序,求值,相加,相減,并將結(jié)果輸出。但在設(shè)計該算法

18、時出現(xiàn)了一些問題,例如在建立鏈表時頭指針的設(shè)立導(dǎo)致了之后運用到相關(guān)的指針時沒能很好的移動指針,不能實現(xiàn)算法。為了是輸入的數(shù)據(jù)按指數(shù)降序排列,可在數(shù)據(jù)的輸入后做一個節(jié)點的排序函數(shù),通過對鏈表排序后在進行之后加減運算。7.設(shè)計體會 這次的課程設(shè)計是通過用我們我們所學(xué)過的帶有頭結(jié)點的單鏈表的數(shù)據(jù)結(jié)構(gòu)為基礎(chǔ)建立一元多項式。在進一步設(shè)計一個一元多項式簡單計數(shù)器。該計數(shù)器能夠按照指數(shù)降序排序建立并輸出多項式,并且能夠完成兩個多項式的相加,相減,并輸出結(jié)果。 通過這次課程設(shè)計,我了解C語言這門課的重要性,我們一定要學(xué)好C語言。C語言功能強,使用靈活,可移植性好,目標(biāo)程序質(zhì)量好,它既有高級程序語言的優(yōu)點,又有

19、低級程序的許多特點,既可以用來編寫系統(tǒng)軟件,又可以用來編寫應(yīng)用軟件,而且C語言語法限制不嚴(yán)格,程序設(shè)計自由度大。所以我們要學(xué)會正確的使用C語言編程,而數(shù)據(jù)結(jié)構(gòu)學(xué)的怎么樣直接影響到我們對其它專業(yè)課的學(xué)習(xí)和今后業(yè)務(wù)的成長。我覺得我們對于數(shù)據(jù)結(jié)構(gòu)的學(xué)習(xí)不僅包括理論部分的學(xué)習(xí),還要讓我們勤東手,多實踐。通過這次課程設(shè)計使我得到了充分的鍛煉,并使自己得到了較大的提高。在編程的過程中善于發(fā)現(xiàn)程序中的錯誤,并且能很快地排除這些錯誤,使程序能正常運行。經(jīng)驗豐富的人,當(dāng)編譯時出現(xiàn)“出錯信息”時,能夠很快地判斷出錯所在,并改正之。而缺乏經(jīng)驗的人即使在明確的出錯提示下也往往找不出錯誤而求救于他人。調(diào)試程序的過程只能

20、“會意”難以“言傳”。因此在試驗時千萬不要再程序通過后就覺得萬事大吉,完成了任務(wù),而應(yīng)當(dāng)在已通過的程序基礎(chǔ)上做一些改動,在進行編譯,連接和運行。8.結(jié)束語在這次課程設(shè)計中,我遇到了不少困難,但是在我的堅持和虛心請教中得到了順利解決。在這次課程設(shè)計中,我發(fā)現(xiàn)理論必須和實踐相結(jié)合,才能真正學(xué)會課程設(shè)計,才能完成一個課題。在這次設(shè)計中我參考了不少書籍,從中學(xué)到了課程中無法學(xué)到的許多東西,對此我感到很興奮。原來不斷的學(xué)習(xí),不斷的探索是苦中帶著甜,雖然經(jīng)歷不少彎曲,經(jīng)歷了不少挫折,但當(dāng)程序調(diào)試成功后,當(dāng)運行能達到要求后,我感到十二分成就感。在這個設(shè)計過程中,不懂的可以虛心學(xué)習(xí)與同學(xué)交流。態(tài)度是成功的試金

21、石。9.參考文獻 譚浩強.C語言程序設(shè)計(第3版).北京:清華大學(xué)出版社,2005 嚴(yán)蔚敏,吳偉明.數(shù)據(jù)結(jié)構(gòu)(C語言版)(M)北京.清華大學(xué)出版社百度文庫:道客巴巴:10.附錄#include<stdio.h>#include<malloc.h>#include<stdlib.h>#include<conio.h>typedef struct pnodefloat coef;int exp;struct pnode *next; pnode;pnode * creat()int m;float n; pnode *head,*rear,*s;he

22、ad=(pnode *)malloc(sizeof(pnode);rear=head;printf("input coef:");scanf("%f",&n);printf("input exp:");scanf("%d",&m);while(n!=0)s=(pnode *)malloc(sizeof(pnode);s->coef=n;s->exp=m;s->next=NULL;rear->next=s;rear=s;printf("input coef:"

23、;);scanf("%f",&n);printf("input exp:");scanf("%d",&m);head=head->next;return head;void tiao_zheng(pnode *head)pnode *p,*q,*t;float temp;p=head;while(p!=NULL)q=p;t=q->next;while(t!=NULL)if(t->exp>q->exp)q=t;t=t->next;temp=p->coef;p->coef=q

24、->coef;q->coef=temp;temp=p->exp;p->exp=q->exp;q->exp=temp;p=p->next;void display(pnode *head)pnode *p;int one_time=1; p=head;while(p!=NULL)if(one_time=1)if(p->exp=0)printf("%f",p->coef);else if(p->coef=1|p->coef=-1)printf("x%d",p->exp);else if(

25、p->coef>0)printf("%fx%d",p->coef,p->exp);else if(p->coef<0)printf("%fx%d",p->coef,p->exp);one_time=0;elseif(p->exp=0)if(p->coef>0)printf("+%f",p->coef);else if(p->coef=1)printf("+x%d",p->exp);else if(p->coef=-1)prin

26、tf("x%d",p->exp);else if(p->coef>0)printf("+%fx%d",p->coef,p->exp);else if(p->coef<0)printf("%fx%d",p->coef,p->exp);p=p->next;printf("n"); pnode * add(pnode *heada,pnode *headb)pnode *headc,*p,*q,*s,*r;float x; p=heada; q=headb; h

27、eadc=(pnode *)malloc(sizeof(pnode); r=headc; while(p!=NULL&&q!=NULL) if(p->exp=q->exp) x=p->coef+q->coef; if(x!=0) s=(pnode *)malloc(sizeof(pnode); s->coef=x; s->exp=p->exp; r->next=s; r=s; q=q->next;p=p->next; else if(p->exp<q->exp)s=(pnode *)malloc(si

28、zeof(pnode);s->coef=q->coef; s->exp=q->exp; r->next=s; r=s; q=q->next; else s=(pnode *)malloc(sizeof(pnode); s->coef=p->coef; s->exp=p->exp; r->next=s; r=s; p=p->next; while(p!=NULL) s=(pnode *)malloc(sizeof(pnode); s->coef=p->coef;s->exp=p->exp; r->

29、;next=s; r=s; p=p->next; while(q!=NULL) s=(pnode *)malloc(sizeof(pnode); s->coef=q->coef; s->exp=q->exp; r->next=s; r=s; p=p->next; r->next=NULL; headc=headc->next; return headc; pnode * sub(pnode *heada,pnode *headb)pnode *headc,*p,*q,*s,*r;float x;p=heada;q=headb;headc=(

30、pnode *)malloc(sizeof(pnode);r=headc;while(p!=NULL&&q!=NULL)if(p->exp=q->exp)x=p->coef-q->coef;if(x!=0)s=(pnode *)malloc(sizeof(pnode);s->coef=x;s->exp=p->exp;r->next=s;r=s;q=q->next;p=p->next;else if(p->exp<q->exp)s=(pnode *)malloc(sizeof(pnode);s->

31、coef=-q->coef;s->exp=q->exp;r->next=s;r=s;q=q->next;elses=(pnode *)malloc(sizeof(pnode);s->coef=p->coef;s->exp=p->exp;r->next=s;r=s;p=p->next;while(p!=NULL)s=(pnode *)malloc(sizeof(pnode);s->coef=p->coef;s->exp=p->exp;r->next=s;r=s;p=p->next;while(q

32、!=NULL)s=(pnode *)malloc(sizeof(pnode);s->coef=-q->coef;s->exp=q->exp; r->next=s;r=s;q=q->next;r->next=NULL;headc=headc->next;return headc; void add_main()pnode * a;pnode *b;pnode *c;printf("input the first:n");a=creat();tiao_zheng(a);printf("input the second:n");b=creat();tiao_zheng(b);c=add(a,b);printf("the first:");display(a);printf("the second:");display(b); printf("sub is:");display(c);void sub_main()pnode * a,*b,*c;p

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論