2023年全國碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩17頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、<p><b>  數(shù)據(jù)結(jié)構(gòu)課程設(shè)計</b></p><p><b>  報 告</b></p><p>  設(shè)計題目:一元多項式的加法、減法、乘法的實現(xiàn)</p><p>  專 業(yè): 計算機科學(xué)與技術(shù)(嵌入式) </p><p>  學(xué)生姓名:

2、 </p><p>  班級學(xué)號: </p><p>  分組成員: </p><p>  指導(dǎo)教師: </p><p>  2012 年 6月 8日</p&g

3、t;<p>  1006402《數(shù)據(jù)結(jié)構(gòu)》課程設(shè)計報告</p><p><b>  設(shè)計時間</b></p><p>  2011年6月4日——6月8日</p><p><b>  設(shè)計地點</b></p><p>  湖南城市學(xué)院實驗樓計算機房407</p><p

4、><b>  設(shè)計目的</b></p><p>  《數(shù)據(jù)結(jié)構(gòu)》主要介紹最常用的數(shù)據(jù)結(jié)構(gòu),闡明各種數(shù)據(jù)結(jié)構(gòu)內(nèi)在的邏輯關(guān)系,討論其在計算機中的存儲表示,以及在其上進(jìn)行各種運算時的實現(xiàn)算法,并對算法的效率進(jìn)行簡單的分析和討論,是介于數(shù)學(xué)、計算機軟件和計算機硬件之間的一門計算機專業(yè)的核心課程,它是計算機程序設(shè)計、數(shù)據(jù)庫、操作系統(tǒng)、編譯原理及人工智能等的重要基礎(chǔ),廣泛的應(yīng)用于信息學(xué)、系統(tǒng)工程等

5、各種領(lǐng)域。</p><p>  該課程的特點是實踐性較強,為了學(xué)好這門課程,需要在掌握理論知識的同時,加強上機實踐。本課程設(shè)計的目的就是要達(dá)到理論與實際應(yīng)用相結(jié)合,使同學(xué)們能夠根據(jù)數(shù)據(jù)對象的特性,學(xué)會數(shù)據(jù)組織的方法,能把現(xiàn)實世界中的實際問題在計算機內(nèi)部表示出來,并培養(yǎng)基本的、良好的程序設(shè)計技能。</p><p><b>  具體要求如下:</b></p>

6、<p>  1.了解并掌握數(shù)據(jù)結(jié)構(gòu)與算法的設(shè)計方法,具備初步的獨立分析和設(shè)計能力;</p><p>  2.初步掌握軟件開發(fā)過程的問題分析、系統(tǒng)設(shè)計、程序編碼測試等基本方法和技能;</p><p>  3.提高綜合運用所學(xué)的理論知識和方法獨立分析和解決問題的能力;</p><p>  4.訓(xùn)練用系統(tǒng)的觀點和軟件開發(fā)一般規(guī)范進(jìn)行軟件開發(fā),培養(yǎng)軟件工作者所應(yīng)

7、具備的科學(xué)的工作方法和作風(fēng)。</p><p><b>  設(shè)計小組成員</b></p><p><b>  指導(dǎo)教師:</b></p><p><b>  設(shè)計課題:</b></p><p>  順序結(jié)構(gòu)、動態(tài)鏈表結(jié)構(gòu)下的一元多項式的加法、減法、乘法的實現(xiàn)</p>

8、<p>  設(shè)有一元多項式Am(x)和Bn(x).Am(x)=A0+A1x1+A2x2+A3x3+…+AmxmBn(x)=B0+B1x1+B2x2+B3x3+…+Bnxn請實現(xiàn)求M(x)=Am(x)+Bn(x)、M(x)=Am(x)-Bn(x)和M(x)=Am(x)×Bn(x)。要求:1)首先判定多項式是否稀疏2)分別采用順序和動態(tài)存儲結(jié)構(gòu)實現(xiàn);3)結(jié)果M(x)中無重復(fù)階項和無零系數(shù)項;4)要求輸出

9、結(jié)果的升冪和降冪兩種排列情況</p><p>  基本思路及關(guān)鍵問題的解決方法</p><p>  輸入多項式各項的系數(shù)和指數(shù)并對其進(jìn)行稀疏判斷,然后選擇實現(xiàn)結(jié)構(gòu),判斷為順序結(jié)構(gòu)或動態(tài)鏈表結(jié)構(gòu),分別進(jìn)行處理,再選定計算方法(進(jìn)行加法、減法和乘法判斷),然后用相應(yīng)的計算方法對多項式進(jìn)行計算,最后判斷升冪或降冪的輸出方式進(jìn)行輸出。</p><p><b>  

10、算法及流程圖;</b></p><p><b>  流程圖:</b></p><p><b>  是否</b></p><p>  是否 是否</p><p><b>  否</b></p><p><b>  是

11、否</b></p><p><b>  是否</b></p><p><b>  是否是否</b></p><p><b>  運行如圖:</b></p><p><b>  運算操作方式:</b></p><p&g

12、t;  加法:兩多項式指數(shù)相同項指數(shù)不變系數(shù)相加</p><p>  減法:兩多項式指數(shù)相同項指數(shù)不變系數(shù)相減</p><p>  相乘:第一個多項式的各項和第二個多項式的各項分別相乘再相加,其中系數(shù)相乘指數(shù)相加,具體表達(dá)式如下:</p><p>  假設(shè)A(x)和B(x)為一元多項式,則</p><p>  M(x) = A(x) * B(

13、x)</p><p>  = A(x) * [ b1x^e1+b2x^e2+…+bnx^en]</p><p>  = biA(x)x^ei</p><p>  調(diào)試過程中出現(xiàn)的問題及相應(yīng)解決辦法;</p><p>  獨立測試各個模塊的功能時發(fā)現(xiàn)在創(chuàng)建鏈表后和另一個進(jìn)行運算后多余的存儲單元沒有釋放而造成內(nèi)存的泄漏,還有對于鏈表的運算時結(jié)束條

14、件掌握不透徹導(dǎo)致沒有按計劃地去結(jié)束,比如在用For循環(huán)及While循環(huán)時沒有正確地判斷指針的移動與結(jié)束條件而得不到自己想要的結(jié)果。進(jìn)入函數(shù)內(nèi)部調(diào)試時發(fā)現(xiàn)有誤用沒有初始化的變量,還有贅余的語句擾亂了代碼的健壯性。 在主函數(shù)中對各個函數(shù)的調(diào)用時沒有一個清晰的思路,使程序顯得很混亂,給調(diào)試造成了很大困難。 對非法操作控制的不夠完善,例如缺少對越界訪問及其非法數(shù)據(jù)的控制機制,使程序的安全性下降。對于每創(chuàng)建一個鏈表,每次在進(jìn)行完相應(yīng)操作之后應(yīng)該對

15、其鏈表進(jìn)行刪除釋放,并且要做到在適當(dāng)?shù)臅r間進(jìn)行刪除,對于運算結(jié)束的條件的意識不是很清楚,運算結(jié)束的標(biāo)識是當(dāng)結(jié)點指針移動并且為空時結(jié)束,還有在用指針和變量的時候注意初始化問題,并且盡量使得程序保持良好的可讀性。</p><p><b>  課程設(shè)計心得體會;</b></p><p>  編寫的程序不但要拿來使用,還要給別人查看,以便代碼的維護(hù)。所以代碼編寫的風(fēng)格盡量規(guī)范

16、,清晰。變量要盡量少定義,結(jié)構(gòu)夜采用簡單的。另外,對指針的使用要小心,盡量在定義的時候就進(jìn)行初始化,避免野指針,指針的使用涉及到內(nèi)存的分配。該程序基本實現(xiàn)了要求的順序結(jié)構(gòu)、動態(tài)鏈表結(jié)構(gòu)下的一元多項式的加法、減法、乘法等功能。代碼較為冗余,可讀性較差,可以多添加一些提示語句以及注釋。</p><p>  在這次課程設(shè)計中我又進(jìn)一步地了解了數(shù)據(jù)結(jié)構(gòu)中算法的核心思想的重要性,懂得了一個程序地好壞關(guān)鍵在于算法是否優(yōu)秀,一

17、個好的優(yōu)秀的算法可以使我們的程序更加完善,安全性更高以及有更高的效率。這次設(shè)計中我發(fā)現(xiàn)了自己的許多不足,如對指針的機制掌握的還不是很透徹,有的時候會出現(xiàn)指針指向錯誤以及空指針的錯誤,還有不能很好地分析自己算法地復(fù)雜度以及不能很好地使用控制機制使自己的程序流暢地運行。</p><p>  部分源程序(核心代碼)</p><p>  void mulpoly(double *a,double

18、*b,double *c) //一元多項式順序結(jié)構(gòu)乘法實現(xiàn)</p><p><b>  {</b></p><p>  int max=cp1[n1-1].expn+cp2[n2-1].expn+2;</p><p><b>  int i,j;</b></p><p>  for(i=0;i<

19、;max;i++)</p><p><b>  c[i]=0;</b></p><p>  for(i=0;i<=cp1[n1-1].expn;i++)</p><p>  for(j=0;j<=cp2[n2-1].expn;j++)</p><p>  c[i+j]+=a[i]*b[j];</p>

20、;<p>  puts("相乘結(jié)果為:");</p><p>  ansprint(c,max-1);</p><p><b>  }</b></p><p>  void ansprint(double *a,int n) //結(jié)果打印函數(shù)</p><p><b>  {&

21、lt;/b></p><p>  int choose;</p><p>  puts("請選擇輸出順序:1 升冪 2 降冪:");</p><p>  scanf("%d",&choose);</p><p>  int i,num;</p><p>  if(c

22、hoose!=2) //升冪打印</p><p><b>  {</b></p><p>  if(choose!=1)</p><p>  printf("沒有%d選項,系統(tǒng)將默認(rèn)輸出升序:\nY(X)=",choose);</p><p><b>  else</b

23、></p><p>  printf("Y(X)=");</p><p><b>  num=0;</b></p><p>  for(i=0;i<=n;i++)</p><p>  if(fabs(a[i])>1e-8)</p><p><b> 

24、 {</b></p><p><b>  if(num++)</b></p><p>  putchar('+');</p><p>  printf("%lfX^%d",a[i],i);</p><p><b>  }</b></p>

25、<p><b>  }</b></p><p>  else //降冪打印</p><p><b>  {</b></p><p>  printf("Y(X)=");</p><p><b>  num=0;</b></p>

26、;<p>  for(i=n;i>=0;i--)</p><p>  if(fabs(a[i])>1e-8)</p><p><b>  {</b></p><p><b>  if(num++)</b></p><p>  putchar('+');<

27、;/p><p>  printf("%lfX^%d",a[i],i);</p><p><b>  }</b></p><p><b>  }</b></p><p>  putchar(10);</p><p><b>  }</b>&

28、lt;/p><p>  動態(tài)鏈表的建立和構(gòu)造:</p><p>  typedef struct p_pol //結(jié)構(gòu)結(jié)點定義</p><p><b>  {</b></p><p>  double coef;</p><p><b>  int expn;</b><

29、/p><p>  p_pol *next;</p><p><b>  }MPP;</b></p><p>  MPP * creatlink(MPP *p,int n,int pt) //構(gòu)造動態(tài)鏈表結(jié)構(gòu)</p><p><b>  {</b></p><p>  MPP

30、*d,*q;</p><p><b>  int i;</b></p><p>  q=(MPP *)malloc(sizeof(MPP)); //頭結(jié)點</p><p>  if(q==NULL)</p><p><b>  exit(0);</b></p><p> 

31、 q->next=NULL;</p><p>  q->coef=INFCO;</p><p>  q->expn=-INFEX;</p><p><b>  p=q;</b></p><p>  for(i=0;i<n;i++)</p><p><b>  {&

32、lt;/b></p><p>  d=(MPP *)malloc(sizeof(MPP));</p><p>  if(d==NULL)</p><p><b>  exit(0);</b></p><p>  d->next=NULL;</p><p><b>  if(p

33、t==1)</b></p><p><b>  {</b></p><p>  d->coef=cp1[i].coef;</p><p>  d->expn=cp1[i].expn;</p><p><b>  }</b></p><p><b&

34、gt;  else</b></p><p><b>  {</b></p><p>  d->coef=cp2[i].coef;</p><p>  d->expn=cp2[i].expn;</p><p><b>  }</b></p><p>  

35、q->next=d;</p><p><b>  q=d;</b></p><p><b>  }</b></p><p>  return p; //返回頭指針</p><p><b>  }</b></p><p>  動態(tài)鏈表結(jié)構(gòu)實現(xiàn)加法

36、:</p><p>  void addlink(MPP *p1,MPP *p2,MPP *p3) //動態(tài)鏈表相加</p><p><b>  {</b></p><p>  MPP * p,*head;</p><p>  p=(MPP *)malloc(sizeof(MPP)); //頭結(jié)點</p>

37、;<p>  if(p==NULL)</p><p><b>  exit(0);</b></p><p>  p->coef=INFCO;</p><p>  p->expn=-INFEX;</p><p>  p->next=NULL;</p><p>  he

38、ad=p3=p;</p><p>  p1=p1->next;</p><p>  p2=p2->next;</p><p>  while(p1!=NULL||p2!=NULL)</p><p><b>  {</b></p><p>  if(fabs(head->coef)

39、>1e-8) //如果系數(shù)不為0</p><p><b>  {</b></p><p>  p=(MPP *)malloc(sizeof(MPP));</p><p>  if(p==NULL)</p><p><b>  exit(0);</b></p><p>

40、;  head->next=p;</p><p><b>  head=p;</b></p><p>  head->next=NULL;</p><p><b>  }</b></p><p>  if(p1==NULL)</p><p><b>  

41、{</b></p><p>  head->coef=p2->coef;</p><p>  head->expn=p2->expn;</p><p>  p2=p2->next;</p><p><b>  continue;</b></p><p>&

42、lt;b>  }</b></p><p>  if(p2==NULL)</p><p><b>  {</b></p><p>  head->coef=p1->coef;</p><p>  head->expn=p1->expn;</p><p>  

43、p1=p1->next;</p><p><b>  continue;</b></p><p><b>  }</b></p><p>  if(p1->expn==p2->expn) //如果系數(shù)相同</p><p><b>  {</b></p

44、><p>  head->coef=p1->coef+p2->coef;</p><p>  head->expn=p1->expn;</p><p>  p1=p1->next;</p><p>  p2=p2->next;</p><p><b>  }</b&

45、gt;</p><p>  else if(p1->expn<p2->expn)</p><p><b>  {</b></p><p>  head->coef=p1->coef;</p><p>  head->expn=p1->expn;</p><p&

46、gt;  p1=p1->next;</p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p>  head->coef=p2->coef;</p><p&g

47、t;  head->expn=p2->expn;</p><p>  p2=p2->next;</p><p><b>  }</b></p><p><b>  }</b></p><p>  puts("相加結(jié)果為:");</p><p&

48、gt;  printlink(p3);</p><p><b>  }</b></p><p><b>  源程序:</b></p><p>  #include<stdio.h></p><p>  #include<math.h></p><p>

49、  #include<stdlib.h></p><p>  #define INFEX 10000</p><p>  #define INFCO 10000</p><p>  typedef struct pol</p><p><b>  {</b></p><p>  dou

50、ble coef;</p><p><b>  int expn;</b></p><p><b>  }MPOL;</b></p><p>  MPOL *cp1,*cp2;</p><p>  //-----順序結(jié)構(gòu)部分-----</p><p>  int n1,n2;

51、</p><p>  void ansprint(double *a,int n) //打印出結(jié)果</p><p><b>  {</b></p><p>  int choose;</p><p>  puts("請選擇輸出順序:1 升冪 2 降冪:");</p><p>

52、  scanf("%d",&choose);</p><p>  int i,num;</p><p>  if(choose!=2) //升冪打印</p><p><b>  {</b></p><p>  if(choose!=1)</p><p>

53、  printf("沒有%d選項,系統(tǒng)將默認(rèn)輸出升序:\nY(X)=",choose);</p><p><b>  else</b></p><p>  printf("Y(X)=");</p><p><b>  num=0;</b></p><p>  

54、for(i=0;i<=n;i++)</p><p>  if(fabs(a[i])>1e-8)</p><p><b>  {</b></p><p><b>  if(num++)</b></p><p>  putchar('+');</p><p

55、>  printf("%lfX^%d",a[i],i);</p><p><b>  }</b></p><p><b>  }</b></p><p>  else //降冪打印</p><p><b>  {</b></p>

56、<p>  printf("Y(X)=");</p><p><b>  num=0;</b></p><p>  for(i=n;i>=0;i--)</p><p>  if(fabs(a[i])>1e-8)</p><p><b>  {</b>&l

57、t;/p><p><b>  if(num++)</b></p><p>  putchar('+');</p><p>  printf("%lfX^%d",a[i],i);</p><p><b>  }</b></p><p><b

58、>  }</b></p><p>  putchar(10);</p><p><b>  }</b></p><p>  void addpoly(double *a,double *b,double *c) //順序結(jié)構(gòu)相加</p><p><b>  {</b></

59、p><p>  int min=(cp1[n1-1].expn>cp2[n2-1].expn?cp2[n2-1].expn:cp1[n1-1].expn);</p><p>  int max=(cp1[n1-1].expn<cp2[n2-1].expn?cp2[n2-1].expn:cp1[n1-1].expn);</p><p><b>  i

60、nt i;</b></p><p>  for(i=0;i<=min;i++)</p><p>  c[i]=a[i]+b[i];</p><p>  for(;i<=max;i++)</p><p>  if(cp1[n1-1].expn>cp2[n2-1].expn)</p><p>

61、  c[i]=a[i];</p><p><b>  else</b></p><p>  c[i]=b[i];</p><p>  puts("相加結(jié)果為:");</p><p>  ansprint(c,max);</p><p><b>  }</b>

62、;</p><p>  void subpoly(double *a,double *b,double *c) //順序結(jié)構(gòu)相減</p><p><b>  {</b></p><p>  int min=(cp1[n1-1].expn>cp2[n2-1].expn?cp2[n2-1].expn:cp1[n1-1].expn);<

63、;/p><p>  int max=(cp1[n1-1].expn<cp2[n2-1].expn?cp2[n2-1].expn:cp1[n1-1].expn);</p><p><b>  int i;</b></p><p>  for(i=0;i<=min;i++)</p><p>  c[i]=a[i]-b

64、[i];</p><p>  for(;i<=max;i++)</p><p>  if(cp1[n1-1].expn>cp2[n2-1].expn)</p><p>  c[i]=a[i];</p><p><b>  else</b></p><p>  c[i]=-b[i];&l

65、t;/p><p>  puts("相減結(jié)果為:");</p><p>  ansprint(c,max);</p><p><b>  }</b></p><p>  void mulpoly(double *a,double *b,double *c) //順序結(jié)構(gòu)相乘</p><

66、;p><b>  {</b></p><p>  int max=cp1[n1-1].expn+cp2[n2-1].expn+2;</p><p><b>  int i,j;</b></p><p>  for(i=0;i<max;i++)</p><p><b>  c[i

67、]=0;</b></p><p>  for(i=0;i<=cp1[n1-1].expn;i++)</p><p>  for(j=0;j<=cp2[n2-1].expn;j++)</p><p>  c[i+j]+=a[i]*b[j];</p><p>  puts("相乘結(jié)果為:");</

68、p><p>  ansprint(c,max-1);</p><p><b>  }</b></p><p>  void creatpoly1(double *a,int pt) //建立順序結(jié)構(gòu)</p><p><b>  {</b></p><p><b>

69、  int i;</b></p><p><b>  if(pt==1)</b></p><p><b>  {</b></p><p>  for(i=0;i<=cp1[n1-1].expn;i++)</p><p><b>  a[i]=0;</b><

70、;/p><p>  for(i=0;i<n1;i++)</p><p>  a[cp1[i].expn]=cp1[i].coef;</p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b&g

71、t;</p><p>  for(i=0;i<=cp2[n2-1].expn;i++)</p><p><b>  a[i]=0;</b></p><p>  for(i=0;i<n2;i++)</p><p>  a[cp2[i].expn]=cp2[i].coef;</p><p>

72、;<b>  }</b></p><p><b>  }</b></p><p>  //-----動態(tài)鏈?zhǔn)浇Y(jié)構(gòu)部分-----</p><p>  typedef struct p_pol //結(jié)點定義</p><p><b>  {</b></p><

73、p>  double coef;</p><p><b>  int expn;</b></p><p>  p_pol *next;</p><p><b>  }MPP;</b></p><p>  MPP * creatlink(MPP *p,int n,int pt) //構(gòu)造動態(tài)

74、鏈表結(jié)構(gòu)</p><p><b>  {</b></p><p>  MPP *d,*q;</p><p><b>  int i;</b></p><p>  q=(MPP *)malloc(sizeof(MPP));</p><p>  if(q==NULL)</p

75、><p><b>  exit(0);</b></p><p>  q->next=NULL;</p><p>  q->coef=INFCO;</p><p>  q->expn=-INFEX;</p><p><b>  p=q;</b></p>

76、<p>  for(i=0;i<n;i++)</p><p><b>  {</b></p><p>  d=(MPP *)malloc(sizeof(MPP));</p><p>  if(d==NULL)</p><p><b>  exit(0);</b></p>

77、;<p>  d->next=NULL;</p><p><b>  if(pt==1)</b></p><p><b>  {</b></p><p>  d->coef=cp1[i].coef;</p><p>  d->expn=cp1[i].expn;<

78、/p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p>  d->coef=cp2[i].coef;</p><p>  d->expn=cp2[i].expn;

79、</p><p><b>  }</b></p><p>  q->next=d;</p><p><b>  q=d;</b></p><p><b>  }</b></p><p><b>  return p;</b>&

80、lt;/p><p><b>  }</b></p><p>  void printlink(MPP * p) //打印結(jié)果</p><p><b>  {</b></p><p>  int num=0,i=0,choose,count;</p><p>  puts(&

81、quot;請選擇輸出順序:1 升冪 2 降冪:");</p><p>  scanf("%d",&choose);</p><p>  MPP *tp=p;</p><p>  p=p->next;</p><p>  while(p!=NULL)</p><p><b

82、>  {</b></p><p><b>  num++;</b></p><p>  p=p->next;</p><p><b>  }</b></p><p>  MPOL *d=new MPOL[num];</p><p>  p=tp->

83、;next;</p><p>  while(p!=NULL)</p><p><b>  {</b></p><p>  d[i].coef=p->coef;</p><p>  d[i].expn=p->expn;</p><p><b>  i++;</b>

84、</p><p>  p=p->next;</p><p><b>  }</b></p><p>  if(choose==2) //降冪打印</p><p><b>  {</b></p><p><b>  count=0;</b><

85、;/p><p>  printf("Y(X)=");</p><p>  for(i=num-1;i>=0;i--)</p><p><b>  {</b></p><p>  if(count++)</p><p>  putchar('+');</p

86、><p>  printf("%lfX^%d",d[i].coef,d[i].expn);</p><p><b>  }</b></p><p><b>  }</b></p><p>  else //升冪打印</p><p><b>  

87、{</b></p><p>  if(choose!=1)</p><p>  printf("沒有%d選項,系統(tǒng)將默認(rèn)輸出升序:\nY(X)=",choose);</p><p><b>  else</b></p><p>  printf("Y(X)=");<

88、;/p><p>  for(i=0;i<num;i++)</p><p><b>  {</b></p><p>  if(count++)</p><p>  putchar('+');</p><p>  printf("%lfX^%d",d[i].coe

89、f,d[i].expn);</p><p><b>  }</b></p><p><b>  }</b></p><p>  putchar(10);</p><p><b>  }</b></p><p>  void addlink(MPP *p1

90、,MPP *p2,MPP *p3) //動態(tài)鏈表相加</p><p><b>  {</b></p><p>  MPP * p,*head;</p><p>  p=(MPP *)malloc(sizeof(MPP));</p><p>  if(p==NULL)</p><p><b&

91、gt;  exit(0);</b></p><p>  p->coef=INFCO;</p><p>  p->expn=-INFEX;</p><p>  p->next=NULL;</p><p>  head=p3=p;</p><p>  p1=p1->next;</p

92、><p>  p2=p2->next;</p><p>  while(p1!=NULL||p2!=NULL)</p><p><b>  {</b></p><p>  if(fabs(head->coef)>1e-8)</p><p><b>  {</b>

93、</p><p>  p=(MPP *)malloc(sizeof(MPP));</p><p>  if(p==NULL)</p><p><b>  exit(0);</b></p><p>  head->next=p;</p><p><b>  head=p;</b

94、></p><p>  head->next=NULL;</p><p><b>  }</b></p><p>  if(p1==NULL)</p><p><b>  {</b></p><p>  head->coef=p2->coef;<

95、/p><p>  head->expn=p2->expn;</p><p>  p2=p2->next;</p><p><b>  continue;</b></p><p><b>  }</b></p><p>  if(p2==NULL)</p&g

96、t;<p><b>  {</b></p><p>  head->coef=p1->coef;</p><p>  head->expn=p1->expn;</p><p>  p1=p1->next;</p><p><b>  continue;</b&g

97、t;</p><p><b>  }</b></p><p>  if(p1->expn==p2->expn)</p><p><b>  {</b></p><p>  head->coef=p1->coef+p2->coef;</p><p>

98、;  head->expn=p1->expn;</p><p>  p1=p1->next;</p><p>  p2=p2->next;</p><p><b>  }</b></p><p>  else if(p1->expn<p2->expn)</p>&l

99、t;p><b>  {</b></p><p>  head->coef=p1->coef;</p><p>  head->expn=p1->expn;</p><p>  p1=p1->next;</p><p><b>  }</b></p>

100、<p><b>  else</b></p><p><b>  {</b></p><p>  head->coef=p2->coef;</p><p>  head->expn=p2->expn;</p><p>  p2=p2->next;</p&

101、gt;<p><b>  }</b></p><p><b>  }</b></p><p>  puts("相加結(jié)果為:");</p><p>  printlink(p3);</p><p><b>  }</b></p>&

102、lt;p>  void sublink(MPP *p1,MPP *p2,MPP *p3) //動態(tài)鏈表相減</p><p><b>  {</b></p><p>  MPP * p,*head;</p><p>  p=(MPP *)malloc(sizeof(MPP));</p><p>  if(p==NU

103、LL)</p><p><b>  exit(0);</b></p><p>  p->coef=INFCO;</p><p>  p->expn=-INFEX;</p><p>  p->next=NULL;</p><p>  head=p3=p;</p>&l

104、t;p>  p1=p1->next;</p><p>  p2=p2->next;</p><p>  while(p1!=NULL||p2!=NULL)</p><p><b>  {</b></p><p>  if(fabs(head->coef)>1e-8)</p>&

105、lt;p><b>  {</b></p><p>  p=(MPP *)malloc(sizeof(MPP));</p><p>  if(p==NULL)</p><p><b>  exit(0);</b></p><p>  head->next=p;</p><

106、;p><b>  head=p;</b></p><p>  head->next=NULL;</p><p><b>  }</b></p><p>  if(p1==NULL)</p><p><b>  {</b></p><p>  

107、head->coef=-p2->coef;</p><p>  head->expn=p2->expn;</p><p>  p2=p2->next;</p><p><b>  continue;</b></p><p><b>  }</b></p>

108、<p>  if(p2==NULL)</p><p><b>  {</b></p><p>  head->coef=p1->coef;</p><p>  head->expn=p1->expn;</p><p>  p1=p1->next;</p><p&

109、gt;<b>  continue;</b></p><p><b>  }</b></p><p>  if(p1->expn==p2->expn)</p><p><b>  {</b></p><p>  head->coef=p1->coef-p

110、2->coef;</p><p>  head->expn=p1->expn;</p><p>  p1=p1->next;</p><p>  p2=p2->next;</p><p><b>  }</b></p><p>  else if(p1->exp

111、n<p2->expn)</p><p><b>  {</b></p><p>  head->coef=p1->coef;</p><p>  head->expn=p1->expn;</p><p>  p1=p1->next;</p><p><

112、;b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p>  head->coef=-p2->coef;</p><p>  head->expn=p2->expn;</p>&

113、lt;p>  p2=p2->next;</p><p><b>  }</b></p><p><b>  }</b></p><p>  puts("相減結(jié)果為:");</p><p>  printlink(p3);</p><p><

114、;b>  }</b></p><p>  void mullink(MPP *p1,MPP *p2,MPP *p3) //動態(tài)鏈表相乘</p><p><b>  {</b></p><p>  MPP *p,*head,*d,*tp;</p><p><b>  int i,j;</b

115、></p><p>  p=(MPP *)malloc(sizeof(MPP));</p><p>  if(p==NULL)</p><p><b>  exit(0);</b></p><p>  p->coef=INFCO;</p><p>  p->expn=-INFEX

116、;</p><p>  p->next=NULL;</p><p>  tp=head=p3=p;</p><p>  p=(MPP *)malloc(sizeof(MPP));</p><p>  if(p==NULL)</p><p><b>  exit(0);</b></p&g

117、t;<p>  p->coef=INFCO;</p><p>  p->expn=INFEX;</p><p>  p->next=NULL;</p><p>  tp->next=p;</p><p>  for(i=0;i<n1;i++)</p><p><b>

118、;  {</b></p><p>  p1=p1->next;</p><p><b>  d=p2;</b></p><p>  for(j=0;j<n2;j++)</p><p><b>  {</b></p><p>  d=d->next

119、;</p><p>  p=(MPP *)malloc(sizeof(MPP));</p><p>  if(p==NULL)</p><p><b>  exit(0);</b></p><p>  p->next=NULL;</p><p>  p->coef=p1->coe

120、f*d->coef;</p><p>  p->expn=p1->expn+d->expn;</p><p><b>  tp=p3;</b></p><p>  while(tp->next!=NULL)</p><p><b>  {</b></p>

121、<p>  if(tp->expn==p->expn)</p><p><b>  {</b></p><p>  tp->coef+=p->coef;</p><p><b>  free(p);</b></p><p><b>  break;<

122、/b></p><p><b>  }</b></p><p>  if(tp->expn<p->expn&&tp->next->expn>p->expn)</p><p><b>  {</b></p><p>  p->nex

123、t=tp->next;</p><p>  tp->next=p;</p><p><b>  break;</b></p><p><b>  }</b></p><p>  tp=tp->next;</p><p><b>  }</b&

124、gt;</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  tp=p3;</b></p><p>  while(tp->next!=NULL)</p><p><b>  {<

125、;/b></p><p>  if(tp->next->expn==INFEX)</p><p><b>  {</b></p><p>  free(tp->next);</p><p>  tp->next=NULL;</p><p><b>  bre

126、ak;</b></p><p><b>  }</b></p><p>  tp=tp->next;</p><p><b>  }</b></p><p>  puts("相乘結(jié)果為:");</p><p>  printlink(p3

127、);</p><p><b>  }</b></p><p>  void deletelink(MPP *p) //刪除結(jié)點釋放內(nèi)存</p><p><b>  {</b></p><p><b>  MPP *d;</b></p><p> 

128、 while(p!=NULL)</p><p><b>  {</b></p><p><b>  d=p;</b></p><p>  p=p->next;</p><p><b>  free(d);</b></p><p><b>

129、  }</b></p><p><b>  }</b></p><p>  int main()</p><p><b>  {</b></p><p>  int i,choose,choose2;</p><p>  puts("輸入第一個多項式的項

130、數(shù):");</p><p>  scanf("%d",&n1);</p><p>  cp1=(MPOL *)malloc(n1*sizeof(MPOL));</p><p>  puts("分別輸入各項的系數(shù)和指數(shù):");</p><p>  for(i=0;i<n1;i++)

131、</p><p>  scanf("%lf%d",&cp1[i].coef,&cp1[i].expn);</p><p>  if(n1<(cp1[n1-1].expn+1)/2)</p><p>  puts("此多項式稀疏!");</p><p><b>  else

132、</b></p><p>  puts("此多項式稠密!");</p><p>  puts("輸入第二個多項式的項數(shù):");</p><p>  scanf("%d",&n2);</p><p>  cp2=(MPOL *)malloc(n2*sizeof(MP

133、OL));</p><p>  puts("分別輸入各項的系數(shù)和指數(shù):");</p><p>  for(i=0;i<n2;i++)</p><p>  scanf("%lf%d",&cp2[i].coef,&cp2[i].expn);</p><p>  if(n2<(cp

134、2[n2-1].expn+1)/2)</p><p>  puts("此多項式稀疏!");</p><p><b>  else</b></p><p>  puts("此多項式稠密!");</p><p>  puts("請選擇實現(xiàn)結(jié)構(gòu):1 順序結(jié)構(gòu) 2 動態(tài)鏈表結(jié)構(gòu)!

135、");</p><p>  scanf("%d",&choose);</p><p>  double *c1,*c2,*c3;</p><p>  MPP *p1=NULL,*p2=NULL,*p3=NULL;</p><p>  switch(choose)</p><p>&

136、lt;b>  {</b></p><p><b>  case 1:</b></p><p>  c1=(double *)malloc((cp1[n1-1].expn+1)*sizeof(double));</p><p>  c2=(double *)malloc((cp1[n2-1].expn+1)*sizeof(dou

137、ble));</p><p>  creatpoly1(c1,1);</p><p>  creatpoly1(c2,2);</p><p><b>  break;</b></p><p><b>  case 2:</b></p><p>  p1=creatlink(p

138、1,n1,1);</p><p>  p2=creatlink(p2,n2,2);</p><p><b>  break;</b></p><p><b>  default:</b></p><p>  printf("沒有%d選項系統(tǒng)將自動調(diào)用默認(rèn)結(jié)構(gòu)(動態(tài)鏈表)!??!\n"

139、;,choose);</p><p><b>  choose=2;</b></p><p>  p1=creatlink(p1,n1,1);</p><p>  p2=creatlink(p2,n2,2);</p><p><b>  }</b></p><p>  put

140、s("選擇操作方式:1 相加 2 相減 3 相乘");</p><p>  scanf("%d",&choose2);</p><p>  c3=(double *)malloc((cp1[n1-1].expn+cp2[n2-1].expn+2)*sizeof(double));</p><p>  if(choose

141、==1)</p><p><b>  {</b></p><p>  switch(choose2)</p><p><b>  {</b></p><p><b>  case 1:</b></p><p>  addpoly(c1,c2,c3);&

142、lt;/p><p><b>  break;</b></p><p><b>  case 2:</b></p><p>  subpoly(c1,c2,c3);</p><p><b>  break;</b></p><p><b>  cas

143、e 3:</b></p><p>  mulpoly(c1,c2,c3);</p><p><b>  break;</b></p><p><b>  default:</b></p><p>  printf("沒有%d選項系統(tǒng)將自動調(diào)用默認(rèn)操作(相加)!?。n"

144、;,choose);</p><p>  addpoly(c1,c2,c3);</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {<

145、/b></p><p>  switch(choose2)</p><p><b>  {</b></p><p><b>  case 1:</b></p><p>  addlink(p1,p2,p3);</p><p><b>  break;</

146、b></p><p><b>  case 2:</b></p><p>  sublink(p1,p2,p3);</p><p><b>  break;</b></p><p><b>  case 3:</b></p><p>  mulli

147、nk(p1,p2,p3);</p><p><b>  break;</b></p><p><b>  default:</b></p><p>  printf("沒有%d選項系統(tǒng)將自動調(diào)用默認(rèn)操作(相加)!??!\n",choose);</p><p>  choose2=1

148、;</p><p>  addlink(p1,p2,p3);</p><p><b>  }</b></p><p>  deletelink(p1);</p><p>  deletelink(p2);</p><p>  deletelink(p3);</p><p>

149、;<b>  }</b></p><p>  free(cp1);</p><p>  free(cp2);</p><p>  if(choose!=2)</p><p><b>  {</b></p><p><b>  free(c1);</b>&

150、lt;/p><p><b>  free(c2);</b></p><p><b>  free(c3);</b></p><p><b>  }</b></p><p>  system("pause");</p><p>  syst

151、em("cls");</p><p><b>  main();</b></p><p><b>  return 0;</b></p><p><b>  }</b></p><p><b>  參考文獻(xiàn)</b></p>

152、<p> ?。?]蘇仕華等編著.數(shù)據(jù)結(jié)構(gòu)課程設(shè)計.機械工業(yè)出版社.2007</p><p>  [2]嚴(yán)蔚敏等編著.數(shù)據(jù)結(jié)構(gòu)(C語言版).清華大學(xué)出版社.2003</p><p> ?。?]嚴(yán)蔚敏等編著.數(shù)據(jù)結(jié)構(gòu)題集(C語言版).清華大學(xué)出版社,2003</p><p> ?。?].鄭莉等 編著. C++程序設(shè)計語言(第三版).清華大學(xué)出版社,2005.

溫馨提示

  • 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. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論