200504061278人機(jī)猜數(shù)游戲_第1頁
200504061278人機(jī)猜數(shù)游戲_第2頁
200504061278人機(jī)猜數(shù)游戲_第3頁
200504061278人機(jī)猜數(shù)游戲_第4頁
200504061278人機(jī)猜數(shù)游戲_第5頁
已閱讀5頁,還剩12頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、沈 陽 航 空 工 業(yè) 學(xué) 院 課程設(shè)計(jì) 學(xué) 號(hào) 200504061278班 級(jí) 5406108 姓 名 劉波 指導(dǎo)教師 尹航 2007年07 月17 日沈陽航空工業(yè)學(xué)院課程設(shè)計(jì)任務(wù)書機(jī)械與汽車 學(xué)院 機(jī)械設(shè)計(jì)制造及其自動(dòng)化 專業(yè) 5406108 班 學(xué)號(hào)200504061278一、課程設(shè)計(jì)題目:人機(jī)猜數(shù)游戲二、課程設(shè)計(jì)工作自2007年07月09日起至2007年07月16日止三、課程設(shè)計(jì)內(nèi)容:運(yùn)用所學(xué)的C語言知識(shí),編制和調(diào)試程序,具有如下功能:由計(jì)算機(jī)隨機(jī)產(chǎn)生一個(gè)4位整數(shù),請(qǐng)人猜這四位整數(shù)是多少,其過程保存在文件data.dat中。人輸入一個(gè)四位數(shù)后,計(jì)算機(jī)首先判斷其中有幾位猜對(duì)了,并且對(duì)的數(shù)

2、字中有幾位位置也正確,例如格式為:2A1B表示2個(gè)數(shù)字猜對(duì),其中1個(gè)位置也正確,直到猜對(duì)為止。四、課程設(shè)計(jì)要求:程序質(zhì)量:l 貫徹結(jié)構(gòu)化程序設(shè)計(jì)思想。l 用戶界面友好,功能明確,操作方便;可以加以其它功能或修飾。l 用戶界面中的菜單至少應(yīng)包括“開始”、“結(jié)束”2項(xiàng)。l 代碼應(yīng)適當(dāng)縮進(jìn),并給出必要的注釋,以增強(qiáng)程序的可讀性。課程設(shè)計(jì)說明書:課程結(jié)束后,上交課程設(shè)計(jì)說明書(打印稿和電子稿),其內(nèi)容如下:l 封面l 課程設(shè)計(jì)任務(wù)書l 目錄l 需求分析(分析題目的要求)l 程序流程圖(總體流程圖和主要功能模塊流程圖)l 核心技術(shù)的實(shí)現(xiàn)說明及相應(yīng)程序段l 個(gè)人總結(jié)l 參考資料l 源程序及適當(dāng)?shù)淖⑨屩笇?dǎo)教

3、師:_學(xué)生簽名:_沈 陽 航 院 設(shè) 計(jì) 用 紙目錄一、需求分析1二、程序流程圖2三、核心技術(shù)的實(shí)現(xiàn)說明及相應(yīng)程序段6四、個(gè)人總結(jié)8五、參考文獻(xiàn)10六、源程序1013一、需求分析經(jīng)過對(duì)程序設(shè)計(jì)題目的分析可知,程序主要是將計(jì)算機(jī)隨機(jī)給的數(shù)字和人所猜的數(shù)字逐位進(jìn)行比較,并將比較后的結(jié)果以XAXB的形式顯示出來。所以整個(gè)程序的設(shè)計(jì)實(shí)現(xiàn)大致分為三個(gè)模塊,其中每一個(gè)模塊對(duì)應(yīng)一個(gè)函數(shù),他們的功能分別是:菜單函數(shù)(menu),游戲函數(shù)(game)和保存函數(shù)(save)。這幾個(gè)函數(shù)以游戲函數(shù)為核心,菜單及保存函數(shù)可以更好的配合游戲的完成,簡化游戲的操作,凸顯程序的可讀性和界面友好,從而完成題目要求。程序中為了

4、循環(huán)而定義的i,只要在程序結(jié)束后對(duì)其數(shù)值加以顯示,就可以顯示出完成游戲總共猜數(shù)的次數(shù),這是一個(gè)可以添加的小功能。1、菜單函數(shù) 主要實(shí)現(xiàn)游戲以菜單模式的簡易操作,從而使界面更加簡單明了;2、游戲函數(shù) 主要是實(shí)現(xiàn)題目中的人機(jī)猜數(shù)過程,并且以題目要求的形式將其顯示出來;3、保存函數(shù) 主要是按照題目要求將人機(jī)猜數(shù)過程的數(shù)據(jù)進(jìn)行記錄保存。除了以上功能外,程序中使用菜單還有退出功能,可以在每一次游戲開始或結(jié)束時(shí)選擇退出游戲。而保存函數(shù)可以將游戲的過程隨程序的簡單路徑設(shè)定而永久保存在所設(shè)定路徑的data.data文件中。二、程序流程圖1、程序總體結(jié)構(gòu)圖開始調(diào)用菜單函數(shù)menu輸入選項(xiàng)結(jié)束圖1程序總體結(jié)構(gòu)圖2

5、、具體功能框圖(1)菜單函數(shù)menu開始輸出菜單提示輸入選擇d調(diào)用游戲函數(shù)gamed=1&d=2d!=1|d!=2d=1結(jié)束d=2圖2菜單函數(shù)(2)游戲函數(shù)game開始計(jì)算機(jī)產(chǎn)生四位數(shù)c輸入猜的四位數(shù)ga%10=b%10a=c;b=gm&t!= l3j+;m=0;lj-1=tn=tk+;b/=10;a/=10輸出jAkB調(diào)用保存函數(shù)savek=4結(jié)束YYYYNNNN圖3游戲函數(shù)(3)保存函數(shù)save開始(fp=fopen(d:data.data,ab)=NULLreturnY將pf中存放的1個(gè)6字節(jié)的數(shù)據(jù)讀入fp指向的文件關(guān)閉文件結(jié)束N圖4 保存函數(shù)三、核心技術(shù)的實(shí)現(xiàn)說明及相應(yīng)程序段本程序主要

6、由三個(gè)自定義函數(shù)和一個(gè)主函數(shù)組成,其中主函數(shù)以菜單的形式調(diào)用其他函數(shù)來實(shí)現(xiàn)要求的各個(gè)功能。在這些函數(shù)當(dāng)中,游戲函數(shù)是程序中較為核心的部分,下面就對(duì)其進(jìn)行說明。該程序的要求就是由電腦隨機(jī)給一個(gè)四位數(shù),然后由人來猜,電腦對(duì)人猜的數(shù)與給的數(shù)進(jìn)行比較,并將猜對(duì)數(shù)字的個(gè)數(shù)(j)和正確位置(k)以jAkB的形式給人以提示,然后繼續(xù)猜,直到猜對(duì)為止。所以程序的核心就是產(chǎn)生一個(gè)隨機(jī)的四位數(shù),并且將其和人所猜的四位數(shù)進(jìn)行比較,并輸出結(jié)果。這個(gè)過程的實(shí)現(xiàn)主要是靠隨機(jī)給定數(shù)值的函數(shù)random(),和將數(shù)值除10取余進(jìn)行比較來實(shí)現(xiàn)的。具體函數(shù)段如下:int game() /*游戲程序*/ int stime,c,i

7、,g,a,j,k,l4,n,m,b,t,f; /*c:計(jì)算機(jī)隨機(jī)產(chǎn)生的數(shù) g:人猜的數(shù)字 j:數(shù)字正確的位數(shù),k:位置正確的位數(shù)*/ long ltime; ltime=time(NULL); /*l:數(shù)字相同時(shí),人所猜中數(shù)字的正確位置*/ stime=(unsigned int)ltime/2; srand(stime); c=random(9999); /*計(jì)算機(jī)隨機(jī)猜想的數(shù)限制在四位數(shù)*/ printf(I give you a 4 digits number,please guess it!n); printf(n); for(i=1;i+) printf(Now enter the

8、4 digits number that you guess:); scanf(%d,&g); /*輸入猜的數(shù)*/ a=c;j=0;k=0;l0=l1=l2=l3=0; for(n=1;n5;n+) /*n:計(jì)算機(jī)所給原數(shù)中的第n位數(shù),個(gè)位為第一位,千位為第4位*/ b=g;m=1; /*進(jìn)行比較*/ for(t=1;t5;t+) /*t:人所猜的數(shù)的第t位數(shù)*/ if(a%10=b%10) /*若原數(shù)第n位與人猜的第t位相同*/ if(m&t!=l0&t!=l1&t!=l2&t!=l3) /*人所猜數(shù)的位數(shù),從而保證不重復(fù)計(jì)數(shù)*/ j+;m=0;lj-1=t; /*若該位置上的數(shù)字尚未與其它

9、數(shù)字“相同”*/ if(n=t) k+; /*若位置也相同,則位置計(jì)數(shù)k加1*/ b/=10; /*為下次下一位數(shù)取余做準(zhǔn)備*/ a/=10; /*為下次下一位數(shù)取余做準(zhǔn)備*/ printf(%dA%dBn,j,k); /*以XAXB的形式輸出*/ for (f=0;f1;f+) pf.g=g; /*將g的值賦給pf變量中的成員g*/ pf.j=j; /*將j的值賦給pf變量中的成員j*/ pf.k=k; /*將k的值賦給pf變量中的成員k*/ save(); /*調(diào)用保存函數(shù)*/ if(k=4) /*確保猜數(shù)過程完成*/ printf(*YOU WIN*n); printf(nn); bre

10、ak; 四、個(gè)人總結(jié)在這次的課程設(shè)計(jì)中,讓我對(duì)于C語言有了進(jìn)一步的使用和了解,特別是對(duì)于子程序的調(diào)用。在以前的學(xué)習(xí)中,由于時(shí)間的限制,對(duì)于子程序的作用并沒有很好的認(rèn)識(shí)。這次的課設(shè),雖然3次的調(diào)用并不是很多,但是使我深深的認(rèn)識(shí)到了調(diào)用子程序的簡便性,很多本來需要繁瑣嵌套或循環(huán)的地方可以單獨(dú)在子程序中編寫,然后簡單的調(diào)用就可以達(dá)到效果,讓我不需要再大量的重復(fù)編寫,并且程序顯得干凈,有條理。For循環(huán)同樣給我留下了深刻的印象,為了能夠?qū)蓚€(gè)四位數(shù)字的相同數(shù)字及相同位置進(jìn)行比較記錄,程序中通過大量for循環(huán)的運(yùn)用才得其得以以實(shí)現(xiàn)。在人的智能的思想下可以輕松的辦到四位數(shù)的比較,計(jì)算機(jī)在大量的對(duì)比但用時(shí)很

11、短的情況下給出,如此對(duì)于更多位的數(shù)據(jù)進(jìn)行判斷時(shí),for循環(huán)或更好的其他循環(huán)語句則將計(jì)算機(jī)的優(yōu)勢(shì)大大的顯現(xiàn)出來了。對(duì)于這次程序的主要核心游戲函數(shù),我認(rèn)為基本可以較好的按照題目要求運(yùn)行出結(jié)果,但是對(duì)于題目附加的,將程序運(yùn)行過程保存到data.data文件中的要求,可能有點(diǎn)欠缺。由于游戲的輸出除了有數(shù)字外,其輸出形式中還包括了字母的輸出,我的保存是通過結(jié)構(gòu)體的定義將數(shù)據(jù)保存在數(shù)組中,然后通過結(jié)構(gòu)體變量將其保存到data.data文件中。由于對(duì)結(jié)構(gòu)體和數(shù)組知識(shí)的缺乏,所以只能將運(yùn)行過程中的數(shù)字進(jìn)行保存,對(duì)于同時(shí)將字母保存達(dá)到XAXB形式的要求則無力辦到。而且由于保存函數(shù)的模式比較固定,程序中仿照書上編

12、寫的保存函數(shù),在程序校對(duì)下順利通過,由于其保存形式是二進(jìn)制形式,所以無法對(duì)保存的內(nèi)容進(jìn)行核對(duì),從而無法對(duì)保存數(shù)據(jù)的正確性進(jìn)行較好的判斷。五、參考文獻(xiàn)1 譚浩強(qiáng)C程序設(shè)計(jì)北京:清華大學(xué)出版社,20052 劉成等C語言程序設(shè)計(jì)實(shí)驗(yàn)指導(dǎo)與習(xí)題集北京:中國鐵道出版社,20063楊正華趣味程序?qū)W(xué)北京:清華大學(xué)出版社,2002六、源程序#include#include#includestruct num_type int g; int j; int k; p6; int menu();int game(); int save(); main() /*主函數(shù)*/ for(;) switch(menu()

13、case 1:game();break; case 2:exit(0); int menu() /*菜單程序*/ int d; printf(n*List*n); printf(*1.START.n); printf(*2.EXIT.n); printf(*n); do printf(nPlease choose 1 or 2 to begin:); scanf(%d,&d); if(d!=1&d!=2) printf(Erroe,again!n); printf(n); while(d!=1&d!=2); return (d);int game() /*游戲程序*/ int stime,c,

14、i,g,a,j,k,l4,n,m,b,t,f; long ltime; ltime=time(NULL); stime=(unsigned int)ltime/2; srand(stime); c=random(9999); printf(I give you a 4 digits number,please guess it!n); printf(n); for(i=1;i+) printf(Now enter the 4 digits number that you guess:); scanf(%d,&g); a=c;j=0;k=0;l0=l1=l2=l3=0; for(n=1;n5;n+) b=g;m=1; for(t=1;t5;t+) if(a%10=b%10) if(m&t!=l0&t!=l1&t!=l2&t!=l3) j+;m=0;lj-1=t; if(n=t) k+; b/=10; a/=10; printf(%dA%dBn,j,k); for (f=0;f1;f+) pf.g=g; pf.j=j; pf.k=k;

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(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)論