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

下載本文檔

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

文檔簡(jiǎn)介

1、<p><b>  課 程 設(shè) 計(jì)</b></p><p>  課程名稱(chēng): 數(shù)據(jù)結(jié)構(gòu) </p><p>  學(xué)院名稱(chēng): </p><p>  班 號(hào): </p><p>  姓 名:

2、 </p><p>  指導(dǎo)教師: </p><p><b>  目錄</b></p><p><b>  一、迷宮問(wèn)題</b></p><p><b>  二、訂票系統(tǒng)</b></p><

3、;p><b>  三、一元多項(xiàng)式計(jì)算</b></p><p><b>  四、猴子選大王</b></p><p><b>  五、紙牌游戲 </b></p><p><b>  六、拓?fù)渑判?lt;/b></p><p><b>  七、文章編輯

4、</b></p><p><b>  八、總結(jié)</b></p><p><b>  迷宮問(wèn)題</b></p><p>  一、需求分析:利用非遞歸的方法求出一條走出迷宮的路徑,并將路徑輸出。</p><p>  首先由用戶(hù)輸入一組二維數(shù)組來(lái)組成迷宮,確認(rèn)后程序自動(dòng)運(yùn)行,當(dāng)迷宮有完整路徑

5、可以通過(guò)時(shí),以0和1所組成的迷宮形式輸出,標(biāo)記所走過(guò)的路徑結(jié)束程序;當(dāng)迷宮無(wú)路徑時(shí),提示輸入錯(cuò)誤結(jié)束程序。</p><p>  二、概要設(shè)計(jì):1.抽象數(shù)據(jù)類(lèi)型定義:ADT Find{數(shù)據(jù)對(duì)象:D={ai?ai ∈ElemSet,i=1,2,…,n,n≥0}數(shù)據(jù)關(guān)系:R1={<ai-1,ai>?ai-1, ai∈D }基本操作:       find

6、(&S)初始條件:已初始化棧S,且棧為空操作結(jié)果:從棧S中找出相對(duì)應(yīng)的數(shù)據(jù)關(guān)系,并輸出結(jié)果}ADT Find2. 主程序的流程以及各程序模塊之間的調(diào)用關(guān)系:(1).定義變量i、j、w、z為整形變量(2).輸入迷宮二維數(shù)組maze(0:m,0:n)(3).調(diào)用子程序find ()(4).結(jié)束程序</p><p><b>  三、詳細(xì)設(shè)計(jì):</b></p>

7、<p>  #include"stdio.h"</p><p>  #include"stdlib.h" </p><p>  #define m 8</p><p>  #define n 6</p><p>  #define maxsize 50</p><p>

8、;  int maze[m+2][n+2];</p><p>  typedef struct/*試探方向*/</p><p>  { int x,y;</p><p><b>  }item;</b></p><p>  item move[8]={{0,1},{1,1},{1,0},{1,-1},{0,-1},{-1

9、,-1},{-1,0},{-1,1}};</p><p>  typedef struct/*棧元素設(shè)計(jì)*/</p><p>  {int x,y,d; </p><p>  }datetype;</p><p>  typedef struct/*棧*/</p><p>  {datetype data[maxsiz

10、e];</p><p><b>  int top;</b></p><p>  }SeqStack;</p><p>  SeqStack *Init_SeqStack()/*置空棧*/</p><p>  {SeqStack *s;</p><p>  s=(SeqStack *)malloc

11、(sizeof(SeqStack));</p><p>  s->top=0;return s;</p><p><b>  }</b></p><p>  int Empty_SeqStack(SeqStack *s)/*判???/</p><p>  {if(s->top==0)return 1;<

12、/p><p>  else return 0;</p><p><b>  }</b></p><p>  int Push_SeqStack(SeqStack *s,datetype x)/*入棧*/</p><p>  {if(s->top==maxsize-1)return 0;</p><p

13、>  else{s->top++;</p><p>  s->data[s->top]=x;return 1;}</p><p><b>  }</b></p><p>  int Pop_SeqStack(SeqStack *s,datetype *x)/*出棧*/</p><p>  {if(

14、Empty_SeqStack(s))return 0;</p><p>  else {*x=s->data[s->top];</p><p>  s->top--; return 1;}</p><p><b>  }</b></p><p>  int path(SeqStack *s)/*尋找路徑

15、*/</p><p><b>  {</b></p><p>  datetype temp;</p><p>  int x,y,d,i,j;</p><p>  temp.x=1;temp.y=1;temp.d=-1;</p><p>  Push_SeqStack (s,temp);<

16、/p><p>  while (!Empty_SeqStack(s))</p><p>  {Pop_SeqStack (s,&temp);</p><p>  x=temp.x;y=temp.y;d=temp.d+1;</p><p>  while (d<4)</p><p>  {i=x+move[d]

17、.x;j=y+move[d].y;</p><p>  if (maze[i][j]==0)</p><p>  {temp.x=x;temp.y=y;temp.d=d;</p><p>  Push_SeqStack (s,temp);</p><p>  x=i;y=j;maze[x][y]=-1;</p><p>

18、;  if (x==m&&y==n) </p><p><b>  return 1;</b></p><p><b>  else d=0;</b></p><p><b>  }</b></p><p><b>  else d++;</b&

19、gt;</p><p><b>  }</b></p><p>  }return 0;</p><p><b>  }</b></p><p>  void print(SeqStack *s)/*輸出棧*/</p><p><b>  {int i;</b

20、></p><p>  for(i=1;i<=s->top;i++)</p><p>  {printf("{[%d,%d],%d}", s->data[i].x,s->data[i].y,s->data[i].d);</p><p>  if(i<s->top)printf("→&quo

21、t;);</p><p>  if(i%3==0) printf("\n");</p><p><b>  }</b></p><p>  printf("\n");</p><p><b>  }</b></p><p>  int

22、main() </p><p>  {SeqStack *s ;</p><p>  int i,k,j,w;</p><p>  printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");</p><p>  printf(" 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)-迷宮問(wèn)題 \n")

23、;</p><p>  printf(" ------------------------- \n");</p><p>  printf(" 1--隨機(jī)迷宮 \n");</p><p>  printf(" 0--退出 \n&q

24、uot;);</p><p>  printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");</p><p>  scanf("%d",&w);</p><p><b>  switch(w)</b></p><p>  {case 1:for

25、( i = 1; i <=m;i++ ) </p><p>  for(j=1;j<=n;j++)</p><p>  {maze[i][j]=rand()%2;/*隨機(jī)數(shù)組*/</p><p><b>  }</b></p><p>  maze[1][1]=0;maze[6][8]=0;/*入口和出口*/

26、</p><p>  for(i=0;i<m+2;i++) /*添加外圍*/</p><p>  {maze[i][0]=1;maze[i][n+1]=1; </p><p><b>  } </b></p><p>  for (j=0;j<n+2;j++)</p><p>  {m

27、aze[0][j]=1;maze[m+1][j]=1;</p><p>  } </p><p>  printf("隨機(jī)生成的迷宮圖為:\n\n");</p><p>  for(i=0;i<m+2;i++)</p><p>  {for(j=0;j<n+2;j++)</p&g

28、t;<p>  printf("%2d ",maze[i][j]);</p><p>  printf("\n");</p><p><b>  }</b></p><p>  s=Init_SeqStack();</p><p>  k=path(s);</p

29、><p><b>  if (k==1)</b></p><p><b>  {if(k==1)</b></p><p>  printf("迷宮有路:\n");</p><p><b>  print(s);</b></p><p> 

30、 for(i=0;i<m+2;i++)</p><p>  {for(j=0;j<n+2;j++)</p><p>  printf("%2d ",maze[i][j]);</p><p>  printf("\n");</p><p><b>  }}</b><

31、/p><p><b>  else </b></p><p>  printf("迷宮沒(méi)路\n\n");</p><p><b>  break;</b></p><p><b>  }</b></p><p><b>  }&

32、lt;/b></p><p><b>  四、運(yùn)行結(jié)果:</b></p><p>  輸入一個(gè)矩陣,例如:1 0 0 1 1</p><p>  0 0 1 1 1 </p><p><b>  1 0 0 0 1</b></p><p>  0 1 0 1 1 &l

33、t;/p><p>  1 1 0 0 0 </p><p>  輸入入口行坐標(biāo)和列坐標(biāo):1 2</p><p>  輸入出口行坐標(biāo)和列坐標(biāo):5 5</p><p><b>  通路路徑為:</b></p><p><b>  訂票系統(tǒng)</b></p><p&

34、gt;<b>  一、需求分析:</b></p><p>  采用基數(shù)排序法對(duì)于一組具有結(jié)構(gòu)特點(diǎn)的飛機(jī)航班號(hào)進(jìn)行排序,利用二分查找法對(duì)排好序的航班記錄按航班號(hào)實(shí)現(xiàn)快遞查找,按其他次關(guān)鍵字的查找可采用最簡(jiǎn)單的順序查找方法進(jìn)行。</p><p>  任務(wù):通過(guò)此系統(tǒng)可以實(shí)現(xiàn)如下功能:</p><p>  錄入:可以錄入航班情況(數(shù)據(jù)可以存儲(chǔ)在一個(gè)數(shù)

35、據(jù)文件中,數(shù)據(jù)結(jié)構(gòu)、具體數(shù)據(jù)自定)</p><p>  查詢(xún):可以查詢(xún)某個(gè)航線的情況(如,輸入航班號(hào),查詢(xún)起降時(shí)間,起飛抵達(dá)城市,航班票價(jià),票價(jià)折扣,確定航班是否滿(mǎn)倉(cāng));可以輸入起飛抵達(dá)城市,查詢(xún)飛機(jī)航班情況;</p><p>  訂票:可以訂票(訂票情況可以存在一個(gè)數(shù)據(jù)文件中,結(jié)構(gòu)自己設(shè)定),如果該航班已經(jīng)無(wú)票,可以提供相關(guān)可選擇航班;</p><p>  退票:

36、可退票,退票后修改相關(guān)數(shù)據(jù)文件;客戶(hù)資料有姓名,證件號(hào),訂票數(shù)量及航班情況,訂單要有編號(hào)。</p><p>  修改航班信息:當(dāng)航班信息改變可以修改航班數(shù)據(jù)文件</p><p>  要求:根據(jù)以上功能說(shuō)明,設(shè)計(jì)航班信息,訂票信息的存儲(chǔ)結(jié)構(gòu),設(shè)計(jì)程序完成功能; </p><p><b>  二、概要設(shè)計(jì):</b></p><p

37、><b>  三.詳細(xì)設(shè)計(jì):</b></p><p>  #include <stdio.h></p><p>  #include <string.h></p><p>  #define maxspace 100</p><p>  #define keylen 7</p>

38、<p>  #define radix_n 10</p><p>  #define radix_c 26</p><p>  typedef char keytype;</p><p>  typedef struct </p><p><b>  {</b></p><p>  c

39、har start[6];</p><p>  char end[6];</p><p>  char sche[10];</p><p>  char time1[5];</p><p>  char time2[5];</p><p>  char model[4];</p><p>  i

40、nt price;</p><p>  }infotype;</p><p>  typedef struct</p><p><b>  {</b></p><p>  keytype keys[keylen];</p><p>  infotype others;</p><

41、;p><b>  int next;</b></p><p><b>  }slnode;</b></p><p>  typedef struct</p><p><b>  {</b></p><p>  slnode sl[maxspace];</p>

42、<p>  int keynum;</p><p>  int length;</p><p><b>  }sllist;</b></p><p>  typedef int arrtype_n[radix_n];</p><p>  typedef int arrtype_c[radix_c];</

43、p><p>  void distribute(slnode *sl,int i,arrtype_n f,arrtype_n e)</p><p><b>  {</b></p><p><b>  int j,p;</b></p><p>  for(j=0;j<radix_n;j++)<

44、/p><p><b>  {</b></p><p>  f[j]=e[j]=0;</p><p><b>  }</b></p><p>  for(p=sl[0].next;p;p=sl[p].next)</p><p><b>  {</b></

45、p><p>  j=sl[p].keys[i]%48;</p><p><b>  if(!f[j])</b></p><p><b>  f[j]=p;</b></p><p><b>  else</b></p><p>  sl[e[j]].next=

46、p;</p><p><b>  e[j]=p;</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  void collect(slnode *sl,arrtype_n f,arrtype_n e)</p>

47、<p><b>  {</b></p><p><b>  int j,t;</b></p><p>  for(j=0;!f[j];j++);</p><p>  sl[0].next=f[j];</p><p><b>  t=e[j];</b></p>

48、;<p>  while(j<radix_n-1)</p><p><b>  {</b></p><p>  for(j=j+1;j<radix_n-1&&!f[j];j++);</p><p><b>  if(f[j])</b></p><p><

49、;b>  {</b></p><p>  sl[t].next=f[j];</p><p><b>  t=e[j]; </b></p><p><b>  }</b></p><p><b>  }</b></p><p>  sl[

50、t].next=0;</p><p><b>  }</b></p><p>  void distribute_c(slnode *sl,int i,arrtype_c f,arrtype_c e)</p><p><b>  {</b></p><p><b>  int j,p;&l

51、t;/b></p><p>  for(j=0;j<radix_c;j++)</p><p><b>  {</b></p><p>  f[j]=e[j]=0;</p><p><b>  }</b></p><p>  for(p=sl[0].next;p;p

52、=sl[p].next)</p><p><b>  {</b></p><p>  j=sl[p].keys[i]%65;</p><p><b>  if(!f[j])</b></p><p><b>  f[j]=p;</b></p><p>&l

53、t;b>  else</b></p><p>  sl[e[j]].next=p;</p><p><b>  e[j]=p;</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  

54、void collect_c(slnode *sl,arrtype_c f,arrtype_c e)</p><p><b>  {</b></p><p><b>  int j,t;</b></p><p>  for(j=0;!f[j];j++);</p><p>  sl[0].next=f

55、[j];</p><p><b>  t=e[j];</b></p><p>  while(j<radix_c-1)</p><p><b>  {</b></p><p>  for(j=j+1;j<radix_c-1&&!f[j];j++);</p>

56、<p><b>  if(f[j])</b></p><p><b>  {</b></p><p>  sl[t].next=f[j];</p><p><b>  t=e[j]; </b></p><p><b>  }</b></p&

57、gt;<p><b>  }</b></p><p>  sl[t].next=0;</p><p><b>  }</b></p><p>  void radixsort(sllist &l)//鏈?zhǔn)?lt;/p><p><b>  {</b></p

58、><p><b>  int i;</b></p><p>  arrtype_n fn,en;</p><p>  arrtype_c fc,ec;</p><p>  for(i=0;i<l.length;i++)</p><p>  l.sl[i].next=i+1;</p>

59、<p>  l.sl[l.length].next=0;</p><p>  for(i=l.keynum-1;i>=2;i--)</p><p><b>  {</b></p><p>  distribute(l.sl,i,fn,en);</p><p>  collect(l.sl,i,fn,en

60、);</p><p><b>  }</b></p><p>  for(i=1;i>=0;i--)</p><p><b>  {</b></p><p>  distribute_c(l.sl,i,fc,ec);</p><p>  collect_c(l.sl,i

61、,fc,ec);</p><p><b>  }</b></p><p><b>  }</b></p><p>  void arrange(sllist &l)//重新整理</p><p><b>  {</b></p><p>  int

62、p,q,i;</p><p>  slnode temp;</p><p>  p=l.sl[0].next;</p><p>  for(i=1;i<l.length;i++)</p><p><b>  {</b></p><p>  while(p<i)</p>&

63、lt;p>  p=l.sl[p].next;</p><p>  q=l.sl[p].next;</p><p><b>  if(p!=i)</b></p><p><b>  {</b></p><p>  temp=l.sl[p];</p><p>  l.sl[

64、p]=l.sl[i];</p><p>  l.sl[i]=temp;</p><p>  l.sl[i].next=p;</p><p><b>  }</b></p><p><b>  p=q;</b></p><p><b>  }</b><

65、;/p><p><b>  }</b></p><p>  int binsearch(sllist l,keytype key[])</p><p><b>  {</b></p><p>  int low,high,mid;</p><p><b>  low=1

66、;</b></p><p>  high=l.length;</p><p>  while(low<=high)</p><p><b>  {</b></p><p>  mid=(low+high)/2;</p><p>  if(strcmp(key,l.sl[mid].

67、keys)==0)</p><p>  return mid;</p><p>  else if(strcmp(key,l.sl[mid].keys)<0)</p><p>  high=mid-1;</p><p><b>  else</b></p><p>  low=mid+1;&

68、lt;/p><p><b>  }</b></p><p><b>  return 0;</b></p><p><b>  }</b></p><p>  void seqsearch(sllist l,keytype key[],int i)</p><p

69、><b>  {</b></p><p>  int j,k,m=0;</p><p>  printf("*************************************************************\n");</p><p>  printf("* 航班號(hào) 起點(diǎn)站 終點(diǎn)站 航班

70、期 起飛時(shí)間 到達(dá)時(shí)間 機(jī)型 票價(jià) *\n");</p><p>  for(j=1;j<=l.length;j++)</p><p><b>  {</b></p><p><b>  switch(i)</b></p><p><b>  {</b><

71、/p><p>  case 2:k=strcmp(key,l.sl[j].others.start);break;</p><p>  case 3:k=strcmp(key,l.sl[j].others.end);break;</p><p>  case 4:k=strcmp(key,l.sl[j].others.time1);break;</p>&

72、lt;p>  case 5:k=strcmp(key,l.sl[j].others.time2);break;</p><p><b>  }</b></p><p><b>  if(k==0)</b></p><p><b>  {</b></p><p><b

73、>  m=1;</b></p><p>  printf("* %-8s%-7s%-6s%-11s%-9s%-7s%-5s%4d *\n",l.sl[j].keys,l.sl[j].others.start,l.sl[j].others.end,l.sl[j].others.sche,l.sl[j].others.time1,l.sl[j].others.time2,l.sl

74、[j].others.model,l.sl[j].others.price);</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  if(m==0)</b></p><p>  printf("* 無(wú)此航班信息,

75、可能是輸入錯(cuò)誤! *\n");</p><p>  printf("*************************************************************\n");</p><p><b>  }</b></p><p>  void searchcon(sllist l)<

76、;/p><p><b>  {</b></p><p>  keytype key[keylen];</p><p>  int i=1,k;</p><p>  while(i>=1&&i<=5)</p><p><b>  {</b></p&

77、gt;<p>  printf("\n ********************\n");</p><p>  printf(" * 航班信息查詢(xún)系統(tǒng) *\n");</p><p>  printf(" ********************\n");</p><p>  printf(&q

78、uot; * 1.航 班 號(hào) *\n");</p><p>  printf(" * 2.起 點(diǎn) 站 *\n");</p><p>  printf(" * 3.終 點(diǎn) 站 *\n");</p><p>  printf(" * 4.起飛時(shí)間 *\n");</p><p>

79、  printf(" * 5.到達(dá)時(shí)間 *\n");</p><p>  printf(" * 0.退出系統(tǒng) *\n");</p><p>  printf(" ********************\n");</p><p>  printf(" 請(qǐng)選擇(0-5):");</p

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

81、tf("輸入要查詢(xún)的航班號(hào)(字母要大寫(xiě)):");</p><p>  scanf("%s",key);</p><p>  k=binsearch(l,key);</p><p>  printf("***********************************************************

82、**\n");</p><p><b>  if(k==0)</b></p><p>  printf("* 無(wú)此航班信息,可能是輸入錯(cuò)誤! *\n");</p><p><b>  else</b></p><p><b>  {</b><

83、/p><p>  printf("* 航班號(hào) 起點(diǎn)站 終點(diǎn)站 航班期 起飛時(shí)間 到達(dá)時(shí)間 機(jī)型 票價(jià) *\n");</p><p>  printf("* %-8s%-7s%-6s%-11s%-9s%-7s%-5s%4d *\n",l.sl[k].keys,l.sl[k].others.start,l.sl[k].others.end,l.sl[k].o

84、thers.sche,l.sl[k].others.time1,l.sl[k].others.time2,l.sl[k].others.model,l.sl[k].others.price);</p><p><b>  }</b></p><p>  printf("*********************************************

85、****************\n");</p><p><b>  break;</b></p><p>  case 2:printf("輸入要查詢(xún)的航班起點(diǎn)站名:");</p><p>  scanf("%s",key);</p><p>  seqsearch(

86、l,key,i);</p><p><b>  break;</b></p><p>  case 3:printf("輸入要查詢(xún)的航班終點(diǎn)站名:");</p><p>  scanf("%s",key);</p><p>  seqsearch(l,key,i);</p&g

87、t;<p><b>  break;</b></p><p>  case 4:printf("輸入要查詢(xún)的航班起飛時(shí)間:");</p><p>  scanf("%s",key);</p><p>  seqsearch(l,key,i);</p><p><

88、b>  break;</b></p><p>  case 5:printf("輸入要查詢(xún)的航班到達(dá)時(shí)間:");</p><p>  scanf("%s",key);</p><p>  seqsearch(l,key,i);</p><p><b>  break;<

89、/b></p><p>  case 0:printf("\n\n\n 再 見(jiàn)\n\n\n");</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p&

90、gt;  void inputdata(sllist &l)</p><p><b>  {</b></p><p>  int i=++l.length;</p><p>  char yn='y';</p><p>  while(yn=='y'||yn=='Y'

91、;)</p><p><b>  {</b></p><p>  printf("航班號(hào) 起點(diǎn)站 終點(diǎn)站 航班期 起飛時(shí)間 到達(dá)時(shí)間 機(jī)型 票價(jià)\n");</p><p>  scanf("%s%s%s%s%s%s%s%d",l.sl[i].keys,l.sl[i].others.start,l.sl[i

92、].others.end,l.sl[i].others.sche,l.sl[i].others.time1,l.sl[i].others.time2,l.sl[i].others.model,&l.sl[i].others.price);</p><p>  ++i; getchar(); </p><p>  radixsort(l);</p><p> 

93、 arrange(l);</p><p>  printf("繼續(xù)輸入嗎?y/n:");</p><p>  scanf("%c",&yn);</p><p><b>  }</b></p><p>  l.length=i-1;</p><p>&

94、lt;b>  }</b></p><p>  void main()</p><p><b>  {</b></p><p><b>  sllist l;</b></p><p>  l.keynum=6;</p><p>  l.length=0;<

95、;/p><p>  inputdata(l);</p><p>  searchcon(l);</p><p><b>  }</b></p><p><b>  四、運(yùn)行結(jié)果:</b></p><p>  航班信息:航班號(hào) 起點(diǎn)站 終點(diǎn)站 航班期 起飛時(shí)間 到達(dá)時(shí)間 機(jī)型 票

96、價(jià)</p><p>  輸入:CA1544 合肥 北京 1.2.4.5 1055 1240 733 960</p><p>  提示:繼續(xù)輸入嗎?y/n:y</p><p>  顯示:航班號(hào) 起點(diǎn)站 終點(diǎn)站 航班期 起飛時(shí)間 到達(dá)時(shí)間 機(jī)型 票價(jià)</p><p>  MU5341 上海 廣州 每日

97、1420 1615 M90 1280</p><p>  提示:繼續(xù)輸入嗎?y/n:y</p><p><b>  ……</b></p><p>  提示:繼續(xù)輸入嗎?y/n:n</p><p><b>  一元多項(xiàng)式的計(jì)算</b></p><p>&l

98、t;b>  一、需求分析</b></p><p>  功能:能夠按照指數(shù)降序排列建立并輸出多項(xiàng)式,能夠完成兩個(gè)多項(xiàng)式的相加相減并輸出結(jié)果</p><p><b>  概要設(shè)計(jì)</b></p><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)存放多

99、項(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></p><p><b>  1、輸入輸出</b></p><p> ?。?)功

100、能:將要進(jìn)行運(yùn)算的多項(xiàng)式輸入輸出。</p><p> ?。?)數(shù)據(jù)流入:要輸入的多項(xiàng)式的系數(shù)與指數(shù)。</p><p> ?。?)數(shù)據(jù)流出:合并同類(lèi)項(xiàng)后的多項(xiàng)式。</p><p>  (4)程序流程圖:多項(xiàng)式輸入流程圖如圖1所示。</p><p> ?。?)測(cè)試要點(diǎn):輸入的多項(xiàng)式是否正確,若輸入錯(cuò)誤則重新輸入</p><p&

101、gt;<b>  2、多項(xiàng)式的加法</b></p><p> ?。?)功能:將兩多項(xiàng)式相加。</p><p> ?。?)數(shù)據(jù)流入:輸入函數(shù)。</p><p> ?。?)數(shù)據(jù)流出:多項(xiàng)式相加后的結(jié)果。</p><p> ?。?)程序流程圖:多項(xiàng)式的加法流程圖如圖2所示。</p><p> ?。?)測(cè)

102、試要點(diǎn):兩多項(xiàng)式是否為空,為空則提示重新輸入,否則,進(jìn)行運(yùn)算。</p><p><b>  圖表 2</b></p><p><b>  3、多項(xiàng)式的減法</b></p><p>  (1)功能:將兩多項(xiàng)式相減。</p><p> ?。?)數(shù)據(jù)流入:調(diào)用輸入函數(shù)。</p><p&

103、gt; ?。?)數(shù)據(jù)流出:多項(xiàng)式相減后的結(jié)果。</p><p> ?。?)程序流程圖:多項(xiàng)式的減法流程圖如圖3所示。</p><p> ?。?)測(cè)試要點(diǎn):兩多項(xiàng)式是否為空,為空則提示重新輸入,否則,進(jìn)行運(yùn)算。</p><p><b>  詳細(xì)設(shè)計(jì) </b></p><p>  #include<stdio.h&g

104、t;</p><p>  #include<malloc.h></p><p>  typedef struct Polynomial{</p><p>  float coef;</p><p><b>  int expn;</b></p><p>  struct Polynom

105、ial *next;</p><p>  }*Polyn,Polynomial; //Polyn為結(jié)點(diǎn)指針類(lèi)型</p><p>  void Insert(Polyn p,Polyn h){ </p><p>  if(p->coef==0) free(p); //系數(shù)為0的話釋放結(jié)點(diǎn)</p>&l

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

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

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

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

110、p;</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }//Insert</b></p><p>  Polyn CreatePolyn(Polyn head,int m){//建立一個(gè)頭指針為head、項(xiàng)數(shù)為m的一元

111、多項(xiàng)式</p><p><b>  int i;</b></p><p><b>  Polyn p;</b></p><p>  p=head=(Polyn)malloc(sizeof(struct Polynomial));</p><p>  head->next=NULL;</p

112、><p>  for(i=0;i<m;i++){</p><p>  p=(Polyn)malloc(sizeof(struct Polynomial));//建立新結(jié)點(diǎn)以接收數(shù)據(jù)</p><p>  printf("qingshurudi%dxiangdexishuyuzhishu:",i+1);</p><p>  

113、scanf("%f %d",&p->coef,&p->expn);</p><p>  Insert(p,head); //調(diào)用Insert函數(shù)插入結(jié)點(diǎn)</p><p><b>  }</b></p><p>  return head;</p><p>  }//Cr

114、eatePolyn</p><p>  void DestroyPolyn(Polyn p){//銷(xiāo)毀多項(xiàng)式p</p><p>  Polyn q1,q2;</p><p>  q1=p->next;</p><p>  q2=q1->next;</p><p>  while(q1->next){&

115、lt;/p><p><b>  free(q1);</b></p><p>  q1=q2;//指針后移</p><p>  q2=q2->next;</p><p><b>  }</b></p><p><b>  }</b></p>

116、<p>  void PrintPolyn(Polyn P){ </p><p>  Polyn q=P->next; </p><p>  int flag=1;//項(xiàng)數(shù)計(jì)數(shù)器</p><p>  if(!q) { //若多項(xiàng)式為空,輸出0</p><p>  putchar('0'); </p>

117、;<p>  printf("\n");</p><p><b>  return;</b></p><p><b>  } </b></p><p>  while (q){</p><p>  if(q->coef>0&&flag

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

119、tchar('X');</p><p>  else if(q->expn) printf("X^%d",q->expn);</p><p><b>  }</b></p><p><b>  else{</b></p><p>  if(q->

120、coef==1){</p><p>  if(!q->expn) putchar('1'); </p><p>  else if(q->expn==1) putchar('X'); </p><p>  else printf("X^%d",q->expn);</p><p&

121、gt;<b>  }</b></p><p>  if(q->coef==-1){</p><p>  if(!q->expn) printf("-1"); </p><p>  else if(q->expn==1) printf("-X"); </p><p>

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

123、;/p><p><b>  }//while</b></p><p>  printf("\n");</p><p>  }//PrintPolyn</p><p>  int compare(Polyn a,Polyn b){</p><p><b>  if(a&am

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

125、gt;  }</b></p><p>  else if(!a&&b) return -1;//a多項(xiàng)式已空,但b多項(xiàng)式非空</p><p>  else return 1;//b多項(xiàng)式已空,但a多項(xiàng)式非空</p><p>  }//compare</p><p>  Polyn AddPolyn(Polyn pa

126、,Polyn pb){//求解并建立多項(xiàng)式a+b,返回其頭指針</p><p>  Polyn qa=pa->next;</p><p>  Polyn qb=pb->next;</p><p>  Polyn headc,hc,qc;</p><p>  hc=(Polyn)malloc(sizeof(struct Polyno

127、mial));//建立頭結(jié)點(diǎn)</p><p>  hc->next=NULL;</p><p><b>  headc=hc;</b></p><p>  while(qa||qb){</p><p>  qc=(Polyn)malloc(sizeof(struct Polynomial));</p>

128、<p>  switch(compare(qa,qb)){</p><p><b>  case 1:</b></p><p><b>  {</b></p><p>  qc->coef=qa->coef;</p><p>  qc->expn=qa->expn

129、;</p><p>  qa=qa->next;</p><p><b>  break;</b></p><p><b>  }</b></p><p><b>  case 0:</b></p><p><b>  { </b&

130、gt;</p><p>  qc->coef=qa->coef+qb->coef;</p><p>  qc->expn=qa->expn;</p><p>  qa=qa->next;</p><p>  qb=qb->next;</p><p><b>  bre

131、ak;</b></p><p><b>  }</b></p><p><b>  case -1:</b></p><p><b>  {</b></p><p>  qc->coef=qb->coef;</p><p>  q

132、c->expn=qb->expn;</p><p>  qb=qb->next;</p><p><b>  break;</b></p><p><b>  } </b></p><p><b>  }//switch</b></p><

133、p>  if(qc->coef!=0){</p><p>  qc->next=hc->next;</p><p>  hc->next=qc;</p><p><b>  hc=qc;</b></p><p><b>  }</b></p><p&

134、gt;  else free(qc);//當(dāng)相加系數(shù)為0時(shí),釋放該結(jié)點(diǎn)</p><p><b>  }//while</b></p><p>  return headc;</p><p>  }//AddPolyn</p><p>  Polyn SubtractPolyn(Polyn pa,Polyn pb){//求

135、解并建立多項(xiàng)式a+b,返回其頭指針</p><p>  Polyn h=pb;</p><p>  Polyn p=pb->next;</p><p><b>  Polyn pd;</b></p><p>  while(p){ //將pb的系數(shù)取反</p><p> 

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

137、p>  p->coef*=-1;</p><p>  return pd;</p><p>  }//SubtractPolyn</p><p>  int main(){</p><p>  int m,n,flag=0;</p><p><b>  float x;</b><

138、/p><p>  Polyn pa=0,pb=0,pc,pd,pe,pf;//定義各式的頭指針,pa與pb在使用前付初值NULL</p><p>  printf("qingshuruadexiangshu:");</p><p>  scanf("%d",&m);</p><p>  pa=Cre

139、atePolyn(pa,m);//建立多項(xiàng)式a</p><p>  printf("qingshurubdexiangshu:");</p><p>  scanf("%d",&n);</p><p>  pb=CreatePolyn(pb,n);//建立多項(xiàng)式a</p><p><b&g

140、t;  //輸出菜單</b></p><p>  printf("**********************************************\n");</p><p>  printf("caozuotishi:\n\t1.shuchuduoxiangshiaheb\n\t2.jianliduoxiangshia+b\n\t3.j

141、ianliduoxiangshia-b\n");</p><p>  printf("\t4.tuichu\n**********************************************\n");</p><p>  for(;;flag=0){</p><p>  printf("zhixingcaozuo:

142、");</p><p>  scanf("%d",&flag);</p><p>  if(flag==1){</p><p>  printf("duoxiangshia:");PrintPolyn(pa);</p><p>  printf("duoxiangshib:&

143、quot;);PrintPolyn(pb);continue;</p><p><b>  }</b></p><p>  if(flag==2){</p><p>  pc=AddPolyn(pa,pb);</p><p>  printf("多項(xiàng)式a+b:");PrintPolyn(pc);<

144、;/p><p>  DestroyPolyn(pc);continue;</p><p><b>  }</b></p><p>  if(flag==3){</p><p>  pd=SubtractPolyn(pa,pb);</p><p>  printf("duoxiangshia-

145、b:");PrintPolyn(pd);</p><p>  DestroyPolyn(pd);continue;</p><p><b>  }</b></p><p>  if(flag==4) break;</p><p>  if(flag<1||flag>4) printf("E

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論