數(shù)據(jù)結構課程設計-- 猴子選大王+ joseph環(huán)+紙牌游戲_第1頁
已閱讀1頁,還剩39頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、<p><b>  課程設計報告</b></p><p>  課程名稱 《數(shù)據(jù)結構課程設計》 </p><p>  設計題目 猴子選大王+ joseph環(huán)+紙牌游戲 &l

2、t;/p><p>  院系 計算機科學與信息工程學院 專業(yè) 計算機科學與技術 班級 </p><p>  姓名 學號 指導教師 日期 11/29/2024 </p><p><b>  目的與要求</b></p><p>  鞏固和加深對常見數(shù)據(jù)結構的理解和掌

3、握</p><p>  掌握基于數(shù)據(jù)結構進行算法設計的基本方法</p><p>  掌握用高級語言實現(xiàn)算法的基本技能</p><p>  掌握書寫程序設計說明文檔的能力</p><p>  提高運用數(shù)據(jù)結構知識及高級語言解決非數(shù)值實際問題的能力</p><p><b>  課程設計內(nèi)容說明</b>

4、</p><p><b>  猴子選大王</b></p><p>  對設計任務內(nèi)容的概述</p><p>  任務:一堆猴子都有編號,編號是1,2,3 ...m ,這群猴子(m個)按照1-m的順序圍坐一圈,從第1開始數(shù),每數(shù)到第N個,該猴子就要離開此圈,這樣依次下來,直到圈中只剩下最后一只猴子,則該猴子為大王。</p><

5、p><b>  需求分析或功能描述</b></p><p>  首先要定義數(shù)據(jù)類型,定義一個結構體, 包含猴子的編號和指向下一個猴子的指針。</p><p>  然后,根據(jù)猴子的數(shù)量m創(chuàng)建一個循環(huán)鏈表,相當于所有的猴子圍成一圈。</p><p>  最后根據(jù)N的值,將猴子依次離開此循環(huán)鏈表,輸出猴子離開的順序,將最后一個輸出的猴子為猴王。

6、</p><p>  概要設計或程序流程圖</p><p>  詳細設計或源代碼說明</p><p>  文件“l(fā)ist1.cpp”</p><p>  typedef int Elemtype;</p><p>  typedef struct Mnode//創(chuàng)建結構體 </p><p>

7、<b>  {</b></p><p>  Elemtype data;//猴子編號 </p><p>  struct Mnode *next;//指向下一個猴子的指針 </p><p><b>  }MNode;</b></p><p><b>  //函數(shù)聲明 </b

8、></p><p>  struct Mnode* Creat_clist1(MNode *clist1,int a);</p><p>  int Kingmonkey(MNode*clist1,int a,int b);</p><p>  int list1()//主函數(shù)直接調(diào)用函數(shù) </p><p><b>  {

9、</b></p><p>  int m,n;//用來存儲猴群的數(shù)量, </p><p>  S1:printf("請輸入猴群的數(shù)量m:");</p><p>  scanf("%d",&m);//猴群數(shù)量 </p><p>  printf("請輸入每數(shù)到第N

10、個n:");</p><p>  scanf("%d",&n);//每次數(shù)N個 </p><p>  if(m<=n)//判斷輸入數(shù)值是否符合要求 </p><p><b>  {</b></p><p><b>  goto S1;</b>&

11、lt;/p><p><b>  }</b></p><p>  printf("\n");</p><p>  MNode *monkey; //定義結點指針 </p><p>  monkey=NULL;</p><p>  monkey=Creat_clist1(mon

12、key,m); //建立猴群的循環(huán)鏈表</p><p>  Kingmonkey(monkey,m,n);//選出猴王并輸出 </p><p>  system("pause");</p><p>  return 0; </p><p><b>  }</b></p>&l

13、t;p>  //創(chuàng)建循環(huán)鏈表函數(shù) </p><p>  struct Mnode* Creat_clist1(MNode *clist1,int a)</p><p><b>  {</b></p><p>  MNode *p,*q; //定義兩個 MNode型指針 </p><p><b>

14、;  int i;</b></p><p>  clist1=NULL;//結點置空 </p><p>  for(i=a;i>=1;i--)</p><p><b>  {</b></p><p>  p=(MNode*)malloc(sizeof(MNode)); //開辟內(nèi)存空間 <

15、/p><p>  p->data=i;//猴子編號 </p><p>  p->next=clist1;</p><p><b>  clist1=p;</b></p><p><b>  if(i==a)</b></p><p>  q=p; //

16、用q指向鏈表最后一個結點</p><p><b>  }</b></p><p>  q->next=clist1; //構成循環(huán)鏈表</p><p>  return clist1; //clist1即為指向第一個結點的指針</p><p><b>  }</b></p>

17、;<p>  //運算并輸出猴王函數(shù) </p><p>  int Kingmonkey(MNode*clist1,int a,int b)</p><p><b>  {</b></p><p>  MNode *p,*q;</p><p><b>  p=clist1;</b>&l

18、t;/p><p><b>  int i;</b></p><p>  printf("猴子依次離開此圈的編號順序為:");</p><p>  do//依次讓猴子離開 ,只留最后一只猴子 </p><p><b>  {</b></p><p>  fo

19、r(i=1;i<b-1;i++)</p><p>  { p=p->next; }</p><p>  printf("%d ",p->next->data);</p><p>  q=p->next; //q結點為要刪除的結點</p><p>  p->next=p->

20、;next->next;//將q借點忽略 </p><p>  p=p->next;</p><p>  free(q);//刪除q </p><p>  }while(p!=p->next);//是否只剩下最后一個結點 </p><p>  printf("\n");</p>

21、<p>  printf("猴王的編號是:%d\n",p->data); //輸出猴王編號 </p><p>  printf("\n");</p><p><b>  return 0;</b></p><p><b>  }</b></p><

22、;p>  程序模塊及其接口描述</p><p>  1、函數(shù)名:list1()</p><p><b>  調(diào)用參數(shù):無</b></p><p>  調(diào)用方式:main()調(diào)用</p><p><b>  返回值:0</b></p><p>  2、函數(shù)名:Creat_

23、clist1(MNode *clist1,int a)</p><p>  調(diào)用參數(shù):monkey,m// monkey:指向第一個結點的指針;m:猴子個數(shù)</p><p>  調(diào)用方式:list1()調(diào)用</p><p>  返回值:monkey //monkey:指向第一個結點的指針</p><p>  3、函數(shù)名:Kingmon

24、key(MNode*clist1,int a,int b)</p><p>  調(diào)用參數(shù):monkey,m,n // monkey:指向第一個結點的指針;m:猴子個數(shù)</p><p>  調(diào)用方式:list1()調(diào)用</p><p><b>  返回值:0</b></p><p>  程序的輸入與輸出描述</p&g

25、t;<p><b>  輸入:猴群的數(shù)量m</b></p><p><b>  每數(shù)到N個n</b></p><p>  輸出:猴子依次離開此圈的編號順序</p><p><b>  猴王的編號</b></p><p><b>  調(diào)試分析或程序測試&l

26、t;/b></p><p>  尚未解決的問題或改進方向</p><p><b>  無</b></p><p><b>  對軟件的使用說明</b></p><p>  在主菜單輸入1,可進入猴子選大王模塊。根據(jù)提示輸入要輸入的數(shù)值,敲回車后,輸出結果。</p><p&g

27、t;<b>  joseph環(huán)</b></p><p>  對設計任務內(nèi)容的概述</p><p>  任務:編號是1,2,……,n的n個人按照順時針方向圍坐一圈,每個人只有一個密碼(正整數(shù))。一開始任選一個正整數(shù)作為報數(shù)上限值m,從第一個人開始順時針方向自1開始順序報數(shù),報到m時停止報數(shù)。報m的人出列,將他的密碼作為新的m值,從他在順時針方向的下一個人開始重新從1報數(shù)

28、,如此下去,直到所有人全部出列為止。設計一個程序來求出出列順序。</p><p><b>  需求分析或功能描述</b></p><p>  首先要定義數(shù)據(jù)類型,定義一個結構體, 包含人的編號、人的密碼和指向下一個人的指針。</p><p>  然后,根據(jù)人的數(shù)量n創(chuàng)建一個循環(huán)鏈表,相當于所有的人圍成一圈。</p><p&g

29、t;  最后根據(jù)任意給定的正整數(shù)m的值,將人依次離開此循環(huán)鏈表,輸出人離開的順序。</p><p>  概要設計或程序流程圖</p><p>  詳細設計或源代碼說明</p><p>  文件“l(fā)ist2.cpp”</p><p>  typedef int Elemtype;</p><p>  typedef st

30、ruct Pnode//創(chuàng)建結構體</p><p><b>  {</b></p><p>  Elemtype data;//人的編號</p><p>  int num;//人的密碼 </p><p>  struct Pnode *next;</p><p><b&g

31、t;  }PNode;</b></p><p><b>  //函數(shù)聲明</b></p><p>  struct Pnode* Creat_clist(PNode*clist,int a,int b[]);</p><p>  int Goout(PNode*clist2,int a,int b);</p><

32、p>  int list2()</p><p><b>  {</b></p><p>  int m,n,i;</p><p>  printf("請輸入人的數(shù)量n:");</p><p>  scanf("%d",&n);//存儲人的數(shù)量 </p&g

33、t;<p>  printf("請輸入初始密碼值m:");</p><p>  scanf("%d",&m);//存儲給定任意正整數(shù) </p><p>  //存儲密碼的數(shù)組 </p><p>  int p[100]={3,1,7,2,4,7,4,6,3,6,8,3,5,4,2,1,6,3,4,

34、2,</p><p>  4,1,7,2,4,7,4,6,3,6,8,3,5,4,2,1,6,3,4,2,</p><p>  3,1,7,2,4,7,4,6,3,6,8,3,5,4,2,1,6,3,4,2,</p><p>  1,1,7,2,4,7,4,6,3,6,8,3,5,4,2,1,6,3,4,2,</p><p>  2,1,7,

35、2,4,7,4,6,3,6,8,3,5,4,2,1,6,3,4,2</p><p><b>  };</b></p><p>  PNode *people; //定義結點指針</p><p>  people=NULL;//指針指向為空 </p><p>  people=Creat_clist(pe

36、ople,n,p); //建立人的循環(huán)鏈表</p><p>  printf("\n");</p><p>  printf("從1--%d的人對應密碼為:",n);</p><p>  for(i=0;i<n;i++)</p><p><b>  {</b></p

37、><p>  printf("%d ",p[i]);</p><p><b>  }</b></p><p>  printf("\n");</p><p>  Goout(people,n,m);//按照出列的順序輸出各個人的編號</p><p>  

38、printf("\n");</p><p>  system("pause");</p><p><b>  return 0;</b></p><p><b>  }</b></p><p>  //創(chuàng)建循環(huán)鏈表函數(shù)</p><p>

39、  struct Pnode* Creat_clist(PNode *clist2,int a,int b[])</p><p><b>  {</b></p><p>  PNode *p,*q;//定義兩個 PNode型指針</p><p>  int i,j=a-1;</p><p>  clist2=NULL

40、;//結點置空 </p><p>  for(i=a;i>=1;i--)</p><p><b>  {</b></p><p>  p=(PNode*)malloc(sizeof(PNode));////開辟內(nèi)存空間</p><p>  p->data=i;//人的編號</p>

41、<p>  p->num=b[j];//人對應的密碼</p><p><b>  j--; </b></p><p>  p->next=clist2;</p><p><b>  clist2=p;</b></p><p><b>  if(i==a)&

42、lt;/b></p><p>  q=p; //用q指向鏈表最后一個結點,頭插法 </p><p><b>  }</b></p><p>  q->next=clist2;//構成循環(huán)鏈表</p><p>  return clist2; //clist即為指向第一個結點的指針</

43、p><p><b>  }</b></p><p>  //運算并輸出人的出列順序函數(shù) </p><p>  int Goout(PNode*clist2,int a,int b)</p><p><b>  {</b></p><p>  PNode *p,*q;//定義

44、兩個 PNode型指針 </p><p><b>  p=clist2;</b></p><p><b>  int i;</b></p><p>  printf("人依次出列的編號順序為:");</p><p><b>  do</b></p>

45、;<p><b>  {</b></p><p>  for(i=1;i<b-1;i++)</p><p>  { p=p->next; }</p><p>  printf("%d ",p->next->data);</p><p>  b=p->ne

46、xt->num;</p><p>  q=p->next; //q節(jié)點為要刪除的結點</p><p>  p->next=p->next->next;//P指向下下個結點 </p><p>  p=p->next;</p><p>  free(q);//刪除q</p>&

47、lt;p><b>  i=1;</b></p><p>  }while(p!=p->next);//是否只剩下最后一個結點</p><p>  printf("%d\n",p->data);//輸出最后一個人的編號 </p><p><b>  return 0;</b>&l

48、t;/p><p><b>  }</b></p><p><b>  。</b></p><p>  程序模塊及其接口描述</p><p>  1、函數(shù)名:list2()</p><p><b>  調(diào)用參數(shù):無</b></p><p&g

49、t;  調(diào)用方式:main()調(diào)用</p><p><b>  返回值:0</b></p><p>  2、函數(shù)名:Creat_clist(PNode *clist2,int a,int b[])</p><p>  調(diào)用參數(shù):people,n,p//people:指向第一個結點的指針;n:人的個數(shù);p:</p><p&g

50、t;<b>  密碼數(shù)組首地址</b></p><p>  調(diào)用方式:list2()調(diào)用</p><p>  返回值:people //people:指向第一個結點的指針</p><p>  3、函數(shù)名:Goout(PNode*clist2,int a,int b)</p><p>  調(diào)用參數(shù):people,n,m

51、 // people:指向第一個結點的指針; n:人的個數(shù);m:第一個任意給定的密碼值</p><p>  調(diào)用方式:list2()調(diào)用</p><p><b>  返回值:0</b></p><p>  程序的輸入與輸出描述</p><p><b>  輸入:人的數(shù)量n</b></p&g

52、t;<p><b>  初始密碼值m</b></p><p>  輸出:從1—n的人對應密碼</p><p>  人依次出列的編號順序</p><p><b>  調(diào)試分析或程序測試</b></p><p><b>  。</b></p><p

53、>  尚未解決的問題或改進方向</p><p><b>  無</b></p><p><b>  對軟件的使用說明</b></p><p>  在主菜單輸入2,可進入joseph環(huán)模塊。根據(jù)提示輸入要輸入的數(shù)值,敲回車后,輸出結果。</p><p><b>  紙牌游戲</b

54、></p><p>  對設計任務內(nèi)容的概述</p><p>  任務:編號為1-52張牌,正面向上,從第2張開始,以2為基數(shù),是2的倍數(shù)的牌翻一次,直到最后一張牌;然后,從第3張開始,以3為基數(shù),是3的倍數(shù)的牌翻一次,直到最后一張牌;然后…從第4張開始,以4為基數(shù),是4的倍數(shù)的牌翻一次, 直到最后一張牌;...再依次5的倍數(shù)的牌翻一次,6的,7的直到以52為基數(shù)的翻過,輸出:這時正

55、面向上的牌有哪些?</p><p><b>  需求分析或功能描述</b></p><p>  首先要定義數(shù)據(jù)類型,定義一個結構體, 包含撲克牌的編號,標記和指向下一張撲克牌的指針。</p><p>  然后,根據(jù)猴子的數(shù)量k=52創(chuàng)建一個單鏈表,再調(diào)用Turn()函數(shù),從2-52,按操作要求反轉。</p><p>  

56、最后根據(jù)count的值是否為0,輸出此時標號為o的撲克牌編號。</p><p>  概要設計或程序流程圖</p><p>  詳細設計或源代碼說明</p><p>  typedef struct node//創(chuàng)建結構體</p><p>  {int data; //撲克牌的編號 </p><p>  in

57、t count; //撲克牌標記 </p><p>  struct node *next;//指向下一張撲克牌的指針 </p><p>  }LinkList;</p><p><b>  //函數(shù)聲明</b></p><p>  LinkList *creat(int k);</p><

58、p>  LinkList *Turn(LinkList *head,int k);</p><p>  void Display(LinkList *head) ;</p><p>  int list3()</p><p><b>  {</b></p><p>  int i,k=52; </p>

59、<p>  LinkList *head,*p;//定義結點指針</p><p>  p=creat(k); //創(chuàng)建單鏈表 </p><p>  p=Turn(p,k);//從2-52,按操作要求反轉 </p><p>  printf("\n");</p><p>  Display(p);

60、//輸出最后正面向上的牌 </p><p>  printf("\n");</p><p>  system("pause");</p><p><b>  return 0;</b></p><p><b>  }</b></p>&l

61、t;p>  LinkList *creat(int k) //創(chuàng)建單鏈表 </p><p>  {LinkList *head,*p,*q;//定義結點指針</p><p><b>  int i=0;</b></p><p>  head=(LinkList *)malloc(sizeof(LinkList));//分配內(nèi)存

62、空間 </p><p>  p=head; //p指向頭結點 </p><p>  q=(LinkList *)malloc(sizeof(LinkList));//分配內(nèi)存空間 </p><p>  while(i<k)//從1-k建立單鏈表,并設定其初始count為0 (朝上) </p><p>  

63、{q->data=i+1; </p><p>  q->count=0; </p><p>  p->next=q; </p><p><b>  p=q;</b></p><p>  q=q->next;</p><p>  q=(LinkList *)malloc(si

64、zeof(LinkList));//分配內(nèi)存空間 </p><p><b>  i++;}</b></p><p>  p->next=NULL;//尾結點的next置空 </p><p>  return(head);</p><p><b>  }</b></p>

65、<p>  //從2-52,按操作要求反轉 </p><p>  LinkList *Turn(LinkList *head,int k)</p><p>  {LinkList *p;</p><p>  for(int i=2;i<=k;i++)</p><p><b>  {</b></p

66、><p>  p=head->next;</p><p>  while(p!=NULL)</p><p><b>  {</b></p><p>  if((p->data)%i==0)//判斷是否為i的倍數(shù) </p><p><b>  {</b></p

67、><p>  if(p->count==0)//count是1則變?yōu)? ,count是0則變?yōu)? </p><p><b>  {</b></p><p>  p->count=1;</p><p><b>  }</b></p><p><b>  e

68、lse</b></p><p><b>  {</b></p><p>  p->count=0;</p><p><b>  }</b></p><p><b>  }</b></p><p>  p=p->next;}<

69、/p><p><b>  }</b></p><p>  return(head);</p><p><b>  }</b></p><p>  //輸出最后正面向上的牌的函數(shù) </p><p>  void Display(LinkList *head) </p>

70、<p><b>  {</b></p><p>  LinkList *q;</p><p>  q=head->next; </p><p>  printf("正面向上的牌編號為:");</p><p>  while(q!=NULL)</p><p>&

71、lt;b>  {</b></p><p>  if(q->count==0) //若標號為0則輸出</p><p>  printf("%d ",q->data);</p><p>  q=q->next;</p><p><b>  }</b></p>

72、;<p>  printf("\n");</p><p><b>  }</b></p><p>  程序模塊及其接口描述</p><p>  1、函數(shù)名:list3()</p><p><b>  調(diào)用參數(shù):無</b></p><p>  

73、調(diào)用方式:main()調(diào)用</p><p><b>  返回值:0</b></p><p>  2、函數(shù)名:creat(int k);</p><p>  調(diào)用參數(shù):k //k=52,52張牌的編號</p><p>  調(diào)用方式:list3()調(diào)用</p><p>  返回值:p //p

74、:指向第一個結點的指針;</p><p>  3、函數(shù)名:Turn(LinkList *head,int k)</p><p>  調(diào)用參數(shù):p,k //p:指向第一個結點的指針;k:52張牌編號</p><p>  調(diào)用方式:list3()調(diào)用</p><p>  返回值:p //p:指向第一個結點的指針;</p>

75、<p>  4、函數(shù)名:Display(LinkList *head);</p><p>  調(diào)用參數(shù):p //p:指向第一個結點的指針</p><p>  調(diào)用方式:list3()調(diào)用</p><p><b>  返回值:0</b></p><p>  程序的輸入與輸出描述</p>&

76、lt;p><b>  輸入:無</b></p><p>  輸出:輸出最后正面向上的牌</p><p><b>  調(diào)試分析或程序測試</b></p><p>  尚未解決的問題或改進方向</p><p><b>  無</b></p><p>&

77、lt;b>  對軟件的使用說明</b></p><p>  在主菜單輸入3,回車,可進入紙牌游戲模塊,輸出最后正面向上的牌。</p><p><b>  幫助</b></p><p>  對設計任務內(nèi)容的概述</p><p>  對項目的內(nèi)容進行說明。</p><p><b

78、>  需求分析或功能描述</b></p><p>  幫助中還有對3個項目的說明:</p><p><b>  1、猴子選大王</b></p><p><b>  2、joseph環(huán)</b></p><p><b>  3、紙牌游戲</b></p>

79、<p>  概要設計或程序流程圖</p><p>  詳細設計或源代碼說明</p><p>  int Display1();</p><p>  int Display2();</p><p>  int Display3();</p><p>  int list4()</p><

80、p><b>  {int i;</b></p><p>  printf("\n");</p><p>  printf(" 幫助菜單 \n");</p><p>  printf(" ************

81、*******************\n\n");</p><p>  printf(" * 1.猴子選大王 *\n\n");</p><p>  printf(" * 2.joseph環(huán) *\n\n");</p>&

82、lt;p>  printf(" * 3.紙牌游戲 *\n\n");</p><p>  printf(" *******************************\n\n");</p><p>  printf("

83、 請選擇:");</p><p>  while (true)</p><p><b>  {</b></p><p>  scanf("%d",&i);</p><p>  if (i>=1&& i<=3)</p><p&g

84、t;<b>  break;</b></p><p><b>  else</b></p><p>  printf("輸入錯誤,");</p><p>  printf("請選擇1--3:");</p><p><b>  }</b>&

85、lt;/p><p>  switch (i)</p><p><b>  {</b></p><p>  case 1:{Display1();break;}</p><p>  case 2:{Display2();break;}</p><p>  case 3:{Display3();break

86、;}</p><p><b>  }</b></p><p><b>  }</b></p><p>  int Display1()</p><p><b>  {</b></p><p>  printf(" 猴子選大王

87、 \n\n");</p><p>  printf(" ************************************************\n\n");</p><p>  printf(" *任務:一堆猴子都有編號,編號是1,2,3 ,...m ,*\n\n");</p&

88、gt;<p>  printf(" * 這群猴子(m個)按照1-m的順序圍坐一圈,從*\n\n");</p><p>  printf(" * 第1開始數(shù),每數(shù)到第N個,該猴子就要離開此*\n\n");</p><p>  printf(" * 圈,這樣依次下來,直到圈中只剩下最后一只*\n

89、\n");</p><p>  printf(" * 猴子,則該猴子為大王. *\n\n");</p><p>  printf(" *要求:輸入數(shù)據(jù):輸入m,n m,n 為整數(shù),n<m。 *\n\n");</p><p>  printf("

90、 *輸出形式:中文提示按照m個猴子,數(shù)n 個數(shù)的方法,*\n\n");</p><p>  printf(" * 輸出為大王的猴子是幾號 ,建立一個函數(shù)來 *\n\n");</p><p>  printf(" * 實現(xiàn)此功能 . *\n\n");</p&

91、gt;<p>  printf(" ************************************************\n\n");</p><p>  system("pause");</p><p><b>  return 0;</b></p><p><b>

92、;  }</b></p><p>  int Display2()</p><p><b>  {</b></p><p>  printf(" joseph環(huán) \n\n");</p><p>  printf("

93、 ************************************************\n\n");</p><p>  printf(" *任務:編號是1,2,……,n的n個人按照順時針方向 *\n\n");</p><p>  printf(" * 圍坐一圈,每個人只有一個密碼(正整數(shù))。一*\n\n");&l

94、t;/p><p>  printf(" * 開始任選一個正整數(shù)作為報數(shù)上限值m,從第一*\n\n");</p><p>  printf(" * 個人開始順時針方向自1開始順序報數(shù),報到 *\n\n");</p><p>  printf(" * m時停止報數(shù)。報m的人出列,將他的密碼

95、作 *\n\n");</p><p>  printf(" * 為新的m值,從他在順時針方向的下一個人開 *\n\n");</p><p>  printf(" * 始重新從1報數(shù),如此下去,直到所有人全部 *\n\n");</p><p>  printf(" * 出

96、列為止。設計一個程序來求出出列順序。 *\n\n");</p><p>  printf(" * 實現(xiàn)此功能. *\n\n");</p><p>  printf(" *要求:利用單向循環(huán)鏈表存儲結構模擬此過程,按照*\n\n");</p><p&g

97、t;  printf(" * 出列的順序輸出各個人的編號。 *\n\n");</p><p>  printf(" *測試數(shù)據(jù):m的初值為20,n=7 ,7個人的密碼依次為 *\n\n");</p><p>  printf(" * 3,1,7,2,4,7,4,首先m=6,則正確的輸 *\n\

98、n");</p><p>  printf(" * 出是什么? *\n\n");</p><p>  printf(" * 要求:輸入數(shù)據(jù):建立輸入處理輸入數(shù)據(jù),輸入m *\n\n");</p><p>  printf(" *

99、 的初值,n ,輸入每個人的密碼,建立單循 *\n\n");</p><p>  printf(" * 環(huán)鏈表。 *\n\n");</p><p>  printf(" *輸出形式:建立一個輸出函數(shù),將正確的輸出序列 *\n\n");</p>

100、<p>  printf(" ************************************************\n\n");</p><p>  system("pause");</p><p><b>  return 0;</b></p><p><b>  }

101、</b></p><p>  int Display3()</p><p><b>  {</b></p><p>  printf(" 紙牌游戲 \n\n");</p><p>  printf(" ***

102、*********************************************\n\n");</p><p>  printf(" *任務:編號為1-52張牌,正面向上,從第2張開始, *\n\n");</p><p>  printf(" * 以2為基數(shù),是2的倍數(shù)的牌翻一次,直 到最 *\n\n");</

103、p><p>  printf(" * 后一張牌;然后,從第3張開始,以3為基數(shù),*\n\n");</p><p>  printf(" * 是3的倍數(shù)的牌翻一次,直到最后一張牌;然 *\n\n");</p><p>  printf(" * 后,從第4張開始,以4為基數(shù),是4的倍數(shù)的

104、*\n\n");</p><p>  printf(" * 牌翻一次, 直到最后一張牌;...再依次5的 *\n\n");</p><p>  printf(" * 倍數(shù)的牌翻一次,6的,7的直到以52為基數(shù)的*\n\n");</p><p>  printf(" * 翻

105、過,輸出:這時正面向上的牌有哪些? *\n\n");</p><p>  printf(" ************************************************\n\n");</p><p>  system("pause");</p><p><b>  return

106、0;</b></p><p><b>  }</b></p><p>  程序模塊及其接口描述</p><p>  1、函數(shù)名:list4()</p><p><b>  調(diào)用參數(shù):無</b></p><p>  調(diào)用方式:main()調(diào)用</p>

107、<p><b>  返回值:0</b></p><p>  2、函數(shù)名:Display1()</p><p><b>  調(diào)用參數(shù):無</b></p><p>  調(diào)用方式:list4()調(diào)用</p><p><b>  返回值:0</b></p>&l

108、t;p>  3、函數(shù)名:Display2()</p><p>  調(diào)用參數(shù):people,n,m</p><p>  調(diào)用方式:list4()調(diào)用</p><p><b>  返回值:0</b></p><p>  4、函數(shù)名:Display3()</p><p><b>  調(diào)用

109、參數(shù):無</b></p><p>  調(diào)用方式:list4()調(diào)用</p><p><b>  返回值:0</b></p><p>  程序的輸入與輸出描述</p><p>  輸入:輸入對應數(shù)字(1/2/3)</p><p>  輸出:輸出對應的項目的文字說明</p>

110、<p><b>  調(diào)試分析或程序測試</b></p><p>  尚未解決的問題或改進方向</p><p><b>  無</b></p><p><b>  對軟件的使用說明</b></p><p>  在幫助菜單輸入1/2/3,回車,會輸出對應項目的說明。<

111、;/p><p><b>  結論及體會</b></p><p>  經(jīng)過一個星期的課程設計,過程曲折可謂一語難盡。整天都是對著電腦,不然就是翻閱資料。在此期間我失落過,也曾一度熱情高漲。點點滴滴令我回味無長。這次課程設計使我體會到只有做到細心耐心,恒心才能做好事情。 這次的課程設計,加強了我們動手、思考和解決問題的能力。鞏固和加深了對數(shù)據(jù)結構的理解,提高綜合運用本

112、課程所學知識的能力。培養(yǎng)了我選用參考書,查閱手冊及文獻資料的能力。培養(yǎng)獨立思考,深入研究,分析問題、解決問題的能力。通過實際編譯系統(tǒng)的分析設計、編程調(diào)試,掌握應用軟件的分析方法和工程設計方法。通過課程設計,培養(yǎng)了我嚴肅認真的工作作風,逐步建立正確的生產(chǎn)觀念、經(jīng)濟觀念和全局觀念。而且做課程設計同時也是對課本知識的鞏固和加強,平時看課本時,有些問題就不是很能理解,做完課程設計,那些問題就迎刃而解了。而且還可以記住很多東西。認識來源于實踐,實

113、踐是認識的動力和最終目的,實踐是檢驗真理的唯一標準。所以這個期末測試之后的課程設計對我們的作用是非常大的。 這次的課程設計使我懂得了理論與實際相結合是很非常重要的,只有理論知識是遠遠不夠的,只有把所學的理論知識與實踐相結合起來,從理論中得出結論,</p><p><b>  主函數(shù)流程圖</b></p><p><b>  附錄1:參考文獻</

114、b></p><p>  [1] 《數(shù)據(jù)結構教程(第3版)》,李春葆,清華大學出版社,2010</p><p>  [2]《數(shù)據(jù)結構》,楊劍,清華大學出版社,2011</p><p>  [3]《數(shù)據(jù)結構(C語言版)》,嚴蔚敏 吳偉民,清華大學出版社,1997</p><p>  [4]《Data Structures Using C數(shù)

115、據(jù)結構(C語言版)》,R Krishnamoorthy、G Indirani Kumaravel,清華大學出版社,2009-9</p><p>  [5]《C++數(shù)據(jù)結構與程序設計 (美)Robert L.Kruse/Alexander J.Ryba著/錢麗萍譯》, </p><p>  清華大學出版社,2004 </p><p>  [6]《計算機算法設計與分析(

116、第2版)》,王曉東, 電子工業(yè)出版社, 2004</p><p>  附錄2:部分源代碼清單</p><p>  本課程設計共有5份代碼:“main.cpp”“l(fā)ist1.cpp”“l(fā)ist2.cpp”“l(fā)ist3.cpp”“l(fā)ist4.cpp”</p><p>  “main.cpp”</p><p>  #include <stdi

117、o.h></p><p>  #include <stdlib.h></p><p>  #include "list1.cpp"</p><p>  #include "list2.cpp"</p><p>  #include "list3.cpp"</p

118、><p>  #include "list4.cpp"</p><p>  int main()</p><p><b>  {</b></p><p>  int i,flag=1;</p><p>  while (flag)</p><p>  {L1

119、:printf(" 主菜單 \n");</p><p>  printf(" *******************************\n\n");</p><p>  printf(" * 1.猴子選大王

120、 *\n\n");</p><p>  printf(" * 2.joseph環(huán) *\n\n");</p><p>  printf(" * 3.紙牌游戲 *\n\n");</p><p>  print

121、f(" * 4.幫助 *\n\n");</p><p>  printf(" * 0.退出 *\n\n");</p><p>  printf(" *******************

122、************\n\n");</p><p>  printf(" 請選擇:");</p><p>  while (true)</p><p><b>  {</b></p><p>  scanf("%d",&am

123、p;i);</p><p>  if (i>=0 && i<=4)</p><p><b>  break;</b></p><p><b>  else</b></p><p>  printf("輸入錯誤,");</p><p&

124、gt;  printf("請選擇0--4:\n");</p><p><b>  }</b></p><p>  switch (i)</p><p><b>  {</b></p><p>  case 1:{list1();break;}</p><p&g

125、t;  case 2:{list2();break;}</p><p>  case 3:{list3();break;}</p><p>  case 4:{list4();break;}</p><p>  case 0:{ flag=0;break;}</p><p><b>  }</b></p>

126、<p><b>  }</b></p><p><b>  }</b></p><p>  “l(fā)ist1.cpp”</p><p>  typedef int Elemtype;</p><p>  typedef struct Mnode</p><p><

127、b>  {</b></p><p>  Elemtype data;</p><p>  struct Mnode *next;</p><p><b>  }MNode;</b></p><p>  struct Mnode* Creat_clist1(MNode *clist1,int a);<

128、;/p><p>  int Kingmonkey(MNode*clist1,int a,int b);</p><p>  int list1()</p><p><b>  {</b></p><p><b>  int m,n;</b></p><p>  S1:print

129、f("請輸入猴群的數(shù)量m:");</p><p>  scanf("%d",&m);</p><p>  printf("請輸入每數(shù)到第N個n:");</p><p>  scanf("%d",&n);</p><p><b>  if(

130、m<=n)</b></p><p><b>  {</b></p><p><b>  goto S1;</b></p><p><b>  }</b></p><p>  printf("\n");</p><p>

131、;  MNode *monkey; </p><p>  monkey=NULL;</p><p>  monkey=Creat_clist1(monkey,m); //建立猴群的循環(huán)鏈表</p><p>  Kingmonkey(monkey,m,n);</p><p>  system("pause");&

132、lt;/p><p>  return 0; </p><p><b>  }</b></p><p>  struct Mnode* Creat_clist1(MNode *clist1,int a)</p><p><b>  {</b></p><p>  MNode *p,

133、*q;</p><p><b>  int i;</b></p><p>  clist1=NULL;</p><p>  for(i=a;i>=1;i--)</p><p><b>  {</b></p><p>  p=(MNode*)malloc(sizeof(M

134、Node));</p><p>  p->data=i;</p><p>  p->next=clist1;</p><p><b>  clist1=p;</b></p><p><b>  if(i==a)</b></p><p>  q=p; /

135、/用q指向鏈表最后一個節(jié)點</p><p><b>  }</b></p><p>  q->next=clist1; //構成循環(huán)鏈表</p><p>  return clist1; //clist即為指向第一個節(jié)點的指針</p><p><b>  }</b></p>

136、;<p>  int Kingmonkey(MNode*clist1,int a,int b)</p><p><b>  {</b></p><p>  MNode *p,*q;</p><p><b>  p=clist1;</b></p><p><b>  int i

137、;</b></p><p>  printf("猴子依次離開此圈的編號順序為:");</p><p><b>  do</b></p><p><b>  {</b></p><p>  for(i=1;i<b-1;i++)</p><p&g

138、t;  { p=p->next; }</p><p>  printf("%d ",p->next->data);</p><p>  q=p->next; //q節(jié)點為要刪除的節(jié)點</p><p>  p->next=p->next->next;</p><p>  

139、p=p->next;</p><p><b>  free(q);</b></p><p>  }while(p!=p->next);</p><p>  printf("\n");</p><p>  printf("猴王的編號是:%d\n",p->data);

140、</p><p>  printf("\n");</p><p><b>  return 0;</b></p><p><b>  }</b></p><p>  “l(fā)ist2.cpp”</p><p>  typedef int Elemtype;&l

141、t;/p><p>  typedef struct Pnode</p><p><b>  {</b></p><p>  Elemtype data;</p><p><b>  int num;</b></p><p>  struct Pnode *next;</p&

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論