數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)“紙牌游戲”_第1頁(yè)
已閱讀1頁(yè),還剩10頁(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>  數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告</p><p><b>  題目:紙牌游戲</b></p><p>  采用的方法: 在程序中定義一個(gè)宏,用宏來(lái)表示翻牌操作。用一個(gè)for循環(huán)來(lái)控制基數(shù),用另一個(gè)for循環(huán)來(lái)控制從第幾張牌開始,然后判斷第K張牌除以基數(shù)j后的余數(shù)是否為0,如為0就是能整除,最后翻牌。</p><p><b>

2、  題目(摘要)</b></p><p>  問題描述:編號(hào)為1-52張牌,正面向上,從第2張開始,以2為基數(shù),是2的倍數(shù)的牌翻一次,直到最后一張牌;然后,從第3張開始,以3為基數(shù),是3的倍數(shù)的牌翻一次,直到最后一張牌;然后…從第4張開始,以4為基數(shù),是4的倍數(shù)的牌翻一次, 直到最后一張牌;...再依次5的倍數(shù)的牌翻一次,6的,7的,直到以52為基數(shù)的牌翻過,輸出:這時(shí)正面向上的牌有哪些?</p

3、><p><b>  目錄</b></p><p>  1.引言:- 4 -</p><p>  2.需求分析:- 4 -</p><p>  3.概要設(shè)計(jì):- 5 -</p><p>  4.詳細(xì)設(shè)計(jì):- 6 -</p><p>  5.測(cè)試結(jié)果:- 7 -<

4、/p><p>  6.調(diào)試分析:- 7 -</p><p>  7.設(shè)計(jì)體會(huì):- 8 -</p><p>  8.結(jié)束語(yǔ):- 8 -</p><p>  參考文獻(xiàn):- 9 -</p><p><b>  附錄:- 9 -</b></p><p><b>  

5、1.引言: </b></p><p>  通過本門課程的學(xué)習(xí),我們應(yīng)該能透徹地理解各種數(shù)據(jù)對(duì)象的特點(diǎn),學(xué)會(huì)數(shù)據(jù)的組織方法和實(shí)現(xiàn)方法,并進(jìn)一步培養(yǎng)良好的程序設(shè)計(jì)能力和解決實(shí)際問題的能力,而且該課程的研究方法對(duì)我們學(xué)生在學(xué)校和離校后的工作和學(xué)習(xí),也有重要意義。數(shù)據(jù)結(jié)構(gòu)是電子信息科學(xué)與技術(shù)專業(yè)的一門核心專業(yè)基礎(chǔ)課程,在該專業(yè)的課程體系中起著承上啟下的作用,學(xué)好了數(shù)據(jù)結(jié)構(gòu)對(duì)于提高理論認(rèn)知水平和實(shí)踐能力有著極為

6、重要的作用。學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)的最終目的是為了獲得求解問題問能力。對(duì)于現(xiàn)實(shí)世界中的問題,應(yīng)該能從中抽象出一個(gè)適當(dāng)?shù)臄?shù)學(xué)模型,該數(shù)學(xué)模型在計(jì)算機(jī)內(nèi)部的數(shù)據(jù)結(jié)構(gòu)來(lái)表示,然后設(shè)計(jì)一個(gè)解此數(shù)學(xué)模型的算法,在進(jìn)行編程調(diào)試,最后活的問題的解答?;诖嗽颍F(xiàn)在我們開設(shè)數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)。針對(duì)數(shù)據(jù)結(jié)構(gòu)課程的特點(diǎn),著眼于培養(yǎng)我們的實(shí)踐能力。</p><p><b>  2.需求分析: </b></p>

7、<p>  可以定義一個(gè)宏,如果第k張牌除以基數(shù)j后的余數(shù)是否為0,如為0就是能整除,然后就利用定義的宏進(jìn)行翻牌操作。設(shè)一個(gè)一維數(shù)組card[52],并將所有變量賦初值為0,表示牌正面朝上。首先將52張牌初始化成正面朝上,然后用一個(gè)for循環(huán)來(lái)控制基數(shù),用另一個(gè)for循環(huán)來(lái)控制從第幾張牌開始。最后打印判斷出來(lái)的正面朝上的牌。</p><p><b>  3.概要設(shè)計(jì):</b>&l

8、t;/p><p>  1.當(dāng)每個(gè)號(hào)碼每次遇到是某個(gè)數(shù)的倍數(shù)時(shí),都會(huì)相應(yīng)的翻一次,這樣,每張牌會(huì)翻的次數(shù)就各不一樣,可能很多次,也可能只有一兩次,結(jié)果就只是要輸出在經(jīng)過各個(gè)不同次數(shù)的翻牌后,正面向上的牌都有哪幾個(gè)。舉例說(shuō)明一下,比如24,第一次它是2的倍數(shù)時(shí)要從正面翻到背面,當(dāng)進(jìn)行到3時(shí),就又要從背面翻回來(lái),而到4時(shí)還要在翻,同理呢,到6.8.12…它都要來(lái)回的翻。如果它在多次的翻牌后,正面還向上了,那么它就是要輸出的

9、結(jié)果之一。</p><p>  2.用#define OPPOSITE(i) i = i?0:1這個(gè)宏將牌的狀態(tài)標(biāo)志求反,也即為翻牌操作。將所有的牌建立一個(gè)數(shù)組,運(yùn)用for的循環(huán)嵌套執(zhí)行以下操作:把52張牌初始化成正面朝上、控制基數(shù)和翻牌次數(shù),判斷最終的紙牌朝向并打印出結(jié)果,具體實(shí)現(xiàn)算法參看詳細(xì)設(shè)計(jì)。</p><p><b>  4.詳細(xì)設(shè)計(jì):</b></p&g

10、t;<p>  N </p><p><b>  Y</b></p><p><b>  N</b></p><p><b>  Y</b></p><p><b>  N</b></p><

11、;p><b>  Y</b></p><p><b>  圖2 - 1</b></p><p><b>  5.測(cè)試結(jié)果:</b></p><p><b>  圖2 - 2</b></p><p><b>  6.調(diào)試分析:</b&g

12、t;</p><p>  (1).這題的時(shí)間復(fù)雜度是O(52)。</p><p>  (2).語(yǔ)法錯(cuò)誤相對(duì)來(lái)說(shuō)要好調(diào)試一些的,但有兩點(diǎn)需要特別指出:一是應(yīng)該用規(guī)范化的格式輸入源程序,推薦的格式是:函數(shù)體內(nèi)、循環(huán)體內(nèi)等都應(yīng)該縮進(jìn)一個(gè)TAB位,相應(yīng)的塊語(yǔ)句的兩個(gè)大括號(hào)都應(yīng)保持在同一列上,函數(shù)體之間、模塊之間都應(yīng)用空行隔開,這就解決了各種匹配的問題,更重要的是它極大的增強(qiáng)的程序的可讀性。二是應(yīng)該

13、注意函數(shù)的實(shí)參與形參的傳遞問題,要盡量保持兩者類型的匹配,(當(dāng)不匹配又可通過編譯時(shí)會(huì)發(fā)生數(shù)據(jù)類型的隱式轉(zhuǎn)換,這樣會(huì)產(chǎn)生很多不安全且又很難找到的錯(cuò)誤)當(dāng)不需要改變形參時(shí),只需傳入變量,如果你想在函數(shù)體內(nèi)改變函數(shù)的外部變量,則傳入指針。</p><p>  (3).雖然本次程序的題目難度與其他問題相比不是很高,但仍有很多問題我們是很容易忽視的,其一:在理解題目的要求時(shí),注意翻牌的次數(shù)可能有多次;其二:for循環(huán)的嵌套

14、使用在書寫時(shí)很容易漏掉大括弧。</p><p><b>  7.設(shè)計(jì)體會(huì):</b></p><p>  做一個(gè)課程設(shè)計(jì)要注意很多方面,無(wú)論是格式,還是書寫的內(nèi)容和要表達(dá)的思想都得嚴(yán)格要求自己,所以做起來(lái)真的不算容易。本次課程設(shè)計(jì)涉及了很多知識(shí),由于往日沒有學(xué)得很扎實(shí),對(duì)某些問題仍然比較疑惑,所以要進(jìn)行充足的補(bǔ)習(xí)。期間,我翻閱了很多書籍,知識(shí)總是聯(lián)系很緊密的,解決完這個(gè)

15、問題又發(fā)現(xiàn)了新的問題,之后,為了解決新問題又發(fā)現(xiàn)了更多的問題,就這樣,我得等到一個(gè)一個(gè)把問題處理完。</p><p><b>  8.結(jié)束語(yǔ):</b></p><p>  問題越多,明白的也就會(huì)越來(lái)越多,做一次課程設(shè)計(jì)就像從頭到尾做了一次系統(tǒng)的復(fù)習(xí),從基礎(chǔ)到難點(diǎn),從輪廓到每個(gè)知識(shí)點(diǎn),數(shù)據(jù)結(jié)構(gòu)的研究?jī)?nèi)容在我的腦海里就再也不像以前那么模糊了。設(shè)計(jì)程序來(lái)解決現(xiàn)在存在的問題,

16、把理論知識(shí)付諸于實(shí)踐,對(duì)于我們這些計(jì)算機(jī)專業(yè)的本科生來(lái)說(shuō),實(shí)際能力的培養(yǎng)至關(guān)重要,而這種實(shí)際能力的培養(yǎng)單靠課堂教學(xué)是遠(yuǎn)遠(yuǎn)不夠的,必須從課堂走向?qū)嵺`,這也是我們學(xué)習(xí)的目的。做完設(shè)計(jì),我已深刻體會(huì)到了學(xué)習(xí)這門課程的重要性與必要性了,同時(shí),它留給我很多思考:學(xué)習(xí)是思考一個(gè)的過程,我們應(yīng)該主動(dòng)去想學(xué)習(xí)一門知識(shí)后怎么去運(yùn)用,而不是一味地被動(dòng)地接受。</p><p>  數(shù)據(jù)結(jié)構(gòu)及其算法在解決現(xiàn)實(shí)生活中的常見問題和書寫軟件設(shè)

17、計(jì)方面上都有著重要的意義,我們應(yīng)該好好掌握它的相關(guān)知識(shí),在以后的學(xué)習(xí)過程中,更多的去學(xué)會(huì)如何運(yùn)用知識(shí)。</p><p>  在此,我衷心感謝董躍華老師的指導(dǎo)!</p><p><b>  參考文獻(xiàn):</b></p><p>  1、姜學(xué)軍《數(shù)據(jù)結(jié)構(gòu)》(C語(yǔ)言版).中國(guó)輕工出版社</p><p>  2、嚴(yán)蔚敏《數(shù)據(jù)結(jié)

18、構(gòu)》(C語(yǔ)言版).清華大學(xué)出版社</p><p>  3、徐孝凱《數(shù)據(jù)結(jié)構(gòu)實(shí)用教程》(C/C++描述).清華大學(xué)出版社</p><p>  4、陳慧南《數(shù)據(jù)結(jié)構(gòu)》(使用C++語(yǔ)言描述).東南大學(xué)出版社</p><p><b>  附錄:</b></p><p><b>  源程序:</b><

19、;/p><p>  #include <stdio.h> </p><p>  #define OPPOSITE(i) i = i?0:1</p><p>  int main() </p><p>  { int card[52],i;</p><p><b>  for(;;){</b&

20、gt;</p><p>  printf("\n*********************紙牌游戲功能菜單表***********************\n");</p><p>  printf("* 1:按照游戲規(guī)則翻牌,并輸出翻牌結(jié)果 *\n");</p><p>  printf(

21、"* 2:退出 *\n");</p><p>  printf("*********************紙牌游戲功能菜單表***********************\n");</p><p>  printf("\n請(qǐng)按1,2完成操作:&qu

22、ot;);</p><p>  scanf("%d",&i);</p><p>  switch(i){</p><p><b>  case 1:</b></p><p>  for (int i = 0; i < 52; i++) </p><p><b

23、>  { </b></p><p>  card[i] = 0; //將52張牌初始化成正面朝上 </p><p><b>  } </b></p><p>  for (int j=2; j<=52; j++) //此層循環(huán)是控制基數(shù)的 </p><p><b>  { </b&

24、gt;</p><p>  for (int k = j; k <= 52 ; k++)//此層循環(huán)是控制從第幾張牌開始 </p><p><b>  { </b></p><p>  if (k%j == 0)//判斷第k張牌除以基數(shù)j后的余數(shù)是否為0,如為0就是能整除 </p><p><b>  {

25、 </b></p><p>  OPPOSITE(card[k-1]);</p><p><b>  } </b></p><p><b>  } </b></p><p><b>  } </b></p><p>  printf(&quo

26、t;**********************************\n");</p><p>  printf("正面朝上的牌有:");</p><p>  for (int h = 0; h < 52; h++)//開始打印 </p><p><b>  { </b></p><p

27、>  if (card[h] == 0)//判斷牌的狀態(tài)是否為正面朝上 </p><p><b>  { </b></p><p>  printf(" %d", h+1); </p><p><b>  } </b></p><p><b>  }</b&

28、gt;</p><p>  printf("\n**********************************\n");break;</p><p>  case 2: printf("已退出!\n");return 0;</p><p><b>  }</b></p><p&g

溫馨提示

  • 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ù)覽,若沒有圖紙預(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)論