版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、<p><b> 《數(shù)據(jù)結(jié)構(gòu)》</b></p><p><b> 課程設計報告</b></p><p> 學 號: </p><p> 姓 名: </p><p> 班 級: 1
2、0計算機科學與技術(shù)(2)班 </p><p> 指導教師: </p><p> 成 績: </p><p><b> 課程設計基本情況</b></p><p><b> 1、設計名稱</b></p>&
3、lt;p><b> 一元多項式計算</b></p><p><b> 2、主要功能</b></p><p> 能夠按照指數(shù)降序排列建立并輸出多項式;能夠完成兩個多項式的相加、相減,并將結(jié)果輸出;</p><p><b> 3、設計平臺</b></p><p>
4、電腦、Visual c++ 6.0</p><p><b> 系統(tǒng)設計</b></p><p><b> 1、算法思想</b></p><p> 根據(jù)一元多項式相加的運算規(guī)則:對于兩個一元多項式中所有指數(shù)相同的項,對應指數(shù)相加(減),若其和(差)不為零,則構(gòu)成“和(差)多項式”中的一項;對于兩個一元多項式中所有指數(shù)不
5、相同的項,則分別寫到“和(差)多項式”中去。</p><p> 因為多項式指數(shù)最高項以及項數(shù)是不確定的,因此采用線性鏈表的存儲結(jié)構(gòu)便于實現(xiàn)一元多項式的運算。為了節(jié)省空間,我采用兩個鏈表分別存放多項式a和多項式b,對于最后計算所得的多項式則利用多項式a進行存儲。主要用到了單鏈表的插入和刪除操作。</p><p><b> 一元多項式加法運算</b></p>
6、;<p> 它從兩個多項式的頭部開始,兩個多項式的某一項都不為空時,如果指數(shù)相等的話,系數(shù)就應該相加;相加的和不為零的話,用頭插法建立一個新的節(jié)點。P的指數(shù)小于q的指數(shù)的話就應該復制q的節(jié)點到多項式中。P的指數(shù)大于q的指數(shù)的話,就應該復制p節(jié)點到多項式中。當?shù)诙€多項式空,第一個多項式不為空時,將第一個多項式用新節(jié)點產(chǎn)生。當?shù)谝粋€多項式空,第二個多項式不為空時,將第二個多項式用新節(jié)點產(chǎn)生。</p><
7、p> 一元多項式的減法運算</p><p> 它從兩個多項式的頭部開始,兩個多項式的某一項都不為空時,如果指數(shù)相等的話,系數(shù)就相減;相加的和不為零的話,用頭插法建立一個新的節(jié)點。p的指數(shù)小于q的指數(shù)的話,就應該復制q的節(jié)點到多項式中。P的指數(shù)大于q的指數(shù)的話就應該復制p的節(jié)點到多項式中,并且建立的節(jié)點的系數(shù)為原來的相反數(shù);當?shù)诙€多項式空,第一個多項式不為空時,將第一個多項式用新節(jié)點產(chǎn)生。當?shù)谝粋€多項式
8、空,第二個多項式不為空時,將第二個多項式用新節(jié)點產(chǎn)生,并且建立的節(jié)點的系數(shù)為原來的相反數(shù)。</p><p><b> 2、概要設計</b></p><p> (1)主函數(shù)流程圖:</p><p> ?。ㄗⅲ篴代表第一個一元二次方程,b代表第二個一元二次方程)</p><p> (2)一元多項式計算算法用類C語言表示
9、:</p><p> Typedef struct00{ //項的表示,多項式的項作為LinkList的數(shù)據(jù)元素</p><p> Float coef; //細數(shù)</p><p> Int expn;//指數(shù)</p><p> }term,ElemType;//兩個類型名:term用于本ADT,ElemType為LinkList的數(shù)
10、據(jù)對象名</p><p> Typedef LinkList polynomial: //用帶表頭的節(jié)點的有序鏈表表示多項式</p><p> //基本操作的函數(shù)原型說明</p><p> Void CreatePolyn(polynomail&P);</p><p> //輸入n的系數(shù)和指數(shù),建立表示一元多項式的有序鏈表P
11、 銷毀一元多項式P</p><p> Void DestroyPolyn(polynomailP);</p><p><b> 銷毀一元多項式P</b></p><p> voidPrintPoly(polynomail P);</p><p> //打印輸入一元多項式P</p><p&
12、gt; IntPolynLength(polynnomail P);</p><p> //返回一元多項式P中的項數(shù)</p><p> void CreatPolyn(polynomail&Pa.polunomail&Pb);</p><p> //完成多項式相加運算,即:Pa=Pa+Pb,并賢惠一元多項式Pb</p><
13、p> voidSubtractPolyn(polunomail&Papolunomail&Pb);</p><p> //完成多項式相減運算,即:Pa=Pa-Pb,并銷毀一元多項式Pb</p><p> //基本操作的算法描述</p><p> Int cmp(tem a,temp b);</p><p> /
14、/依a的指數(shù)值<(或=)(或>b的住數(shù)值,分別返回-1、0和+1</p><p> Void CreatePolyn(polynomail&P,int m){</p><p> //輸入m項的系數(shù)和指數(shù),建立表示一元多項式的有序鏈表P</p><p> InitList(P);h=GetHead(P);</p><p&
15、gt; E.coef=0.0;e.expn=-1;SerCurElem(h,e);//設置頭結(jié)點的數(shù)據(jù)元素</p><p> For (i=1;i<=m;++i){//依次輸入m個非零項</p><p> Scanf(e.coef,e.epn);</p><p> If(!LocateElem(P,e,q,(*cmp)())){//當前鏈表中
16、不存在該指數(shù)項</p><p> If(MakeNode(s,e))InsFirst(q,s);//生成節(jié)點并插入鏈表</p><p><b> }</b></p><p><b> }</b></p><p> }//CreatPolun</p><p><
17、;b> 詳細設計</b></p><p><b> 1、算法實現(xiàn)</b></p><p> 輸入一元多項式函數(shù):</p><p> void shuchu(pnode *head) </p><p><b> { </b></p><p> pn
18、ode *p; </p><p> int one_time=1; </p><p><b> p=head; </b></p><p> while(p!=NULL) /*如果不為空*/ </p><p><b> { </b></p><p> if(one_t
19、ime==1) </p><p><b> { </b></p><p> if(p->zhishu==0) /*如果指數(shù)為0的話,直接輸出系數(shù)*/ </p><p> printf("%5.2f",p->xishu); /*如果系數(shù)是正的話前面就要加+號*/ </p><p>
20、else if(p->xishu==1||p->xishu==-1) </p><p> printf("X^%d",p->zhishu); /*如果系數(shù)是1的話就直接輸出+x*/ </p><p> /*如果系數(shù)是-1的話就直接輸出-x號*/ </p><p> else if(p->xishu>0) /*
21、如果系數(shù)是大于0的話就輸出+系數(shù)x^指數(shù)的形式*/ </p><p> printf("%5.2fX^%d",p->xishu,p->zhishu); </p><p> else if(p->xishu<0) /*如果系數(shù)是小于0的話就輸出系數(shù)x^指數(shù)的形式*/ </p><p> printf("%5.
22、2fX^%d",p->xishu,p->zhishu); </p><p> one_time=0; </p><p><b> } </b></p><p><b> else{ </b></p><p> if(p->zhishu==0) /*如果指數(shù)為0的話
23、,直接輸出系數(shù)*/ </p><p><b> { </b></p><p> if(p->xishu>0) </p><p> printf("+%5.2f",p->xishu); /*如果系數(shù)是正的話前面就要加+號*/ </p><p><b> } </
24、b></p><p> else if(p->xishu==1) /*如果系數(shù)是1的話就直接輸出+x號*/ </p><p> printf("+X^%d",p->zhishu); </p><p> else if(p->xishu==-1) /*如果系數(shù)是-1的話就直接輸出-x號*/ </p>&l
25、t;p> printf("X^%d",p->zhishu); </p><p> else if(p->xishu>0) /*如果系數(shù)是大于0的話就輸出+系數(shù)x^指數(shù)的形式*/ </p><p> printf("+%5.2fX^%d",p->xishu,p->zhishu); </p><
26、;p> else if(p->xishu<0) /*如果系數(shù)是小于0的話就輸出系數(shù)x^指數(shù)的形式*/ </p><p> printf("%5.2fX^%d",p->xishu,p->zhishu); </p><p><b> } </b></p><p> p=p->next;
27、 /*指向下一個指針*/ </p><p><b> } </b></p><p> printf("\n"); </p><p><b> } </b></p><p><b> 加法函數(shù)</b></p><p> /*兩
28、個多項式的加法運算*/ </p><p> pnode * add(pnode *heada,pnode *headb) </p><p><b> { </b></p><p> pnode *headc,*p,*q,*s,*r; /*headc為頭指針,r,s為臨時指針,p指向第1個多項式并向右移動,q指向第2個多項式并向右移動*/
29、</p><p> float x; /*x為系數(shù)的求和*/ </p><p> p=heada; /*指向第一個多項式的頭*/ </p><p> q=headb; /*指向第二個多項式的頭*/ </p><p> headc=(pnode *)malloc(sizeof(pnode)); /*開辟空間*/ </p>
30、<p><b> r=headc; </b></p><p> while(p!=NULL&&q!=NULL) /*2個多項式的某一項都不為空時*/ </p><p><b> { </b></p><p> if(p->zhishu==q->zhishu) /*指數(shù)相等的話*
31、/ </p><p><b> { </b></p><p> x=p->xishu+q->xishu; /*系數(shù)就應該相加*/ </p><p> if(x!=0) /*相加的和不為0的話*/ </p><p><b> { </b></p><p>
32、 s=(pnode *)malloc(sizeof(pnode)); /*用頭插法建立一個新的節(jié)點*/ </p><p> s->xishu=x; </p><p> s->zhishu=p->zhishu; </p><p> r->next=s; </p><p><b> r=s; </b
33、></p><p><b> } </b></p><p> q=q->next;p=p->next; /*2個多項式都向右移*/ </p><p><b> } </b></p><p> else if(p->zhishu<q->zhishu) /*p
34、的系數(shù)小于q的系數(shù)的話,就應該復制q節(jié)點到多項式中*/ </p><p><b> { </b></p><p> s=(pnode *)malloc(sizeof(pnode)); </p><p> s->xishu=q->xishu; </p><p> s->zhishu=q->z
35、hishu; </p><p> r->next=s; </p><p><b> r=s; </b></p><p> q=q->next; /*q向右移動*/ </p><p><b> } </b></p><p> else/*p的系數(shù)大于q的系
36、數(shù)的話,就應該復制p節(jié)點到多項式中*/ </p><p><b> { </b></p><p> s=(pnode *)malloc(sizeof(pnode)); </p><p> s->xishu=p->xishu; </p><p> s->zhishu=p->zhishu; &
37、lt;/p><p> r->next=s; </p><p><b> r=s; </b></p><p> p=p->next; /*p向右移動*/ </p><p><b> } </b></p><p><b> } </b>&l
38、t;/p><p> /*當?shù)?個多項式空,第1個數(shù)不為空時,將第一個數(shù)剩下的全用新節(jié)點產(chǎn)生*/ </p><p> while(p!=NULL) </p><p><b> { </b></p><p> s=(pnode *)malloc(sizeof(pnode)); </p><p>
39、 s->xishu=p->xishu; </p><p> s->zhishu=p->zhishu; </p><p> r->next=s; </p><p><b> r=s; </b></p><p> p=p->next; </p><p>&l
40、t;b> } </b></p><p> /*當?shù)?個多項式空,第1個數(shù)不為空時,將第2個數(shù)剩下的全用新節(jié)點產(chǎn)生*/ </p><p> while(q!=NULL) </p><p><b> { </b></p><p> s=(pnode *)malloc(sizeof(pnode));
41、 </p><p> s->xishu=q->xishu; </p><p> s->zhishu=q->zhishu; </p><p> r->next=s; </p><p><b> r=s; </b></p><p> q=q->next;
42、</p><p><b> } </b></p><p> r->next=NULL; /*最后指向空*/ </p><p> headc=headc->next; /*第一個頭沒有用到*/ </p><p> return headc; /*返回頭接點*/ </p><p>
43、<b> } </b></p><p><b> 減法函數(shù)</b></p><p> /*兩個多項式的加法運算*/ </p><p> pnode * add(pnode *heada,pnode *headb) </p><p><b> { </b></p&
44、gt;<p> pnode *headc,*p,*q,*s,*r; /*headc為頭指針,r,s為臨時指針,p指向第1個多項式并向右移動,q指向第2個多項式并向右移動*/ </p><p> float x; /*x為系數(shù)的求和*/ </p><p> p=heada; /*指向第一個多項式的頭*/ </p><p> q=headb; /*
45、指向第二個多項式的頭*/ </p><p> headc=(pnode *)malloc(sizeof(pnode)); /*開辟空間*/ </p><p><b> r=headc; </b></p><p> while(p!=NULL&&q!=NULL) /*2個多項式的某一項都不為空時*/ </p>
46、<p><b> { </b></p><p> if(p->zhishu==q->zhishu) /*指數(shù)相等的話*/ </p><p><b> { </b></p><p> x=p->xishu+q->xishu; /*系數(shù)就應該相加*/ </p><p
47、> if(x!=0) /*相加的和不為0的話*/ </p><p><b> { </b></p><p> s=(pnode *)malloc(sizeof(pnode)); /*用頭插法建立一個新的節(jié)點*/ </p><p> s->xishu=x; </p><p> s->zhishu
48、=p->zhishu; </p><p> r->next=s; </p><p><b> r=s; </b></p><p><b> } </b></p><p> q=q->next;p=p->next; /*2個多項式都向右移*/ </p>&
49、lt;p><b> } </b></p><p> else if(p->zhishu<q->zhishu) /*p的系數(shù)小于q的系數(shù)的話,就應該復制q節(jié)點到多項式中*/ </p><p><b> { </b></p><p> s=(pnode *)malloc(sizeof(pnode
50、)); </p><p> s->xishu=q->xishu; </p><p> s->zhishu=q->zhishu; </p><p> r->next=s; </p><p><b> r=s; </b></p><p> q=q->nex
51、t; /*q向右移動*/ </p><p><b> } </b></p><p> else/*p的系數(shù)大于q的系數(shù)的話,就應該復制p節(jié)點到多項式中*/ </p><p><b> { </b></p><p> s=(pnode *)malloc(sizeof(pnode)); <
52、/p><p> s->xishu=p->xishu; </p><p> s->zhishu=p->zhishu; </p><p> r->next=s; </p><p><b> r=s; </b></p><p> p=p->next; /*p向右
53、移動*/ </p><p><b> } </b></p><p><b> } </b></p><p> /*當?shù)?個多項式空,第1個數(shù)不為空時,將第一個數(shù)剩下的全用新節(jié)點產(chǎn)生*/ </p><p> while(p!=NULL) </p><p><b&g
54、t; { </b></p><p> s=(pnode *)malloc(sizeof(pnode)); </p><p> s->xishu=p->xishu; </p><p> s->zhishu=p->zhishu; </p><p> r->next=s; </p>
55、<p><b> r=s; </b></p><p> p=p->next; </p><p><b> } </b></p><p> /*當?shù)?個多項式空,第1個數(shù)不為空時,將第2個數(shù)剩下的全用新節(jié)點產(chǎn)生*/ </p><p> while(q!=NULL) </
56、p><p><b> { </b></p><p> s=(pnode *)malloc(sizeof(pnode)); </p><p> s->xishu=q->xishu; </p><p> s->zhishu=q->zhishu; </p><p> r-&
57、gt;next=s; </p><p><b> r=s; </b></p><p> q=q->next; </p><p><b> } </b></p><p> r->next=NULL; /*最后指向空*/ </p><p> headc=he
58、adc->next; /*第一個頭沒有用到*/ </p><p> return headc; /*返回頭接點*/ </p><p><b> } </b></p><p><b> 程序代碼</b></p><p> /*一元多項式計算*/</p><p>
59、 /*程序功能:能夠按照指數(shù)降序排列建立并輸出多項式;能夠完成兩個多項式的相加、相減,并將結(jié)果輸出;*/</p><p> /*提示:輸入完一元多項式之后,輸入“0 0”結(jié)束本一元多項式的輸入*/</p><p> /*注意:系數(shù)只精確到百分位,最大系數(shù)只能為999.99,指數(shù)為整數(shù).如果需要輸入更大的系數(shù),可以對程序中5.2%f進行相應的修改*/</p><p&g
60、t; #include<stdio.h> </p><p> #include<malloc.h> </p><p> #include<stdlib.h> </p><p> #include<conio.h> </p><p> /*建立結(jié)構(gòu)體*/ </p><
61、p> typedef struct pnode </p><p><b> { </b></p><p> float xishu; /*系數(shù) */ </p><p> int zhishu; /*指數(shù) */ </p><p> struct pnode *next; /*下一個指針*/ </p&g
62、t;<p><b> }pnode; </b></p><p> /*用頭插法生成一個多項式,系數(shù)和指數(shù)輸入0時退出輸入*/ </p><p> pnode * creat() </p><p><b> { </b></p><p><b> int m; <
63、;/b></p><p> float n; </p><p> pnode *head,*rear,*s; /*head為頭指針,rear和s為臨時指針*/ </p><p> head=(pnode *)malloc(sizeof(pnode)); </p><p> rear=head; /*指向頭*/ </p&g
64、t;<p> scanf("%f",&n); /*系數(shù)*/</p><p> scanf("%d",&m); /*輸入指數(shù)*/</p><p> while(n!=0) /*輸入0退出*/ </p><p><b> { </b></p><p&
65、gt; s=(pnode *)malloc(sizeof(pnode)); </p><p> s->xishu=n; </p><p> s->zhishu=m; </p><p> s->next=NULL; </p><p> rear->next=s; /*頭插法*/ </p><
66、p><b> rear=s; </b></p><p> scanf("%f",&n); /*輸入系數(shù)*/ </p><p> scanf("%d",&m); /*輸入指數(shù)*/</p><p><b> } </b></p><p&
67、gt; head=head->next; /*第一個頭沒有用到*/ </p><p> return head; </p><p><b> }</b></p><p> /*調(diào)整多項式*/ </p><p> void tiaozhen(pnode *head) </p><p>
68、;<b> { </b></p><p> pnode *p,*q,*t; </p><p> float temp; </p><p><b> p=head; </b></p><p> while(p!=NULL) </p><p><b> {
69、</b></p><p><b> q=p; </b></p><p> t=q->next; </p><p> while(t!=NULL) </p><p><b> { </b></p><p> if(t->zhishu>q-
70、>zhishu) </p><p><b> q=t; </b></p><p> t=t->next; </p><p><b> } </b></p><p> temp=p->xishu;p->xishu=q->xishu;q->xishu=temp
71、; </p><p> temp=p->zhishu;p->zhishu=q->zhishu;q->zhishu=temp; </p><p> p=p->next; </p><p><b> } </b></p><p><b> } </b></p&
72、gt;<p> /*顯示一個多項式*/ </p><p> void shuchu(pnode *head) </p><p><b> { </b></p><p> pnode *p; </p><p> int one_time=1; </p><p><b&g
73、t; p=head; </b></p><p> while(p!=NULL) /*如果不為空*/ </p><p><b> { </b></p><p> if(one_time==1) </p><p><b> { </b></p><p>
74、if(p->zhishu==0) /*如果指數(shù)為0的話,直接輸出系數(shù)*/ </p><p> printf("%5.2f",p->xishu); /*如果系數(shù)是正的話前面就要加+號*/ </p><p> else if(p->xishu==1||p->xishu==-1) </p><p> printf(&qu
75、ot;X^%d",p->zhishu); /*如果系數(shù)是1的話就直接輸出+x*/ </p><p> /*如果系數(shù)是-1的話就直接輸出-x號*/ </p><p> else if(p->xishu>0) /*如果系數(shù)是大于0的話就輸出+系數(shù)x^指數(shù)的形式*/ </p><p> printf("%5.2fX^%d&quo
76、t;,p->xishu,p->zhishu); </p><p> else if(p->xishu<0) /*如果系數(shù)是小于0的話就輸出系數(shù)x^指數(shù)的形式*/ </p><p> printf("%5.2fX^%d",p->xishu,p->zhishu); </p><p> one_time=0;
77、</p><p><b> } </b></p><p><b> else{ </b></p><p> if(p->zhishu==0) /*如果指數(shù)為0的話,直接輸出系數(shù)*/ </p><p><b> { </b></p><p>
78、 if(p->xishu>0) </p><p> printf("+%5.2f",p->xishu); /*如果系數(shù)是正的話前面就要加+號*/ </p><p><b> } </b></p><p> else if(p->xishu==1) /*如果系數(shù)是1的話就直接輸出+x號*/ &l
79、t;/p><p> printf("+X^%d",p->zhishu); </p><p> else if(p->xishu==-1) /*如果系數(shù)是-1的話就直接輸出-x號*/ </p><p> printf("X^%d",p->zhishu); </p><p> else
80、 if(p->xishu>0) /*如果系數(shù)是大于0的話就輸出+系數(shù)x^指數(shù)的形式*/ </p><p> printf("+%5.2fX^%d",p->xishu,p->zhishu); </p><p> else if(p->xishu<0) /*如果系數(shù)是小于0的話就輸出系數(shù)x^指數(shù)的形式*/ </p>&l
81、t;p> printf("%5.2fX^%d",p->xishu,p->zhishu); </p><p><b> } </b></p><p> p=p->next; /*指向下一個指針*/ </p><p><b> } </b></p><p&
82、gt; printf("\n"); </p><p><b> } </b></p><p> /*兩個多項式的加法運算*/ </p><p> pnode * add(pnode *heada,pnode *headb) </p><p><b> { </b><
83、;/p><p> pnode *headc,*p,*q,*s,*r; /*headc為頭指針,r,s為臨時指針,p指向第1個多項式并向右移動,q指向第2個多項式并向右移動*/ </p><p> float x; /*x為系數(shù)的求和*/ </p><p> p=heada; /*指向第一個多項式的頭*/ </p><p> q=headb
84、; /*指向第二個多項式的頭*/ </p><p> headc=(pnode *)malloc(sizeof(pnode)); /*開辟空間*/ </p><p><b> r=headc; </b></p><p> while(p!=NULL&&q!=NULL) /*2個多項式的某一項都不為空時*/ </p&g
85、t;<p><b> { </b></p><p> if(p->zhishu==q->zhishu) /*指數(shù)相等的話*/ </p><p><b> { </b></p><p> x=p->xishu+q->xishu; /*系數(shù)就應該相加*/ </p>&
86、lt;p> if(x!=0) /*相加的和不為0的話*/ </p><p><b> { </b></p><p> s=(pnode *)malloc(sizeof(pnode)); /*用頭插法建立一個新的節(jié)點*/ </p><p> s->xishu=x; </p><p> s->zh
87、ishu=p->zhishu; </p><p> r->next=s; </p><p><b> r=s; </b></p><p><b> } </b></p><p> q=q->next;p=p->next; /*2個多項式都向右移*/ </p>
88、;<p><b> } </b></p><p> else if(p->zhishu<q->zhishu) /*p的系數(shù)小于q的系數(shù)的話,就應該復制q節(jié)點到多項式中*/ </p><p><b> { </b></p><p> s=(pnode *)malloc(sizeof(p
89、node)); </p><p> s->xishu=q->xishu; </p><p> s->zhishu=q->zhishu; </p><p> r->next=s; </p><p><b> r=s; </b></p><p> q=q->
90、;next; /*q向右移動*/ </p><p><b> } </b></p><p> else/*p的系數(shù)大于q的系數(shù)的話,就應該復制p節(jié)點到多項式中*/ </p><p><b> { </b></p><p> s=(pnode *)malloc(sizeof(pnode));
91、</p><p> s->xishu=p->xishu; </p><p> s->zhishu=p->zhishu; </p><p> r->next=s; </p><p><b> r=s; </b></p><p> p=p->next; /
92、*p向右移動*/ </p><p><b> } </b></p><p><b> } </b></p><p> /*當?shù)?個多項式空,第1個數(shù)不為空時,將第一個數(shù)剩下的全用新節(jié)點產(chǎn)生*/ </p><p> while(p!=NULL) </p><p><
93、;b> { </b></p><p> s=(pnode *)malloc(sizeof(pnode)); </p><p> s->xishu=p->xishu; </p><p> s->zhishu=p->zhishu; </p><p> r->next=s; </p&g
94、t;<p><b> r=s; </b></p><p> p=p->next; </p><p><b> } </b></p><p> /*當?shù)?個多項式空,第1個數(shù)不為空時,將第2個數(shù)剩下的全用新節(jié)點產(chǎn)生*/ </p><p> while(q!=NULL) &
95、lt;/p><p><b> { </b></p><p> s=(pnode *)malloc(sizeof(pnode)); </p><p> s->xishu=q->xishu; </p><p> s->zhishu=q->zhishu; </p><p>
96、 r->next=s; </p><p><b> r=s; </b></p><p> q=q->next; </p><p><b> } </b></p><p> r->next=NULL; /*最后指向空*/ </p><p> head
97、c=headc->next; /*第一個頭沒有用到*/ </p><p> return headc; /*返回頭接點*/ </p><p><b> } </b></p><p> /*兩個多項式的減法運算*/ </p><p> pnode * sub(pnode *heada,pnode *headb
98、) </p><p><b> { </b></p><p> pnode *headc,*p,*q,*s,*r; </p><p> float x; /*x為系數(shù)相減*/ </p><p> p=heada; /*指向第一個多項式的頭*/ </p><p> q=headb; /*
99、指向第二個多項式的頭*/ </p><p> headc=(pnode *)malloc(sizeof(pnode)); /*開辟空間*/ </p><p><b> r=headc; </b></p><p> while(p!=NULL&&q!=NULL) /*兩個多項式的某一項都不為空時*/ </p>
100、<p><b> { </b></p><p> if(p->zhishu==q->zhishu) /*指數(shù)相等的話*/ </p><p><b> { </b></p><p> x=p->xishu-q->xishu; /*系數(shù)相減*/ </p><p>
101、; if(x!=0) /*相減的差不為0的話*/ </p><p><b> { </b></p><p> s=(pnode *)malloc(sizeof(pnode)); /*用頭插法建立一個新的節(jié)點*/ </p><p> s->xishu=x; </p><p> s->zhishu=p-
102、>zhishu; </p><p> r->next=s; </p><p><b> r=s; </b></p><p><b> } </b></p><p> q=q->next;p=p->next; /*2個多項式都向右移*/ </p><
103、p><b> } </b></p><p> else if(p->zhishu<q->zhishu) /*p的系數(shù)小于q的系數(shù)的話*/ </p><p><b> { </b></p><p> s=(pnode *)malloc(sizeof(pnode)); </p>&
104、lt;p> s->xishu=-q->xishu; /*建立的節(jié)點的系數(shù)為原來的相反數(shù)*/ </p><p> s->zhishu=q->zhishu; </p><p> r->next=s; </p><p><b> r=s; </b></p><p> q=q->
105、;next; </p><p><b> } </b></p><p><b> else </b></p><p><b> { </b></p><p> s=(pnode *)malloc(sizeof(pnode)); </p><p>
106、; s->xishu=p->xishu; </p><p> s->zhishu=p->zhishu; </p><p> r->next=s; </p><p><b> r=s; </b></p><p> p=p->next; /*p向右移動*/ </p>
107、<p><b> } </b></p><p><b> } </b></p><p> while(p!=NULL) /*當?shù)?個多項式空,第1個數(shù)不為空時,將第一個數(shù)剩下的全用新節(jié)點產(chǎn)生*/ </p><p><b> { </b></p><p>
108、s=(pnode *)malloc(sizeof(pnode)); </p><p> s->xishu=p->xishu; </p><p> s->zhishu=p->zhishu; </p><p> r->next=s; </p><p><b> r=s; </b><
109、/p><p> p=p->next; </p><p><b> } </b></p><p> while(q!=NULL) /*當?shù)?個多項式空,第1個數(shù)不為空時,將第2個數(shù)剩下的全用新節(jié)點產(chǎn)生*/ </p><p><b> { </b></p><p>
110、s=(pnode *)malloc(sizeof(pnode)); </p><p> s->xishu=-q->xishu; /*建立的節(jié)點的系數(shù)為原來的相反數(shù)*/ </p><p> s->zhishu=q->zhishu; </p><p> r->next=s; </p><p><b>
111、 r=s; </b></p><p> q=q->next; </p><p><b> } </b></p><p> r->next=NULL; /*最后指向空*/ </p><p> headc=headc->next; /*第一個頭沒有用到*/ </p>&l
112、t;p> return headc; /*返回頭接點*/ </p><p><b> } </b></p><p> void add_main() </p><p><b> { </b></p><p> pnode * a,*b,*c; </p><p>
113、; printf("\n輸入第一個一元多項式:\n系數(shù) 指數(shù)\n"); </p><p> a=creat(); </p><p> tiaozhen(a); </p><p> printf("\n輸入第二個一元多項式:\n系數(shù) 指數(shù)\n"); </p><p> b=creat(); &l
114、t;/p><p> tiaozhen(b); </p><p> c=add(a,b); </p><p> printf("第一個一元多項式如下:");shuchu(a); </p><p> printf("第二個一元多項式如下:");shuchu(b); </p><p&g
115、t; printf("兩式相加如下:");shuchu(c); </p><p><b> } </b></p><p> void sub_main() </p><p><b> { </b></p><p> pnode * a,*b,*c; </p>
116、<p> printf("\n輸入第一個一元多項式:\n系數(shù) 指數(shù)\n"); </p><p> a=creat(); </p><p> tiaozhen(a); </p><p> printf("\n輸入第二個一元多項式:\n系數(shù) 指數(shù)\n"); </p><p> b=c
117、reat(); </p><p> tiaozhen(b); </p><p> c=sub(a,b); </p><p> printf("第一個一元多項式如下:");shuchu(a); </p><p> printf("第二個一元多項式如下:");shuchu(b); </p>
118、;<p> printf("兩式相減如下:");shuchu(c); </p><p><b> } </b></p><p> void open() </p><p><b> { </b></p><p> printf("\n
119、 ****************************************************\n"); </p><p> printf(" 功能項: * 1 兩個一元多項式相加;2 兩個一元多項式相減;0 退出 *\n"); </p><p> printf(" ***********************
120、*****************************\n\n請選擇操作: "); </p><p><b> } </b></p><p> void main() </p><p><b> { </b></p><p> int choose; </p>&
121、lt;p><b> open(); </b></p><p> while(choose!=0) </p><p><b> { </b></p><p> scanf("%d",&choose); </p><p> getchar(); </p&
122、gt;<p> switch(choose) </p><p><b> { </b></p><p> case 0:return; </p><p><b> case 1: </b></p><p> printf("\n 兩個一元多項式
123、相加\n"); </p><p> add_main();choose=-1;open();break; </p><p><b> case 2: </b></p><p> printf("\n 兩個一元多項式相減\n"); </p><p> sub_ma
124、in();choose=-1;open();break; </p><p><b> default: </b></p><p> printf("沒有該選項!請重新選擇操作!\n\n"); </p><p><b> open(); </b></p><p><b
125、> } </b></p><p><b> } </b></p><p><b> }</b></p><p><b> 測試方案及結(jié)果</b></p><p><b> 1、測試方案</b></p><p&
126、gt; 在Visual C++ 6.0環(huán)境中調(diào)試運行。</p><p><b> 2、結(jié)果及分析</b></p><p><b> 程序運行截圖如下:</b></p><p><b> 結(jié)論及體會</b></p><p> 經(jīng)過一周的努力,最終我們的課程設計出來了,主
127、程序完全符合本課程設計的要求。</p><p> 本次課程設計對于我們來說難度是很大的。因為對于數(shù)據(jù)結(jié)構(gòu)課程設計,需要有扎實的C語言編程能力,而我們這組人C編程都一般。因此我們花了大半個星期的時間才把主程序?qū)懗鰜怼懙倪^程中有不少的挫折。我們剛開始是先寫出一個能鍵盤輸入兩個一元二次方程并先對每一個方程按指數(shù)降序排序。但過了很長時間都沒法實現(xiàn)兩函數(shù)的相加減。后來花了很大力氣,查閱了兩本資料書才實現(xiàn)了對兩函數(shù)的相加
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 數(shù)據(jù)結(jié)構(gòu)課程設計---一元多項式計算
- 數(shù)據(jù)結(jié)構(gòu)課程設計---一元多項式
- 數(shù)據(jù)結(jié)構(gòu)課程設計----一元多項式
- 一元多項式的計算數(shù)據(jù)結(jié)構(gòu)課程設計
- 數(shù)據(jù)結(jié)構(gòu)課程設計-一元多項式計算器
- 數(shù)據(jù)結(jié)構(gòu)課程設計報告一元多項式的計算
- 數(shù)據(jù)結(jié)構(gòu)課程設計報告一元多項式的計算
- 數(shù)據(jù)結(jié)構(gòu)課程設計報告一元多項式的計算
- 一元多項式的計算數(shù)據(jù)結(jié)構(gòu)課程設計報告
- 數(shù)據(jù)結(jié)構(gòu)課程設計--一元稀疏多項式計算器
- 數(shù)據(jù)結(jié)構(gòu)課程設計--一元多項式計算問題(c語言)
- 數(shù)據(jù)結(jié)構(gòu)課程設計報告一元多項式的計算[1]
- 數(shù)據(jù)結(jié)構(gòu)課程設計---一元稀疏多項式計算器
- 數(shù)據(jù)結(jié)構(gòu)課程設計報告一元稀疏多項式計算器
- 《數(shù)據(jù)結(jié)構(gòu)課程設計》報告---一元稀疏多項式計算器
- 數(shù)據(jù)結(jié)構(gòu)課程設計-一元多項式的代數(shù)運算
- 數(shù)據(jù)結(jié)構(gòu)課程設計報告一元多項式的實現(xiàn)
- 數(shù)據(jù)結(jié)構(gòu)課程設計報告-一元多項式加減運算
- 數(shù)據(jù)結(jié)構(gòu)一元多項式加法器課程設計
- 數(shù)據(jù)結(jié)構(gòu)課程設計報告-一元多項式加減運算
評論
0/150
提交評論