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

下載本文檔

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

文檔簡(jiǎn)介

1、<p><b>  一元多項(xiàng)式的計(jì)算</b></p><p><b>  需求分析</b></p><p>  建立一元多項(xiàng)式并按照指數(shù)降序排列輸出多項(xiàng)式,將一元多項(xiàng)式輸入并存儲(chǔ)在內(nèi)存中,能夠完成兩個(gè)多項(xiàng)式的加減運(yùn)算并輸出結(jié)果</p><p><b>  概要設(shè)計(jì)</b></p>

2、<p>  存儲(chǔ)結(jié)構(gòu):一元多項(xiàng)式的表示在計(jì)算機(jī)內(nèi)可以用鏈表來(lái)表示,為了節(jié)省存儲(chǔ)空間,只存儲(chǔ)多項(xiàng)式中系數(shù)非零的項(xiàng)。鏈表中的每一個(gè)結(jié)點(diǎn)存放多項(xiàng)式的一個(gè)系數(shù)非零項(xiàng),它包含三個(gè)域,分別存放該項(xiàng)的系數(shù)、指數(shù)以及指向下一個(gè)多項(xiàng)式項(xiàng)結(jié)點(diǎn)的指針。創(chuàng)建一元多項(xiàng)式鏈表,對(duì)一元多項(xiàng)式的運(yùn)算中會(huì)出現(xiàn)的各種可能情況進(jìn)行分析,實(shí)現(xiàn)一元多項(xiàng)式的相加、相減操作。</p><p><b>  基本算法:</b>

3、</p><p><b>  1、輸入輸出</b></p><p> ?。?)功能:將要進(jìn)行運(yùn)算的多項(xiàng)式輸入輸出。</p><p>  (2)數(shù)據(jù)流入:要輸入的多項(xiàng)式的系數(shù)與指數(shù)。</p><p> ?。?)數(shù)據(jù)流出:合并同類項(xiàng)后的多項(xiàng)式。</p><p> ?。?)程序流程圖:多項(xiàng)式輸入流程圖如

4、圖1所示。</p><p> ?。?)測(cè)試要點(diǎn):輸入的多項(xiàng)式是否正確,若輸入錯(cuò)誤則重新輸入</p><p><b>  2、多項(xiàng)式的加法</b></p><p>  (1)功能:將兩多項(xiàng)式相加。</p><p> ?。?)數(shù)據(jù)流入:輸入函數(shù)。</p><p> ?。?)數(shù)據(jù)流出:多項(xiàng)式相加后的結(jié)果

5、。</p><p>  (4)程序流程圖:多項(xiàng)式的加法流程圖如圖2所示。</p><p>  (5)測(cè)試要點(diǎn):兩多項(xiàng)式是否為空,為空則提示重新輸入,否則,進(jìn)行運(yùn)算。</p><p><b>  圖表 2</b></p><p><b>  3、多項(xiàng)式的減法</b></p><p&

6、gt;  (1)功能:將兩多項(xiàng)式相減。</p><p>  (2)數(shù)據(jù)流入:調(diào)用輸入函數(shù)。</p><p>  (3)數(shù)據(jù)流出:多項(xiàng)式相減后的結(jié)果。</p><p> ?。?)程序流程圖:多項(xiàng)式的減法流程圖如圖3所示。</p><p>  (5)測(cè)試要點(diǎn):兩多項(xiàng)式是否為空,為空則提示重新輸入,否則,進(jìn)行運(yùn)算。</p><p

7、><b>  詳細(xì)設(shè)計(jì) </b></p><p>  #include<stdio.h></p><p>  #include<malloc.h></p><p>  #include<stdlib.h></p><p>  typedef struct Polynomial&

8、lt;/p><p><b>  {</b></p><p>  float coef;</p><p><b>  int expn;</b></p><p>  struct Polynomial *next;</p><p>  }*Polyn,Polynomial; <

9、;/p><p>  /**************合并同類項(xiàng)********************/ </p><p>  void Insert(Polyn p,Polyn h)</p><p><b>  { </b></p><p>  if(p->coef==0)

10、 //系數(shù)為0的話釋放結(jié)點(diǎn)</p><p>  free(p); </p><p>  else //如果系數(shù)不為0</p><p><b>  {</b></p><p>  Polyn q1,q2;</p><p>

11、;<b>  q1=h;</b></p><p>  q2=h->next;</p><p>  while(q2&&p->expn<q2->expn)//查找插入位置</p><p><b>  { </b></p><p><b>  q1=

12、q2;</b></p><p>  q2=q2->next;</p><p><b>  }</b></p><p>  if(q2&&p->expn==q2->expn)//將指數(shù)相同相合并</p><p><b>  { </b></p

13、><p>  q2->coef+=p->coef;</p><p><b>  free(p);</b></p><p>  if(!q2->coef) //系數(shù)為0的話釋放結(jié)點(diǎn)</p><p>  { </p><p>  q1->next=q2->

14、;next;</p><p><b>  free(q2);</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  else</b></p><p>  {

15、 //指數(shù)為新時(shí)將結(jié)點(diǎn)插入</p><p>  p->next=q2;</p><p>  q1->next=p;</p><p><b>  }</b></p><p><b>  }</b></p><p><b>

16、;  }</b></p><p>  /*****************合并同類項(xiàng),并按升冪排序*****************/</p><p>  Polyn HeBing(Polyn &L)</p><p><b>  {</b></p><p>  Polyn p1,p2,p3,p4,p

17、5,p6;</p><p><b>  float t1;</b></p><p><b>  int t2;</b></p><p>  p1=L->next;</p><p>  while(p1!=NULL) //非遞減順序排列</p><p><b&g

18、t;  {</b></p><p>  p2=p1->next;</p><p>  while(p2!=NULL)</p><p><b>  {</b></p><p>  if(p1->expn>p2->expn)</p><p><b>  {

19、</b></p><p>  t1=p1->coef;</p><p>  t2=p1->expn;</p><p>  p1->coef=p2->coef;</p><p>  p1->expn=p2->expn;</p><p>  p2->coef=t1;&l

20、t;/p><p>  p2->expn=t2;</p><p><b>  }</b></p><p>  p2=p2->next;</p><p><b>  }</b></p><p>  p1=p1->next;</p><p>&

21、lt;b>  }</b></p><p>  p3=L->next;</p><p>  while(p3!=NULL) //合并同類項(xiàng)</p><p><b>  {</b></p><p>  p4=p3->next;</p><p>  w

22、hile(p4!=NULL)</p><p><b>  {</b></p><p>  if(p3->expn==p4->expn)</p><p><b>  {</b></p><p>  p3->coef=p3->coef+p4->coef;</p>

23、<p>  p3->next=p4->next;</p><p><b>  free(p4);</b></p><p>  p4=p3->next;</p><p><b>  }</b></p><p><b>  else</b></

24、p><p>  p4=p4->next;</p><p><b>  }</b></p><p>  p3=p3->next;</p><p><b>  }</b></p><p><b>  p5=L;</b></p><

25、p>  while(p5->next!=NULL) //刪除零項(xiàng)</p><p><b>  {</b></p><p>  p6=p5->next;</p><p>  if(p6->coef==0)</p><p><b>  {</b></p>

26、<p>  p5->next=p6->next;</p><p>  free(p6);</p><p><b>  }</b></p><p>  p5=p5->next;</p><p><b>  }</b></p><p><b&g

27、t;  return L;</b></p><p><b>  }</b></p><p>  /*****************建立一個(gè)多項(xiàng)式****************/</p><p>  Polyn CreatPolyn(Polyn &p) </p><p><b>  {

28、</b></p><p>  Polyn h,s;</p><p>  p=(Polyn)malloc(sizeof(struct Polynomial));</p><p><b>  if(!p)</b></p><p><b>  exit(1);</b></p>&

29、lt;p>  p->coef=0;</p><p>  p->expn=-1;</p><p>  p->next=NULL;</p><p><b>  h=p;</b></p><p>  scanf("%f%d",&p->coef,&p->ex

30、pn);</p><p>  while(p->coef!=0||p->expn!=0)//輸入數(shù)據(jù)</p><p><b>  {</b></p><p>  s=(Polyn)malloc(sizeof(struct Polynomial));</p><p><b>  if(!s)</

31、b></p><p><b>  exit(1);</b></p><p>  s->coef=p->coef;</p><p>  s->expn=p->expn;</p><p>  h->next=s;</p><p><b>  h=s;<

32、;/b></p><p>  scanf("%f%d",&p->coef,&p->expn);</p><p><b>  }</b></p><p>  h->next=NULL;</p><p>  HeBing(p);</p><p&

33、gt;<b>  return p;</b></p><p><b>  }</b></p><p>  /******************多項(xiàng)式的銷毀***************/</p><p>  void DestroyPolyn(Polyn p)</p><p><b> 

34、 {</b></p><p>  Polyn q1,q2;</p><p>  q1=p->next;</p><p>  q2=q1->next;</p><p>  while(q1->next)</p><p><b>  {</b></p>&l

35、t;p><b>  free(q1);</b></p><p><b>  q1=q2;</b></p><p>  q2=q2->next;</p><p><b>  }</b></p><p><b>  }</b></p>

36、<p>  /*************輸出多項(xiàng)式**************/</p><p>  void PrintPolyn(Polyn P)</p><p><b>  { </b></p><p>  Polyn q=P->next; </p><p>  int flag=1;</p

37、><p><b>  if(!q) </b></p><p><b>  { </b></p><p>  putchar('0'); </p><p>  printf("\n");</p><p><b>  return;<

38、;/b></p><p>  } //若多項(xiàng)式為空,輸出0</p><p><b>  while (q)</b></p><p><b>  {</b></p><p>  if(q->coef>0&&flag!=1) putchar('+')

39、; //系數(shù)大于0且不是第一項(xiàng)</p><p>  if(q->coef!=1&&q->coef!=-1)//系數(shù)非1或-1的普通情況</p><p><b>  {</b></p><p>  printf("%g",q->coef); </p><p>  if(

40、q->expn==1) putchar('X');</p><p>  else if(q->expn) printf("X^%d",q->expn);</p><p><b>  }</b></p><p><b>  else</b></p><

41、p><b>  {</b></p><p>  if(q->coef==1)</p><p><b>  {</b></p><p>  if(!q->expn) putchar('1'); </p><p><b>  else </b>&l

42、t;/p><p>  if(q->expn==1) putchar('X'); </p><p>  else printf("X^%d",q->expn);</p><p><b>  }</b></p><p>  if(q->coef==-1)</p>

43、<p><b>  {</b></p><p>  if(!q->expn) printf("-1");</p><p><b>  else </b></p><p>  if(q->expn==1) printf("-X"); </p>&l

44、t;p>  else printf("-X^%d",q->expn);</p><p><b>  } </b></p><p><b>  }</b></p><p>  q=q->next; </p><p><b>  flag++;</b

45、></p><p><b>  }</b></p><p>  printf("\n");</p><p><b>  }</b></p><p>  /************輔助乘法和加法運(yùn)算*************/</p><p>  in

46、t compare(Polyn a,Polyn b)</p><p><b>  {</b></p><p><b>  if(a&&b)</b></p><p><b>  {</b></p><p>  if(!b||a->expn>b->

47、expn) </p><p><b>  return 1;</b></p><p><b>  else </b></p><p>  if(!a||a->expn<b->expn) </p><p>  return -1;</p><p><b&

48、gt;  else </b></p><p><b>  return 0;</b></p><p><b>  }</b></p><p><b>  else </b></p><p>  if(!a&&b) </p><p&

49、gt;  return -1;//a多項(xiàng)式已空,但b多項(xiàng)式非空</p><p><b>  else </b></p><p>  return 1;//b多項(xiàng)式已空,但a多項(xiàng)式非空</p><p><b>  }</b></p><p>  /*************多項(xiàng)式的加法********

50、*************/</p><p>  Polyn AddPolyn(Polyn pa,Polyn pb)</p><p><b>  {</b></p><p>  Polyn qa=pa->next;</p><p>  Polyn qb=pb->next;</p><p&g

51、t;  Polyn headc,hc,qc;</p><p>  hc=(Polyn)malloc(sizeof(struct Polynomial));</p><p>  hc->next=NULL;</p><p><b>  headc=hc;</b></p><p>  while(qa||qb)<

52、/p><p><b>  {</b></p><p>  qc=(Polyn)malloc(sizeof(struct Polynomial));</p><p>  switch(compare(qa,qb))</p><p><b>  {</b></p><p><b

53、>  case 1:</b></p><p><b>  {</b></p><p>  qc->coef=qa->coef;</p><p>  qc->expn=qa->expn;</p><p>  qa=qa->next;</p><p>&

54、lt;b>  break;</b></p><p><b>  }</b></p><p><b>  case 0:</b></p><p><b>  { </b></p><p>  qc->coef=qa->coef+qb->coef

55、;</p><p>  qc->expn=qa->expn;</p><p>  qa=qa->next;</p><p>  qb=qb->next;</p><p><b>  break;</b></p><p><b>  }</b></

56、p><p><b>  case -1:</b></p><p><b>  {</b></p><p>  qc->coef=qb->coef;</p><p>  qc->expn=qb->expn;</p><p>  qb=qb->next;

57、</p><p><b>  break;</b></p><p><b>  } </b></p><p><b>  }</b></p><p>  if(qc->coef!=0)</p><p><b>  {</b>&

58、lt;/p><p>  qc->next=hc->next;</p><p>  hc->next=qc;</p><p><b>  hc=qc;</b></p><p><b>  }</b></p><p>  else free(qc);//當(dāng)相加系數(shù)為

59、0時(shí),釋放該結(jié)點(diǎn)</p><p><b>  }</b></p><p>  HeBing(headc);</p><p>  return headc;</p><p><b>  }</b></p><p>  /************多項(xiàng)式的減法***********

60、******/</p><p>  Polyn SubstractPolyn(Polyn pa,Polyn pb)</p><p><b>  {</b></p><p>  Polyn h=pb;</p><p>  Polyn p=pb->next;</p><p><b> 

61、 Polyn pd;</b></p><p>  while(p) //將pb的系數(shù)取反</p><p>  { </p><p>  p->coef*=-1;</p><p>  p=p->next;</p><p><b>  }</b><

62、/p><p>  pd=AddPolyn(pa,h);</p><p>  for(p=h->next;p;p=p->next) //恢復(fù)pb的系數(shù)</p><p>  p->coef*=-1;</p><p>  HeBing(pd);</p><p>  return pd;</p>

63、<p><b>  }</b></p><p>  /*****************多項(xiàng)式的乘法*********************/</p><p>  Polyn MultiplyPolyn(Polyn pa,Polyn pb)</p><p><b>  {</b></p>&l

64、t;p>  Polyn hf,pf;</p><p>  Polyn qa=pa->next;</p><p>  Polyn qb=pb->next;</p><p>  hf=(Polyn)malloc(sizeof(struct Polynomial)); </p><p>  hf->next=NULL;<

65、;/p><p>  for(;qa;qa=qa->next)</p><p><b>  {</b></p><p>  for(qb=pb->next;qb;qb=qb->next)</p><p><b>  {</b></p><p>  pf=(Poly

66、n)malloc(sizeof(struct Polynomial));</p><p>  pf->coef=qa->coef*qb->coef;</p><p>  pf->expn=qa->expn+qb->expn;</p><p>  Insert(pf,hf);//調(diào)用Insert函數(shù)以合并指數(shù)相同的項(xiàng)</p&g

67、t;<p><b>  }</b></p><p><b>  }</b></p><p>  HeBing(hf);</p><p>  return hf;</p><p><b>  }</b></p><p>  /********

68、***********主函數(shù)*******************/</p><p>  void main()</p><p><b>  {</b></p><p>  Polyn p1, p2, p3, p4, p5;</p><p>  CreatPolyn(p1); </p><p> 

69、 CreatPolyn(p2);</p><p>  PrintPolyn(p1); </p><p>  PrintPolyn(p2); </p><p>  p3=AddPolyn(p1, p2);</p><p>  PrintPolyn(p3);</p><p>  p4=SubstractPolyn(p1,

70、p2);</p><p>  PrintPolyn(p4);</p><p>  p5=MultiplyPolyn(p1, p2);</p><p>  PrintPolyn(p5);</p><p>  DestroyPolyn(p1);</p><p>  DestroyPolyn(p2);</p>

71、<p>  DestroyPolyn(p3);</p><p>  DestroyPolyn(p4);</p><p>  DestroyPolyn(p5);</p><p><b>  }</b></p><p><b>  調(diào)試結(jié)果</b></p><p>&l

72、t;b>  測(cè)試的數(shù)據(jù)及結(jié)果</b></p><p>  算法的時(shí)間復(fù)雜度及改進(jìn)</p><p>  算法的時(shí)間復(fù)雜度:一元多項(xiàng)式的加法運(yùn)算的時(shí)間復(fù)雜度為O(m+n),減法運(yùn)算的時(shí)間復(fù)雜度為O(m-n),其中m,n分別表示二個(gè)一元多項(xiàng)式的項(xiàng)數(shù)。</p><p>  問(wèn)題和改進(jìn)思想:在設(shè)計(jì)該算法時(shí),出現(xiàn)了一些問(wèn)題,例如在建立鏈表時(shí)頭指針的設(shè)立導(dǎo)致了之

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫(kù)僅提供信息存儲(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)論