2023年全國(guó)碩士研究生考試考研英語(yǔ)一試題真題(含答案詳解+作文范文)_第1頁(yè)
已閱讀1頁(yè),還剩18頁(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、<p><b>  計(jì)算機(jī)科學(xué)與技術(shù)系</b></p><p><b>  課程設(shè)計(jì)報(bào)告</b></p><p>  2009 ~2010 學(xué)年第 2 學(xué)期</p><p><b>  2010年6月</b></p><p>  題目:(一元多項(xiàng)式的計(jì)算

2、問題)要求能夠按照指數(shù)降序排列建立并輸出一元多項(xiàng)式;能夠完成兩個(gè)一元多項(xiàng)式的相加、相減,并將結(jié)果輸入。</p><p>  一、問題分析和任務(wù)定義</p><p>  1.問題分析 本程序關(guān)鍵點(diǎn)是如何將輸入的兩個(gè)多項(xiàng)式相加、相減操作。</p><p>  ①如何將輸入的一元多項(xiàng)式按指數(shù)的降序排列</p><p> ?、谌绾未_定要輸入的多項(xiàng)式

3、的項(xiàng)數(shù);</p><p>  ③如何將輸入的兩個(gè)一元多項(xiàng)式顯示出來。</p><p>  ④如何將輸入的兩個(gè)一元多項(xiàng)式進(jìn)行相加操作。</p><p>  ⑤如何將輸入的兩個(gè)一元多項(xiàng)式進(jìn)行相減操作。</p><p>  本程序是通過鏈表實(shí)現(xiàn)一元多項(xiàng)式的相加減操作。</p><p><b>  2、任務(wù)定義<

4、;/b></p><p>  此程序需要完成如下的要求:將多項(xiàng)式按照指數(shù)降序排列建立并輸出,將兩個(gè)一元多項(xiàng)式進(jìn)行相加、相減操作,并將結(jié)果輸入。</p><p>  a: 輸入多項(xiàng)式的項(xiàng)數(shù)并建立多項(xiàng)式; b: 輸出多項(xiàng)式,輸出形式分別為浮點(diǎn)和整數(shù)序列,序列按指數(shù)升序排列; c: 多項(xiàng)式a和b相加,建立多項(xiàng)式a+b; d: 多項(xiàng)式a和b相減,建立多項(xiàng)式a-b。 e: 多項(xiàng)式的輸出

5、。 </p><p>  二、數(shù)據(jù)結(jié)構(gòu)的選擇和概要設(shè)計(jì):</p><p><b>  數(shù)據(jù)結(jié)構(gòu)的選用 </b></p><p>  A:基于鏈表中的節(jié)點(diǎn)可以動(dòng)態(tài)生成的特點(diǎn),以及鏈表可以靈活的添加或刪除節(jié)點(diǎn)的數(shù)據(jù)結(jié)構(gòu),為了實(shí)現(xiàn)任意多項(xiàng)式的加法,減法,因此選擇單鏈表的結(jié)構(gòu)體,它有一個(gè)系數(shù),指數(shù),下一個(gè)指針3個(gè)元屬;例如,圖1中的兩個(gè)線性鏈表分別表

6、示一元多項(xiàng)式和一元多項(xiàng)式。從圖中可見,每個(gè)結(jié)點(diǎn)表示多項(xiàng)式中的一項(xiàng)。</p><p>  圖1 多項(xiàng)式表的單鏈存儲(chǔ)結(jié)構(gòu)</p><p>  B:本設(shè)計(jì)使用了以下數(shù)據(jù)結(jié)構(gòu):</p><p>  typedef struct { </p><p>  float coef; //系數(shù) </p><p>  int ex

7、pn; //指數(shù) </p><p>  } ElemType;</p><p>  typedef struct LNode</p><p><b>  {</b></p><p>  ElemType data;</p><p>  struct LNode *next;</p>

8、<p><b>  }LNode;</b></p><p>  C:設(shè)計(jì)本程序需用到九個(gè)模塊,用到以下九個(gè)子函數(shù)如下:</p><p>  1、void Menu()//建立菜單</p><p>  2、LNode *InitList() // 創(chuàng)建鏈表</p><p>  3、void ChaLNode(L

9、Node *L,ElemType x)//插入鏈表</p><p>  4、LNode *AddPolyn(LNode *A,LNode *B)//多項(xiàng)式相加</p><p>  5、void Invert(LNode *L)//逆序輸出鏈表</p><p>  6、void Print(LNode *L)//輸出多項(xiàng)式</p><p>  

10、7、main()//主程序模塊調(diào)用鏈一元多項(xiàng)式的各種基本操作模塊。</p><p> ?。?)多項(xiàng)式的輸入 先輸入多項(xiàng)式的項(xiàng)數(shù),采用尾插法的方式,輸入多項(xiàng)式中一個(gè)項(xiàng)的系數(shù)和指數(shù),就產(chǎn)生一個(gè)新的節(jié)點(diǎn),建立起它的右指針,并用頭節(jié)點(diǎn)指向它; (3) 兩個(gè)多項(xiàng)式的加法 “和多項(xiàng)式”鏈表中的結(jié)點(diǎn)無需另生成,而應(yīng)該從兩個(gè)多項(xiàng)式的鏈表中摘取。其運(yùn)算規(guī)則如下:</p><p>  假

11、設(shè)指針A和B分別指向多項(xiàng)式a和多項(xiàng)式b中當(dāng)前進(jìn)行比較的某個(gè)結(jié)點(diǎn),則比較兩個(gè)結(jié)點(diǎn)中的指數(shù)項(xiàng),有下列3種情況:</p><p>  ①指針A所指結(jié)點(diǎn)的指數(shù)值<指針B所指結(jié)點(diǎn)的指數(shù)值,則應(yīng)摘取A指針?biāo)附Y(jié)點(diǎn)插入到“和多項(xiàng)式”鏈表中去;</p><p> ?、谥羔楢所指結(jié)點(diǎn)的指數(shù)值>指針B所指結(jié)點(diǎn)的指數(shù)值,則應(yīng)摘取指針A所指結(jié)點(diǎn)插入到“和多項(xiàng)式”鏈表中去;</p><

12、;p> ?、壑羔楢所指結(jié)點(diǎn)的指數(shù)值=指針B所指結(jié)點(diǎn)的指數(shù)值,則將兩個(gè)結(jié)點(diǎn)中的系數(shù)相加,</p><p>  若和數(shù)不為零,則修改A所指結(jié)點(diǎn)的系數(shù)值,同時(shí)釋放B所指結(jié)點(diǎn);反之,從多項(xiàng)式A的鏈表中刪除相應(yīng)結(jié)點(diǎn),并釋放指針A和B所指結(jié)點(diǎn)。例如,由圖2中的兩個(gè)鏈表表示的多項(xiàng)式相加得到的“和多項(xiàng)式”鏈表如圖2所示,圖中的長(zhǎng)方框表示已被釋放的結(jié)點(diǎn)。</p><p>  圖2 相加得到的和多項(xiàng)式

13、    上述多項(xiàng)式的相加過程歸并兩個(gè)有序表的過程極其類似,不同之處僅在于,后者在比較數(shù)據(jù)元素時(shí)只出現(xiàn)兩種情況。因此,多項(xiàng)式相加的過程也完全可以利用線性鏈表的基本操作來完成。(4)兩個(gè)多項(xiàng)式的減法 兩個(gè)多項(xiàng)式的減法實(shí)現(xiàn),依然調(diào)用的是多項(xiàng)式加法的函數(shù),只是在調(diào)用前,把多項(xiàng)式二的系數(shù)全部變?yōu)橄喾磾?shù)c.coef=-c.coef;,然后多項(xiàng)式一和多項(xiàng)式二相加,這樣就實(shí)現(xiàn)了多項(xiàng)式的相減。流程圖

14、如上。</p><p><b>  (5)流程圖 </b></p><p> ?。?)在主函數(shù)中調(diào)用函數(shù)進(jìn)行多項(xiàng)式的輸入、輸出,運(yùn)用選擇語(yǔ)句來選擇加法、減法進(jìn)行操作,流程圖如圖3:</p><p>  圖3 主函數(shù)流程圖</p><p>  (2)兩個(gè)多項(xiàng)式相加就是兩個(gè)多項(xiàng)式中同指數(shù)項(xiàng)的對(duì)應(yīng)系數(shù)相加,若和不為零,則

15、形成“和多形式”中的一項(xiàng),所有指數(shù)不同的項(xiàng)均直接移位至“和多項(xiàng)式”中,流程圖如圖4:</p><p>  圖4 兩個(gè)一元多項(xiàng)式相加</p><p><b>  三、詳細(xì)設(shè)計(jì)和編碼</b></p><p><b>  1、算法思想</b></p><p>  (1) 輸入并建立多項(xiàng)式——InitLis

16、t()</p><p>  (2) 輸入多項(xiàng)式,輸出形式為整數(shù)序列,這個(gè)輸入功能在主函數(shù)實(shí)現(xiàn)(3) 多項(xiàng)式a和b相加,建立多項(xiàng)式a+b,輸出相加的多項(xiàng)式——AddPolyn(A,B)(4) 多項(xiàng)式a和b相減,建立多項(xiàng)式a-b,相減的功能調(diào)用的依然是相加的子函數(shù)</p><p><b>  2、算法描述:</b></p><p><b&

17、gt;  A:建立多項(xiàng)式鏈表</b></p><p>  多項(xiàng)式單鏈表可以用尾插法建表來生成。通過從鍵盤按升冪的次序輸入多項(xiàng)式各項(xiàng)的系數(shù)和指數(shù)</p><p>  LNode *InitList()//創(chuàng)建鏈表</p><p><b>  {</b></p><p><b>  LNode *L;&

18、lt;/b></p><p>  L=(LNode*)malloc(sizeof(LNode));</p><p>  L->next=NULL;</p><p>  return(L);</p><p><b>  }</b></p><p>  void ChaLNode(LNod

19、e *L,ElemType x)//插入鏈表函數(shù)</p><p><b>  {</b></p><p>  LNode *s,*p;</p><p>  s=(LNode*)malloc(sizeof(LNode));</p><p>  s->data=x;</p><p><b&

20、gt;  p=L;</b></p><p>  while(p->next)</p><p>  p=p->next;</p><p>  s->next=NULL;</p><p>  p->next=s;</p><p><b>  }</b></p&

21、gt;<p>  B: 按照指數(shù)降序排列</p><p>  void Invert(LNode *L)//逆序輸出鏈表</p><p>  {LNode *p,*q,*r;</p><p>  p=L->next;</p><p>  q=p->next;</p><p>  while(q

22、!=NULL)</p><p>  {r=q->next;</p><p>  q->next=p;</p><p><b>  p=q;</b></p><p><b>  q=r;</b></p><p><b>  }</b></

23、p><p>  L->next->next=NULL;</p><p>  L->next=p;</p><p><b>  }</b></p><p><b>  C:比較</b></p><p>  if (a->expn < b->exp

24、n){ pre=p;</p><p>  p=p->next;}//如果多項(xiàng)式a的指數(shù)小于多項(xiàng)式b的指數(shù),則指針P后移</p><p>  if (a->expn > b->expn){</p><p>  pre->next=q; </p><p>  pre=pre->next; </p>

25、<p>  q=q->next;} //如果多項(xiàng)式a的指數(shù)小于多項(xiàng)式b的指數(shù),q后移</p><p>  這個(gè)模塊主要是比較兩個(gè)多項(xiàng)式的指數(shù)大小</p><p>  D、兩個(gè)一元多項(xiàng)式的相加</p><p>  while(p&&q)//判斷q,p是不是為空,如果不為空則繼續(xù)往下進(jìn)行</p><p><

26、b>  {</b></p><p>  a=p->data.expn;b=q->data.expn;</p><p><b>  if(a<b)</b></p><p><b>  {</b></p><p>  pre=p;p=p->next;//p后移&

27、lt;/p><p><b>  }</b></p><p><b>  if(a==b)</b></p><p><b>  {</b></p><p>  sum=p->data.coef+q->data.coef;//當(dāng)a,b相等,即指數(shù)相同,則系數(shù)相加</p

28、><p>  if(sum!=0)//判斷sum是為0,如果不為0則保留該節(jié)點(diǎn)</p><p><b>  {</b></p><p>  p->data.coef=sum; B=q;</p><p>  pre=p; p=p->next;</p><p>  q=q->next;

29、free(B);</p><p><b>  }</b></p><p>  Else //如果sum為0即系數(shù)為0,則刪除該節(jié)點(diǎn)</p><p><b>  {</b></p><p>  temp=p;p=p->next;</p><p>  pre

30、->next=p;free(temp);</p><p>  B=q;q=q->next;free(B);</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  if(a>b)</b></p>

31、<p><b>  {</b></p><p>  pre->next=q; pre=pre->next; </p><p>  q=q->next; }}</p><p>  if(q) //如果q中還有剩余,那么把q中剩余的項(xiàng)加到pre->next中</p><p>

32、  pre->next=q;</p><p>  return(A);</p><p><b>  }</b></p><p>  兩個(gè)一元多項(xiàng)式相加的法則是:兩個(gè)多項(xiàng)式中同指數(shù)項(xiàng)的對(duì)應(yīng)系數(shù)相加,若和不為零,則形成“和多項(xiàng)式”中的一項(xiàng);所有指數(shù)不同的項(xiàng)均直接移位至“和多項(xiàng)式”中。如果和為零,則刪除該節(jié)點(diǎn)。</p><p

33、>  E:輸出一個(gè)一元多項(xiàng)式</p><p>  void Print(LNode *L)//輸出多項(xiàng)式</p><p><b>  {</b></p><p><b>  LNode *p;</b></p><p>  p=L->next;</p><p>  

34、while(p->next)</p><p><b>  { </b></p><p>  printf("(%fx^%d)+",p->data.coef,p->data.expn);</p><p>  p=p->next;</p><p><b>  }</

35、b></p><p>  printf("(%fx^%d)",p->data.coef,p->data.expn);輸出最后一項(xiàng)</p><p><b>  }</b></p><p><b>  F:一元多項(xiàng)式相減</b></p><p>  兩個(gè)多項(xiàng)式的減法

36、實(shí)現(xiàn),并沒有單獨(dú)的建立一個(gè)子函數(shù)來實(shí)現(xiàn)這個(gè)功能,和多項(xiàng)式的相加一樣,依然調(diào)用的是多項(xiàng)式加法的函數(shù),只是在調(diào)用前,把多項(xiàng)式二的系數(shù)全部變?yōu)橄喾磾?shù)c.coef=-c.coef;,然后多項(xiàng)式一和多項(xiàng)式二相加,這樣就實(shí)現(xiàn)了多項(xiàng)式的相減,開始我建立一個(gè)實(shí)現(xiàn)多項(xiàng)式減法的子函數(shù),最后為了程序的簡(jiǎn)潔最后還是改成了調(diào)用多項(xiàng)式相加函數(shù)</p><p>  G:逆序輸出鏈表的實(shí)現(xiàn)</p><p>  void

37、Invert(LNode *L)//逆序輸出鏈表</p><p>  {LNode *p,*q,*r;</p><p>  p=L->next;</p><p>  q=p->next;</p><p>  while(q!=NULL)</p><p>  {r=q->next;</p>

38、<p>  q->next=p;</p><p><b>  p=q;</b></p><p><b>  q=r;</b></p><p><b>  }</b></p><p>  L->next->next=NULL;</p>

39、<p>  L->next=p;</p><p><b>  }</b></p><p>  H、main()主函數(shù)</p><p>  void main()</p><p>  {LNode *La,*Lb;ElemType c; int a,i,k;</p><p><

40、b>  for(;1;){</b></p><p>  La=InitList(); Lb= InitList();</p><p><b>  Menu();</b></p><p>  printf("請(qǐng)選擇功能:");scanf("%d",&k);printf("

41、\n");</p><p>  switch(k){</p><p><b>  case 1 :</b></p><p>  printf("\t\t===========一元多項(xiàng)式相加===========\t\t");</p><p>  printf("\n\n\n輸入多項(xiàng)

42、式一的項(xiàng)數(shù):");</p><p>  scanf("%d",&a);</p><p><b>  if(a<=0){</b></p><p>  printf("a不能小于1!\n");</p><p>  printf("請(qǐng)從新輸入多項(xiàng)式一的項(xiàng)

43、數(shù):");</p><p>  scanf("%d",&a);</p><p><b>  }</b></p><p>  for(i=0;i<a;i++)</p><p><b>  {</b></p><p>  printf(

44、"輸入多項(xiàng)式一第%d項(xiàng)系數(shù)和指數(shù):",i+1);</p><p>  scanf("%f%d",&c.coef,&c.expn);</p><p>  ChaLNode(La,c);</p><p><b>  }</b></p><p>  printf(&quo

45、t;輸入多項(xiàng)式二的項(xiàng)數(shù):");</p><p>  scanf("%d",&a);</p><p><b>  if(a<=0){</b></p><p>  printf("a不能小于1!\n");</p><p>  printf("請(qǐng)從新輸入

46、多項(xiàng)式一的項(xiàng)數(shù):");</p><p>  scanf("%d",&a);</p><p><b>  }</b></p><p>  for(i=0;i<a;i++)</p><p><b>  {</b></p><p>  p

47、rintf("輸入多項(xiàng)式二第%d項(xiàng)系數(shù)和指數(shù):",i+1);</p><p>  scanf("%f%d",&c.coef,&c.expn);</p><p>  ChaLNode(Lb,c);</p><p><b>  }</b></p><p>  print

48、f("多項(xiàng)式一為:");Print(La);printf("\n");</p><p>  printf("多項(xiàng)式二為:"); Print(Lb);printf("\n");</p><p>  printf("多項(xiàng)式和為:");AddPolyn(La,Lb);</p><

49、;p>  Invert(La); Print(La);printf("\n");break;</p><p><b>  case 2:</b></p><p>  printf("\t\t===========一元多項(xiàng)式相減===========\t\t");</p><p>  printf(&

50、quot;\n\n\n輸入多項(xiàng)式一的項(xiàng)數(shù):");</p><p>  scanf("%d",&a);</p><p><b>  if(a<=0){</b></p><p>  printf("a不能小于1!\n");</p><p>  printf(&q

51、uot;請(qǐng)從新輸入多項(xiàng)式一的項(xiàng)數(shù):");</p><p>  scanf("%d",&a);}</p><p>  for(i=0;i<a;i++)</p><p><b>  {</b></p><p>  printf("輸入多項(xiàng)式一第%d項(xiàng)系數(shù)和指數(shù):"

52、;,i+1);</p><p>  scanf("%f%d",&c.coef,&c.expn);</p><p>  ChaLNode(La,c);</p><p><b>  }</b></p><p>  printf("輸入多項(xiàng)式二的項(xiàng)數(shù):");</p&

53、gt;<p>  scanf("%d",&a);</p><p><b>  if(a<=0){</b></p><p>  printf("a不能小于1!\n");</p><p>  printf("請(qǐng)從新輸入多項(xiàng)式一的項(xiàng)數(shù):");</p>

54、<p>  scanf("%d",&a);</p><p><b>  }</b></p><p>  for(i=0;i<a;i++)</p><p><b>  {</b></p><p>  printf("輸入多項(xiàng)式二第%d項(xiàng)系數(shù)和指數(shù)

55、:",i+1);</p><p>  scanf("%f%d",&c.coef,&c.expn);</p><p>  c.coef=-c.coef;ChaLNode(Lb,c);</p><p><b>  }</b></p><p>  printf("多項(xiàng)式一

56、為:");</p><p>  Print(La);printf("\n");</p><p>  printf("多項(xiàng)式二為:"); Print(Lb);printf("\n");</p><p>  printf("多項(xiàng)式差為:");</p><p>

57、;  AddPolyn(La,Lb);Invert(La);</p><p>  Print(La);printf("\n");break;</p><p>  case 0: break;}</p><p>  if(k==0)break;</p><p>  printf("\n\n\n");}}&

58、lt;/p><p>  在主函數(shù)中調(diào)用函數(shù)進(jìn)行多項(xiàng)式的輸入、輸出,運(yùn)用選擇語(yǔ)句來選擇加法、減法進(jìn)行操作</p><p><b>  四:上機(jī)調(diào)試</b></p><p>  調(diào)試中遇到的問題與解決辦法</p><p>  1、語(yǔ)法錯(cuò)誤及修改,編譯中出現(xiàn)的語(yǔ)法問題主要在于子函數(shù)和變量的定義,括號(hào)的配對(duì),關(guān)鍵字和函數(shù)名的書寫,以

59、及庫(kù)函數(shù)的規(guī)范使用,這些問題都 可以通過提示,對(duì)應(yīng)的將其解決</p><p>  2、我通過調(diào)試運(yùn)行后發(fā)現(xiàn),計(jì)算完成打印結(jié)果后馬上就會(huì)退出。程序在運(yùn)行起來以后,沒有一個(gè)可以讓程序暫時(shí)停止的地方,比如要求用戶輸入,或者什么的,程序順序執(zhí)行之后就退出了。 </p><p>  3、運(yùn)行成功后,但是到最后輸出結(jié)果的時(shí)候總是出現(xiàn)錯(cuò)誤。通過對(duì)算法的分析發(fā)現(xiàn),算法不正確,修改后最終完成了程序的調(diào)試。&

60、lt;/p><p><b>  五:設(shè)計(jì)體會(huì)</b></p><p>  在開始看到程序題目的時(shí)候以為一元多項(xiàng)式的加減會(huì)很簡(jiǎn)單,可是在課程設(shè)計(jì)的過程中發(fā)現(xiàn)編寫程序并不是開始想象的那樣簡(jiǎn)單,在這過程中遇到了難題,比如如何逆序輸出鏈表,經(jīng)過認(rèn)真思考和查相關(guān)的資料最后解決了這個(gè)問題,通過這次課程設(shè)計(jì),我感覺到要真正做出一個(gè)程序并不很容易,但只要用心去做,總會(huì)有收獲,特別是當(dāng)我遇

61、到 一個(gè)問題,想辦法去解決,最后終于找到方法時(shí),心里的那份喜悅之情真是難以形容。編寫程序中遇到問題再所難免,應(yīng)耐心探究其中的原因,從出現(xiàn)問題的地方起,并聯(lián)系前后程序,仔細(xì)推敲,逐個(gè)排查。直到最終搞清為止。</p><p>  六、測(cè)試結(jié)果及其分析</p><p>  如圖6:一元多項(xiàng)式相加輸入的項(xiàng)數(shù)小于1時(shí)出現(xiàn)的結(jié)果,運(yùn)行結(jié)果如下:</p><p>  圖6一元多項(xiàng)

62、式相加結(jié)果</p><p>  如圖7:一元多項(xiàng)式減法運(yùn)行結(jié)果如下:</p><p>  圖7一元多項(xiàng)式減法運(yùn)行結(jié)果</p><p>  如圖8:當(dāng)選擇0時(shí)退出如圖:</p><p>  圖8:當(dāng)輸入有錯(cuò)誤時(shí)的情況</p><p><b>  七、用戶使用說明</b></p><

63、;p>  根據(jù)提示選擇多項(xiàng)式的加法還是減法1。相加2相減0.退出,比如選1,然后再根據(jù)提示輸入一個(gè)一元多項(xiàng)式的項(xiàng)數(shù)。按enter鍵,按照指數(shù)遞升的順序依次輸入非零項(xiàng),例如4個(gè)非零項(xiàng),要輸入8個(gè)數(shù),有4個(gè)指數(shù),4個(gè)系數(shù)。按enter鍵,然后就會(huì)自動(dòng)輸出剛才輸入的兩個(gè)多項(xiàng)式及相加后的結(jié)果,然后還可以繼續(xù)選擇運(yùn)算。如果退出選擇0.</p><p><b>  八、參考文獻(xiàn)</b></p

64、><p>  [1] 王昆侖等編著《數(shù)據(jù)結(jié)構(gòu)與算法》 中國(guó)鐵道出版社 2007年6月第1版</p><p>  [2] 鄭莉等編著的《C++語(yǔ)言程序設(shè)計(jì)》(第3版)</p><p>  [3] 譚浩強(qiáng)著《C程序設(shè)計(jì)》 北京:清華大學(xué)出版社 2005年7月第三版</p><p><b>  附錄:</b></p>

65、<p><b>  源程序</b></p><p>  #include "stdio.h"</p><p>  #include"malloc.h"</p><p>  typedef struct</p><p><b>  {</b>&l

66、t;/p><p>  float coef;</p><p><b>  int expn;</b></p><p>  }ElemType;</p><p>  typedef struct LNode</p><p><b>  {</b></p><p&

67、gt;  ElemType data;</p><p>  struct LNode *next;</p><p><b>  }LNode;</b></p><p>  void Menu()</p><p><b>  {</b></p><p>  printf(&qu

68、ot; →→→→→\n");</p><p>  printf("             ↑ 菜單 ↓\n");</p><p>  printf(" ←←←←← \n");</p>

69、;<p>  printf(" ★◆★◆★◆★◆★◆★◆★◆★◆★◆★◆★◆★◆★◆★◆\n");</p><p>  printf(" ◆                         ★\n");</p><p>  printf(" ★               

70、           ◆\n");</p><p>  printf(" ◆ ****************一元多項(xiàng)式的運(yùn)算**************** ★\n");</p><p>  printf(" ★   +++++              +++++    ◆\n");</p

71、><p>  printf(" ★   +++++   請(qǐng)選擇功能鍵   +++++    ◆\n");</p><p>  printf(" ◆    +++               +++     ★\n");</p><p>  printf("

72、★ + +      ◆\n");</p><p>  printf(" ◆ 1===============一元多項(xiàng)式相加================ ★\n");</p><p>  printf(" ◆

73、   ★\n");</p><p>  printf(" ★ 2===============一元多項(xiàng)式相減================  ◆\n");</p><p>  printf(" ◆

74、   ★\n");</p><p>  printf(" ★ 0=====================退出==================== ◆\n");</p><p>  printf(" ◆

75、   ★\n");</p><p>  printf(" ★ **********************************************  ◆\n\n\n");</p><p><b>  }</b></p><p>  LNode *In

76、itList()//創(chuàng)建鏈表</p><p><b>  {</b></p><p><b>  LNode *L;</b></p><p>  L=(LNode*)malloc(sizeof(LNode));</p><p>  L->next=NULL;</p><p&

77、gt;  return(L);</p><p><b>  }</b></p><p>  void ChaLNode(LNode *L,ElemType x)//插入鏈表函數(shù)</p><p><b>  {</b></p><p>  LNode *s,*p;</p><p&g

78、t;  s=(LNode*)malloc(sizeof(LNode));</p><p>  s->data=x;</p><p><b>  p=L;</b></p><p>  while(p->next)</p><p>  p=p->next;</p><p>  s-&

79、gt;next=NULL;</p><p>  p->next=s;</p><p><b>  }</b></p><p>  LNode *AddPolyn(LNode *A,LNode *B)//多項(xiàng)式相加</p><p><b>  {</b></p><p>

80、  LNode *p,*q,*temp,*pre;</p><p>  float sum;int a,b;</p><p>  p=A->next;</p><p>  q=B->next;</p><p><b>  pre=A;</b></p><p><b>  fr

81、ee(B);</b></p><p>  while(p&&q)</p><p><b>  {</b></p><p>  a=p->data.expn;b=q->data.expn;</p><p><b>  if(a<b)</b></p&g

82、t;<p><b>  {</b></p><p><b>  pre=p;</b></p><p>  p=p->next;</p><p><b>  }</b></p><p><b>  if(a==b)</b></p&g

83、t;<p><b>  {</b></p><p>  sum=p->data.coef+q->data.coef;</p><p>  if(sum!=0)</p><p><b>  {</b></p><p>  p->data.coef=sum;</p&

84、gt;<p><b>  B=q;</b></p><p><b>  pre=p;</b></p><p>  p=p->next;</p><p>  q=q->next;</p><p><b>  free(B);</b></p>

85、<p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p><b>  temp=p;</b></p><p>  p=p->next;</p>&l

86、t;p>  pre->next=p;</p><p>  free(temp);</p><p><b>  B=q;</b></p><p>  q=q->next;</p><p><b>  free(B);</b></p><p><b>

87、  }</b></p><p><b>  }</b></p><p><b>  if(a>b)</b></p><p><b>  {</b></p><p>  pre->next=q; </p><p>  pre=pre

88、->next; </p><p>  q=q->next; </p><p><b>  }</b></p><p><b>  }</b></p><p><b>  if(q)</b></p><p>  pre->next=q;&

89、lt;/p><p>  return(A);</p><p><b>  }</b></p><p>  void Invert(LNode *L)//逆序輸出鏈表</p><p>  {LNode *p,*q,*r;</p><p>  p=L->next;</p><p&

90、gt;  q=p->next;</p><p>  while(q!=NULL)</p><p>  {r=q->next;</p><p>  q->next=p;</p><p><b>  p=q;</b></p><p><b>  q=r;</b>

91、</p><p><b>  }</b></p><p>  L->next->next=NULL;</p><p>  L->next=p;</p><p><b>  }</b></p><p>  void Print(LNode *L)//輸出多項(xiàng)式

92、</p><p><b>  {</b></p><p><b>  LNode *p;</b></p><p>  p=L->next;</p><p>  while(p->next)</p><p><b>  { </b></p

93、><p>  printf("(%fx^%d)+",p->data.coef,p->data.expn);</p><p>  p=p->next;</p><p><b>  }</b></p><p>  printf("(%fx^%d)",p->data.

94、coef,p->data.expn);</p><p><b>  }</b></p><p>  void main()</p><p><b>  {</b></p><p>  LNode *La,*Lb;ElemType c;</p><p>  int a,i

95、,k;</p><p><b>  for(;1;){</b></p><p>  La=InitList();</p><p>  Lb= InitList();</p><p><b>  Menu();</b></p><p>  printf("請(qǐng)選擇功能:

96、");</p><p>  scanf("%d",&k);</p><p>  printf("\n");</p><p>  switch(k){</p><p><b>  case 1 :</b></p><p>  printf(&

97、quot;\t\t===========一元多項(xiàng)式相加===========\t\t");</p><p>  printf("\n\n\n輸入多項(xiàng)式一的項(xiàng)數(shù):");</p><p>  scanf("%d",&a);</p><p><b>  if(a<=0){</b><

98、/p><p>  printf("a不能小于1!\n");</p><p>  printf("請(qǐng)從新輸入多項(xiàng)式一的項(xiàng)數(shù):");</p><p>  scanf("%d",&a);</p><p><b>  }</b></p><p&g

99、t;  for(i=0;i<a;i++)</p><p><b>  {</b></p><p>  printf("輸入多項(xiàng)式一第%d項(xiàng)系數(shù)和指數(shù):",i+1);</p><p>  scanf("%f%d",&c.coef,&c.expn);</p><p&g

100、t;  ChaLNode(La,c);</p><p><b>  }</b></p><p>  printf("輸入多項(xiàng)式二的項(xiàng)數(shù):");</p><p>  scanf("%d",&a);</p><p><b>  if(a<=0){</b&g

101、t;</p><p>  printf("a不能小于1!\n");</p><p>  printf("請(qǐng)從新輸入多項(xiàng)式一的項(xiàng)數(shù):");</p><p>  scanf("%d",&a);</p><p><b>  }</b></p>&

102、lt;p>  for(i=0;i<a;i++)</p><p><b>  {</b></p><p>  printf("輸入多項(xiàng)式二第%d項(xiàng)系數(shù)和指數(shù):",i+1);</p><p>  scanf("%f%d",&c.coef,&c.expn);</p>&

103、lt;p>  ChaLNode(Lb,c);</p><p><b>  }</b></p><p>  printf("多項(xiàng)式一為:");</p><p>  Print(La);printf("\n");</p><p>  printf("多項(xiàng)式二為:&quo

104、t;);</p><p>  Print(Lb);printf("\n");</p><p>  printf("多項(xiàng)式和為:");</p><p>  AddPolyn(La,Lb);</p><p>  Invert(La);</p><p>  Print(La);<

105、/p><p>  printf("\n");break;</p><p><b>  case 2:</b></p><p>  printf("\t\t===========一元多項(xiàng)式相減===========\t\t");</p><p>  printf("\n\n\n

106、輸入多項(xiàng)式一的項(xiàng)數(shù):");</p><p>  scanf("%d",&a);</p><p><b>  if(a<=0){</b></p><p>  printf("a不能小于1!\n");</p><p>  printf("請(qǐng)從新輸入多項(xiàng)

107、式一的項(xiàng)數(shù):");</p><p>  scanf("%d",&a);}</p><p>  for(i=0;i<a;i++)</p><p><b>  {</b></p><p>  printf("輸入多項(xiàng)式一第%d項(xiàng)系數(shù)和指數(shù):",i+1);<

108、/p><p>  scanf("%f%d",&c.coef,&c.expn);</p><p>  ChaLNode(La,c);</p><p><b>  }</b></p><p>  printf("輸入多項(xiàng)式二的項(xiàng)數(shù):");</p><p&

109、gt;  scanf("%d",&a);</p><p><b>  if(a<=0){</b></p><p>  printf("a不能小于1!\n");</p><p>  printf("請(qǐng)從新輸入多項(xiàng)式一的項(xiàng)數(shù):");</p><p> 

110、 scanf("%d",&a);</p><p><b>  }</b></p><p>  for(i=0;i<a;i++)</p><p><b>  {</b></p><p>  printf("輸入多項(xiàng)式二第%d項(xiàng)系數(shù)和指數(shù):",i+1

111、);</p><p>  scanf("%f%d",&c.coef,&c.expn);</p><p>  c.coef=-c.coef;</p><p>  ChaLNode(Lb,c);</p><p><b>  }</b></p><p>  print

112、f("多項(xiàng)式一為:");</p><p>  Print(La);printf("\n");</p><p>  printf("多項(xiàng)式二為:");</p><p>  Print(Lb);printf("\n");</p><p>  printf("

113、多項(xiàng)式差為:");</p><p>  AddPolyn(La,Lb);</p><p>  Invert(La);</p><p>  Print(La);</p><p>  printf("\n");break;</p><p>  case 0: break;}</p>

溫馨提示

  • 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ù)僅提供信息存儲(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)論