數(shù)據(jù)結構課程設計——紙牌游戲_第1頁
已閱讀1頁,還剩8頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、<p>  題 目: 紙牌游戲 </p><p><b>  目錄</b></p><p>  一、 需求分析…………………………………………………3 </p><p>  二、 概要設計…………………………………………………3</p><p>  詳細設計………………………………………

2、…………4</p><p>  調(diào)試分析和測試結果……………………………………7</p><p>  總結………………………………………………………8</p><p>  參考文獻…………………………………………………8</p><p>  致謝………………………………………………………8</p><p>  附錄……

3、…………………………………………………9</p><p><b>  需求分析</b></p><p>  按以下規(guī)則進行翻牌:編號為1-52張牌,正面向上,從第2張開始,以2為基數(shù),是2的倍數(shù)的牌翻一次,直到最后一張牌;然后,從第3張開始,以3為基數(shù),是3的倍數(shù)的牌翻一次,直到最后一張牌;然后…從第4張開始,以4為基數(shù),是4的倍數(shù)的牌翻一次, 直到最后一張牌;...

4、再依次5的倍數(shù)的牌翻一次,6的,7的 直到 以52為基數(shù)的翻過,最后輸出正面向上的牌有哪些?</p><p>  用函數(shù)obv1 、obv2按照題目要求的規(guī)則,用for循環(huán)來實現(xiàn).</p><p><b>  概要設計</b></p><p>  1.當從第二個編號開始的每張牌每次遇到是其倍數(shù)時,都會相應的翻一次,這樣,每張牌會翻的次數(shù)就各不一

5、樣,可能很多次,也可能只有一兩次,而結果只是要輸出在經(jīng)過各個不同次數(shù)的翻牌后,正面向上的牌都有哪幾張。比如24,第一次它是2的倍數(shù)時要從正面翻到背面,當進行到3時,就又要從背面翻回來,而到4時還要在翻,同理呢,到6.8.12…它都要來回的翻。如果它在多次的翻牌后,正面還向上了,那么它就是要輸出的結果之一。</p><p>  2.建立代表52張牌的線性表——調(diào)用翻牌算法按照規(guī)則翻牌——輸出翻牌算法的結果</

6、p><p>  最為主要的翻牌算法的實現(xiàn):</p><p>  void obv2 (SqList L,int n) {</p><p>  for (int i=2;i<=n;i++)</p><p>  for (int j=i;j<=L.length;j++)</p><p>  if (j%i

7、==0){</p><p>  if (L.data[j]==1)</p><p>  L.data[j]=0;</p><p>  else if (L.data[j]==0)</p><p>  L.data[j]=1;</p><p><b>  }</b></p>

8、;<p><b>  }</b></p><p>  以上是通過for循環(huán)對是當前基數(shù)倍數(shù)的牌進行翻牌 </p><p>  3、根據(jù)算法思想,流程圖如下:</p><p><b>  三、詳細設計</b></p><p><b>  1、預處理</b><

9、;/p><p>  #include<iostream.h></p><p>  #include<stdlib.h></p><p>  #define SIZE 100 //線性表存儲空間的初始分配量</p><p><b>  2、數(shù)據(jù)類型定義</b></p><p>

10、  定義一個結構體類型SqList,結構體中數(shù)組指針elem指示線性表的基地址,length指示線性表的當前長度。Listsize指示順序表當前分配的存儲空間大小,一旦因插入元素而空間不足時,可進行再分配。</p><p>  typedef struct{</p><p>  int * elem; //存儲空間基址</p><p>  int *

11、 data;</p><p>  int length; //當前長度</p><p>  int listsize; //當前分配的存儲容量</p><p><b>  }SqList;</b></p><p>  3、主要函數(shù)功能介紹</p><p>  構造一個空的線性表

12、L用來存儲分配:</p><p>  void InitList_Sq(SqList &L) { </p><p>  // 構造一個空的線性表L。 </p><p>  L.elem = (int *)malloc(SIZE*sizeof(int)); </p><p>  if (!L.elem) </p>&l

13、t;p>  cout<<"ERROR"; // 存儲分配失敗 </p><p>  L.data = (int *)malloc(SIZE*sizeof(int)); </p><p>  if (!L.data) </p><p>  cout<<"ERROR";

14、// 存儲分配失敗 </p><p>  L.length = 0; // 空表長度為0 </p><p>  L.listsize = SIZE; // 初始存儲容量 </p><p>  } // InitList_Sq</p><p>  調(diào)用PrintList_Sq函數(shù)用來顯示線性表中的數(shù)據(jù):&l

15、t;/p><p>  void PrintList_Sq(SqList L) { </p><p>  //顯示線性表中所有數(shù)據(jù) </p><p>  for(int i=1;i<=L.length;i++) </p><p><b>  { </b></p><p>  if (L.

16、data[i]==1) </p><p>  cout<<L.elem[i]<<" ";</p><p><b>  } </b></p><p>  cout<<endl; </p><p><b>  }</b></p>

17、<p>  調(diào)用函數(shù)obv1,確保翻牌前每張牌都是正面向上:</p><p>  void obv1 (SqList L) {</p><p>  for (int i=1;i<=L.length;i++)</p><p>  L.data[i]=1;</p><p><b>  }</b><

18、/p><p>  調(diào)用函數(shù)obv2,按照規(guī)則翻牌:</p><p>  void obv2 (SqList L,int n) {</p><p>  for (int i=2;i<=n;i++)</p><p>  for (int j=i;j<=L.length;j++)</p><p>  if

19、(j%i==0){</p><p>  if (L.data[j]==1)</p><p>  L.data[j]=0;</p><p>  else if (L.data[j]==0)</p><p>  L.data[j]=1;</p><p><b>  }</b></

20、p><p><b>  }</b></p><p><b>  4、主函數(shù)</b></p><p>  void main()</p><p>  {SqList L;</p><p><b>  int n=52;</b></p>&

21、lt;p>  InitList_Sq(L);</p><p>  for(int i=1;i<=n;i++)</p><p><b>  {</b></p><p>  L.elem[i]=i; </p><p>  L.length++;</p><p><b>  

22、}</b></p><p><b>  obv1 (L);</b></p><p>  obv2 (L,n);</p><p>  cout<<"正面向上的牌的編號是:"<<endl;</p><p>  PrintList_Sq(L);</p>&l

23、t;p><b>  }</b></p><p>  四、調(diào)試分析和測試結果</p><p>  在編寫程序時應該用規(guī)范化的格式輸入源程序,同時注意不要忘了編寫頭文件#include<iostream.h>、#include<stdlib.h>;在編程時不要忽略了一些細節(jié),不要忘了;、}等符號,否則程序將無法正常運行。</p>

24、<p>  在調(diào)用指針時應先將其初始化,如果沒有初始化指針就調(diào)用它,這樣很不安全,雖然你有時可以運行,卻有了不安定的因素。如:int *data;可以成定義:int data [52];這里的data是一個常量地址,也是一個數(shù)組名,因此不用擔心它沒有被初始化。</p><p><b>  五、總結</b></p><p>  通過這次的數(shù)據(jù)結構課程設計,我

25、明顯感覺到自己在很多方面的不足,但問題總是要解決的,必須找出問題然后將其一一解除。所以在整個過程中,我不斷加深了對數(shù)據(jù)結構的理解與一些程序寫書時要注意的事項,也讓我對這門課程有了進一步的了解和認識。完成一個課程設計要注意很多方面,無論是格式、書寫的內(nèi)容還是要表達的思想,所以我們必須嚴格要求自己。本次課程設計涉及了很多知識,由于往日學得不扎實,對某些問題仍然存在疑惑,我查閱了相關書籍,以便將疑難問題解決,同時更加進一步的掌握相關知識。&l

26、t;/p><p>  此次的課程設計不僅讓我深刻體會到了學習這門課程的重要性與必要性,也讓我懂得了學習是思考一個的過程,我們應該主動去思考學到的知識以及學到后怎么去運用,而不是一味地被動地接受。數(shù)據(jù)結構及其算法在解決現(xiàn)實生活中的常見問題和書寫軟件設計方面上都有著重要的意義,我們應該好好掌握它的相關知識,在以后的學習過程中,更多的去學會如何運用知識。</p><p><b>  六、參

27、考文獻</b></p><p>  [1]劉振鵬 張曉莉 郝杰.數(shù)據(jù)結構.北京:中國鐵道出版社.2005</p><p>  [2]譚浩強 .C語言程序設計(第二版).北京:清華大學出版社.2008</p><p>  [3]嚴蔚敏 吳偉民.數(shù)據(jù)結構(C語言版).北京:清華大學出版社.2010</p><p>  [4]黃國瑜 葉

28、乃菁.數(shù)據(jù)結構(C語言版).北京:清華大學出版社.2002</p><p>  [5]朱站立.數(shù)據(jù)結構(第三版).西安:西安交通大學出版社.2004</p><p><b>  七、致謝</b></p><p>  感謝學校為我們提供的學習及完成課程設計的機會,也感謝徐曉蓉老師的教導和同學們對我的幫助與支持。</p><p&

29、gt;<b>  八、附錄</b></p><p><b>  程序源碼:</b></p><p>  #include<iostream.h></p><p>  #include<stdlib.h></p><p>  #define SIZE 100 //線性表存儲空

30、間的初始分配量</p><p>  typedef struct{</p><p>  int * elem; //存儲空間基址</p><p>  int * data;</p><p>  int length; //當前長度</p><p>  int listsize; //

31、當前分配的存儲容量</p><p><b>  }SqList;</b></p><p>  void InitList_Sq(SqList &L) { </p><p>  // 構造一個空的線性表L。 </p><p>  L.elem = (int *)malloc(SIZE*sizeof(int));

32、 </p><p>  if (!L.elem) </p><p>  cout<<"ERROR"; // 存儲分配失敗 </p><p>  L.data = (int *)malloc(SIZE*sizeof(int)); </p><p>  if (!L.data) </p>

33、<p>  cout<<"ERROR"; // 存儲分配失敗 </p><p>  L.length = 0; // 空表長度為0 </p><p>  L.listsize = SIZE; // 初始存儲容量 </p><p>  } // InitList_Sq&l

34、t;/p><p>  void PrintList_Sq(SqList L) { </p><p>  //顯示線性表中所有數(shù)據(jù) </p><p>  for(int i=1;i<=L.length;i++) </p><p>  { if (L.data[i]==1) </p><p>  cout<

35、;<L.elem[i]<<" ";</p><p><b>  } </b></p><p>  cout<<endl; </p><p><b>  }</b></p><p>  void up(SqList L) {</p>

36、<p>  for (int i=1;i<=L.length;i++)</p><p>  L.data[i]=1;</p><p><b>  }</b></p><p>  void down(SqList L,int n) {</p><p>  for (int i=2;i<=n;i

37、++)</p><p>  for (int j=i;j<=L.length;j++)</p><p>  if (j%i==0){</p><p>  if (L.data[j]==1)</p><p>  L.data[j]=0;</p><p>  else if (L.data[j]=

38、=0)</p><p>  L.data[j]=1;</p><p><b>  }</b></p><p><b>  }</b></p><p>  void main()</p><p>  {SqList L;</p><p>&l

39、t;b>  int n=52;</b></p><p>  InitList_Sq(L);</p><p>  for(int i=1;i<=n;i++)</p><p><b>  {</b></p><p>  L.elem[i]=i; </p><p>  L.

40、length++;</p><p><b>  }</b></p><p><b>  up(L);</b></p><p>  down(L,n);</p><p>  cout<<"正面向上的牌的編號是:"<<endl;</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

提交評論