C語(yǔ)言程序課程設(shè)計(jì)_猜數(shù)字游戲_第1頁(yè)
C語(yǔ)言程序課程設(shè)計(jì)_猜數(shù)字游戲_第2頁(yè)
C語(yǔ)言程序課程設(shè)計(jì)_猜數(shù)字游戲_第3頁(yè)
C語(yǔ)言程序課程設(shè)計(jì)_猜數(shù)字游戲_第4頁(yè)
C語(yǔ)言程序課程設(shè)計(jì)_猜數(shù)字游戲_第5頁(yè)
已閱讀5頁(yè),還剩22頁(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、C語(yǔ)言程序設(shè)計(jì)課程設(shè)計(jì)評(píng)語(yǔ):考勤(10)紀(jì)律(10)過(guò)程(40)設(shè)計(jì)報(bào)告(30)答辯(10)總成績(jī)(100)專(zhuān) 業(yè): 自動(dòng)化 班 級(jí): 姓 名: 學(xué) 號(hào): 指導(dǎo)教師: 蘭州交通大學(xué)自動(dòng)化與電氣工程學(xué)院2015年07月21日. .一引言1.1設(shè)計(jì)目的復(fù)習(xí)和鞏固C語(yǔ)言基礎(chǔ)知識(shí),進(jìn)一步加深對(duì)C語(yǔ)言的理解和掌握。提高同學(xué)將課本上的理論知識(shí)和實(shí)際結(jié)合的能力,鍛煉同學(xué)的分析解決實(shí)際問(wèn)題的能力,提高同學(xué)團(tuán)隊(duì)合作的能力。使同學(xué)們善于觀察和思考,善于合作,具備實(shí)踐編程的基礎(chǔ)素質(zhì),和實(shí)際問(wèn)題分析的思考方式。1.2設(shè)計(jì)要求在設(shè)計(jì)時(shí)充分地分析和理解問(wèn)題本身,綜合考慮系統(tǒng)功能,怎樣使系統(tǒng)結(jié)構(gòu)清晰、合理、簡(jiǎn)單和易于調(diào)試。

2、然后詳細(xì)設(shè)計(jì),確定每個(gè)過(guò)程和函數(shù)的簡(jiǎn)單功能,以及過(guò)程(或函數(shù))之間的調(diào)用關(guān)系。最后認(rèn)真完成課程設(shè)計(jì)說(shuō)明書(shū),并對(duì)設(shè)計(jì)方法,結(jié)果等進(jìn)行總結(jié)。充分地分析和理解問(wèn)題本身,弄清要求做什么(What to do?)。在確定解決方案框架過(guò)程中(How to do?),綜合考慮系統(tǒng)功能,考慮怎樣使系統(tǒng)結(jié)構(gòu)清晰、合理、簡(jiǎn)單和易于調(diào)試。最后確定每個(gè)過(guò)程和函數(shù)的簡(jiǎn)單功能,以及過(guò)程(或函數(shù))之間的調(diào)用關(guān)系。確定算法的主要流程,在此基礎(chǔ)上進(jìn)行代碼設(shè)計(jì)(Coding),每個(gè)明確的功能模塊程序一般不超過(guò)60行,否則要進(jìn)一步劃分。上機(jī)前程序靜態(tài)檢查可有效提高調(diào)試效率,減少上機(jī)調(diào)試程序時(shí)的無(wú)謂錯(cuò)誤。靜態(tài)檢查主要有兩種途徑:(1

3、)用一組測(cè)試數(shù)據(jù)手工執(zhí)行程序;(2)通過(guò)閱讀或給別人講解自己的程序而深入全面地理解程序邏輯。二基礎(chǔ)題2.1題目用選擇法對(duì)10個(gè)數(shù)進(jìn)行排序。有一個(gè)已排好序的數(shù)組。現(xiàn)輸入一個(gè)數(shù),要求按原來(lái)的規(guī)律插入到原數(shù)組中。2.2解題思路程序的主要功能是對(duì)數(shù)組元素用排序函數(shù)按從小到大的順序進(jìn)行排序。先定義一個(gè)10個(gè)元素的一維數(shù)組a10,然后從電腦輸入10個(gè)數(shù)(也就是對(duì)數(shù)組賦值),然后使用一次fun()函數(shù),對(duì)這10個(gè)數(shù)進(jìn)行排序;然后再定義一個(gè)11個(gè)元素的一維數(shù)組b11,同時(shí)再?gòu)碾娔X輸入一個(gè)數(shù)同a10一起賦值給b11,然后再使用fun()函數(shù),重新排序的到最后的有順序的一組數(shù)據(jù)。2.3流程圖子函數(shù)流程圖如圖1所示

4、:圖1 基礎(chǔ)題子函數(shù)流程圖主函數(shù)流程圖如圖2所示:圖2 基礎(chǔ)題主函數(shù)流程圖2.4源代碼基礎(chǔ)題源代碼見(jiàn)附錄A。2.5運(yùn)行及測(cè)試結(jié)果運(yùn)行及測(cè)試結(jié)果如圖3所示:圖3 基礎(chǔ)題運(yùn)行及測(cè)試結(jié)果截圖三改錯(cuò)題3.1題目#include int fun()int a33,sum;int i,j;_;for(i=0;i3;i+)for(j=0;j3;j+)scanf(%daij);for(i=0;i3;i+)sum=sum*aii;printf(累乘積=%dn,sum);main()fun();3.2解題思路程序的功能:這是一個(gè)求3*3矩陣主對(duì)角線(xiàn)元素累乘積的程序。程序分析:可以看出源程序中,先聲明了一個(gè)子函數(shù),

5、并定義子函數(shù)fun()累乘積函數(shù)(這個(gè)函數(shù)就是先定義了一個(gè)3*3的二維數(shù)組,然后從鍵盤(pán)輸入數(shù)值對(duì)這個(gè)二維數(shù)組進(jìn)行了數(shù)組賦初值,賦值過(guò)程中使用了for循環(huán)語(yǔ)句,然后利用for循環(huán)語(yǔ)句對(duì)主角線(xiàn)的元素做每個(gè)數(shù)的乘積,最后是輸出這個(gè)累乘積。)。最后就是主函數(shù)main(),主函數(shù)中使用一次子函數(shù)fun()。3.3錯(cuò)誤分析錯(cuò)誤一:原程序中對(duì)sum沒(méi)有設(shè)置初值,應(yīng)設(shè)置為“sum=1;”;錯(cuò)誤二:scanf()函數(shù)中沒(méi)有使用地址運(yùn)算符,應(yīng)在數(shù)組前加“&”錯(cuò)誤三:子函數(shù)也沒(méi)設(shè)返回值,返回值應(yīng)為“return sum;”。3.4改錯(cuò)后的源代碼改錯(cuò)后的源代碼見(jiàn)附錄B。3.6運(yùn)行及測(cè)試結(jié)果運(yùn)行及測(cè)試結(jié)果如圖4所示:圖

6、4 改錯(cuò)題運(yùn)行及測(cè)試結(jié)果截圖四綜合題4.1題目設(shè)計(jì)課題四:猜數(shù)字游戲一問(wèn)題描述該游戲可以由程序隨機(jī)產(chǎn)生或由用戶(hù)輸入四個(gè)0到9之間的數(shù)字,且不重復(fù)。玩游戲者通過(guò)游戲提示輸入八次來(lái)匹配上面所輸入的數(shù)字。A表示位置正確且數(shù)字正確,B表示數(shù)字正確而位置不正確。如果4A0B,表示游戲成功。每次猜錯(cuò)會(huì)有提示,如果八次都未猜對(duì),游戲失敗,顯示正確答案。按任意鍵可以返回主菜單。主要應(yīng)運(yùn)數(shù)組和循環(huán)實(shí)現(xiàn)改功能。(對(duì)該系統(tǒng)有興趣的同學(xué)可以在實(shí)現(xiàn)系統(tǒng)基本功能后,完善系統(tǒng)的其它功能,如:破記錄功能,若你所匹配的次數(shù)小于紀(jì)錄保持者,則為破紀(jì)錄。)二功能要求1.游戲顯示這樣的菜單: (1)隨機(jī)產(chǎn)生數(shù)據(jù) (2)用戶(hù)輸入數(shù)據(jù)

7、(3)退出游戲2.游戲成功與否都能返回主菜單三算法提示1.數(shù)據(jù)結(jié)構(gòu):數(shù)組2.用簡(jiǎn)單的程序設(shè)計(jì)方法四測(cè)試數(shù)據(jù)測(cè)試數(shù)據(jù):3792第一次輸入: 12340A2B 第二次輸入: 5678 0A1B 第三次輸入: 08670A1B 第四次輸入: 9786 1A1B 第五次輸入: 1794 2A0B 第六次輸入: 27932A2B 第七次輸入: 3792 4A0B 游戲成功!五其它對(duì)該系統(tǒng)有興趣的同學(xué)可以在實(shí)現(xiàn)系統(tǒng)基本功能后,完善系統(tǒng)的其它功能,如:破記錄功能,若你所匹配的次數(shù)小于紀(jì)錄保持者,則為破紀(jì)錄。4.2設(shè)計(jì)思路此游戲程序通過(guò)不斷輸入以及逐漸數(shù)位對(duì)應(yīng)的方法,一步一步的縮小猜測(cè)范圍最終猜測(cè)出機(jī)器內(nèi)已經(jīng)

8、存儲(chǔ)的數(shù)字,達(dá)到健腦益智的效果。這種策略非常直接每次都猜可能答案中的一個(gè)。例如:首先猜測(cè) 1234 ,如果得到的反饋是 2A2B 那么可能的答案包括 1256 1257 5326 5236 等等。根據(jù)簡(jiǎn)單策略,下一次就猜 1256 ,因?yàn)?1256 是所有可能答案中最小的數(shù)字。簡(jiǎn)單策略是程序運(yùn)行速度非常快,缺點(diǎn)是所猜測(cè)的次數(shù)較多。利用主函數(shù)調(diào)用子函數(shù)來(lái)實(shí)現(xiàn)模塊化程序設(shè)計(jì)。將游戲的每一個(gè)功能設(shè)計(jì)成一個(gè)子函,數(shù)調(diào)用完成游戲。主要分為兩大模塊:隨機(jī)模式和用戶(hù)模式。猜數(shù)字游戲的主要功能,由系統(tǒng)自動(dòng)產(chǎn)生4個(gè)隨機(jī)排列的整數(shù),或者由用戶(hù)輸入4個(gè)不同的整數(shù),并給用戶(hù)8次機(jī)會(huì)猜測(cè)數(shù)字的數(shù)值和排列順序。如果用戶(hù)在

9、8次之內(nèi)沒(méi)有猜出正確的結(jié)果,則提示用戶(hù)游戲失敗,否則提示用戶(hù)猜數(shù)字成功。該游戲可以由程序隨機(jī)產(chǎn)生或由用戶(hù)輸入四個(gè)0到9之間的數(shù)字,且不重復(fù)。玩游戲者通過(guò)游戲提示輸入八次來(lái)匹配上面所輸入的數(shù)字。A表示位置正確且數(shù)字正確,B表示數(shù)字正確而位置不正確。如果4A0B,表示游戲成功。每次猜錯(cuò)會(huì)有提示,如果八次都未猜對(duì),游戲失敗,顯示正確答案。按任意鍵可以返回主菜單。主要應(yīng)運(yùn)數(shù)組和循環(huán)實(shí)現(xiàn)改功能??梢詫?duì)系統(tǒng)在實(shí)現(xiàn)系統(tǒng)基本功能后,完善系統(tǒng)的其它功能,如:破記錄功能,若你所匹配的次數(shù)小于紀(jì)錄保持者,則為破紀(jì)錄。4.4流程圖主程序流程圖如圖5所示:圖5 主程序流程圖4.5源代碼源代碼見(jiàn)附錄C。4.6運(yùn)行及測(cè)試結(jié)

10、果開(kāi)始界面如圖6所示:圖6 開(kāi)始界面結(jié)果截圖使用說(shuō)明界面如圖7所示:圖7 使用說(shuō)明界面截圖成功進(jìn)行了一次游戲如圖8所示:圖8 完整一次游戲截圖4.7總結(jié)C程序課程設(shè)計(jì)是理論和實(shí)際的結(jié)合,通過(guò)這次程序的設(shè)計(jì),提高了我的c語(yǔ)言水平,比如,查閱資料的重要性,對(duì)程序的整體性把握。而且對(duì)整體的掌控,還有對(duì)局部的取舍,以及對(duì)細(xì)節(jié)的斟酌處理,都使我的能力得到了鍛煉,積累了經(jīng)驗(yàn),但是當(dāng)自己根據(jù)此思路設(shè)計(jì)出程序時(shí),程序的運(yùn)行出現(xiàn)了一些問(wèn)題,這些問(wèn)題出現(xiàn)時(shí),我通過(guò)查閱資料,并且和同學(xué)交流,最終經(jīng)過(guò)幾次的修改,運(yùn)行結(jié)果和期待的相同。通過(guò)這次的課程設(shè)計(jì),我感覺(jué)到自己的C語(yǔ)言知識(shí)很少,這次題目,可以讓我掌握更多的知識(shí),

11、更好的了解c程序的編譯過(guò)程,分析階段,我的分析思路如下,進(jìn)行面向?qū)ο蟮男枨蠓治?,系統(tǒng)設(shè)計(jì),畫(huà)出相應(yīng)需求分析圖,流程圖,有了流程圖,可以讓我更好的理解這個(gè)程序的設(shè)計(jì)方法。我還感覺(jué)到上機(jī)操作的重要性,以前我只是在書(shū)上看,而沒(méi)有過(guò)多的上機(jī)操作,就算一個(gè)程序能寫(xiě)出來(lái),上機(jī)操作的結(jié)果也未必正確,有時(shí)候自己對(duì)一個(gè)程序信心十足,但是如果上機(jī)操作,那么就有很多問(wèn)題,并且遇到錯(cuò)誤不要灰心,要一步一步的改,直到能運(yùn)行出正確的結(jié)果為止,還有就是借助資料的重要性,一道題如果不會(huì)作,我們要借助資料來(lái)對(duì)比和解決,學(xué)習(xí)是一個(gè)不斷完善的過(guò)程,要正視自己的不足之處,遇到不足的之處,要自己完善,比如,我體會(huì)到自己c語(yǔ)言知識(shí)知道的

12、很少,在以后,我要學(xué)習(xí)和完善自己的C語(yǔ)言知識(shí),還有,自己的實(shí)際操作太少,在以后學(xué)習(xí)C程序設(shè)計(jì)的過(guò)程中,要注重實(shí)際操作,而不只是在書(shū)上看看就完了。參考文獻(xiàn)1譚浩強(qiáng)著.C程序設(shè)計(jì)(第四版).北京:清華大學(xué)出版社,20102蔡志明著.指針的藝術(shù).中國(guó)水利水電出版社,20093譚浩強(qiáng)編著.C程序設(shè)計(jì)(第三版).北京:清華大學(xué)出版社,20054譚浩強(qiáng)著.C程序設(shè)計(jì)教程.北京:清華大學(xué)出版社,20075譚浩強(qiáng)著.C語(yǔ)言程序設(shè)計(jì)(第2版).北京:清華大學(xué)出版社,20086譚浩強(qiáng)編著.C程序設(shè)計(jì)題解與上機(jī)指導(dǎo)(第三版).北京:清華大學(xué)出版社,20057譚浩強(qiáng)編著.C+程序設(shè)計(jì).清華大學(xué)出版社,20048譚浩強(qiáng)

13、著.C程序設(shè)計(jì)(第四版)學(xué)習(xí)輔導(dǎo).北京:清華大學(xué)出版社,20109陳明編著.計(jì)算機(jī)導(dǎo)論.北京:清華大學(xué)出版社,200910C編寫(xiě)組編.常用C語(yǔ)言用法速查手冊(cè).北京:龍門(mén)書(shū)局,1995附錄附錄A#include void main() void fun(int a ,int n);int a10,i,k,b11;printf(請(qǐng)輸入十個(gè)數(shù):n);for(i=0;i10;i+) scanf(%d,&ai); fun(a,10); /使用了一次fun()子函數(shù)printf(重新排序:n);for(i=0;i10;i+) printf(%d ,ai); printf(n); printf(請(qǐng)輸入一個(gè)插

14、入的數(shù):n);scanf(%d,&k); for(i=0;i10;i+) bi=ai; b10=k; fun(b,11); /使用了一次fun()子函數(shù)printf(重新排序:n); for(i=0;i11;i+) printf(%d ,bi); printf(n);void fun(int a ,int n) /編寫(xiě)子函數(shù) int i,j,k,temp; for(i=0;in-1;i+) k=i; /k的作用是記錄要交換的位置 for(j=i+1;jn;j+)if(ajak)k=j; /這個(gè)循環(huán)的作用是找出數(shù)組第i個(gè)元素以后最小數(shù)據(jù) if(k!=i) /如果k不等于i,說(shuō)明ai不是數(shù)組第i位

15、到第n位中最小的元素,交換后讓其成為最小的 temp=ak; ak=ai; ai=temp; 附錄B#include int fun()int a33,sum;int i,j;sum=1;for(i=0;i3;i+)for(j=0;j3;j+)scanf(%d,&aij);for(i=0;i3;i+)sum=sum*aii;printf(Sum=%dn,sum);return sum;main()fun();附錄C#include #include#include#define MANY 4 #define TIME_OUT 8/*定義變量及函數(shù)*/int a,b,u; void game()

16、; void ab(int answer,int guess); void same(int num); /*主目錄*/void menu()char choice,ch; dodosystem(cls);printf(tttt簡(jiǎn)單猜數(shù)字nnnn); printf(tttt1.開(kāi)始游戲nn);printf(tttt2.使用說(shuō)明nn);printf(tttt3.退出游戲nn);printf(ttt請(qǐng)輸入(1-3):);fflush(stdin);choice=getchar();while(choice!=1&choice!=2&choice!=3);switch(choice)case1: g

17、ame();break;case2:system(cls);printf(tttt歡迎使用本程序nnn);printf(游戲說(shuō)明:輸入%d位數(shù)字,輸入后會(huì)有提示XAYB,X表示有幾個(gè)數(shù)字與答案數(shù)字相同且位置相同。n ,MANY); printf(Y表示有幾位數(shù)字與答案數(shù)字相同但位置不正確。n); printf(例如:答案數(shù)字是5764,如果輸入5481,則會(huì)提示1A1B。n); printf(祝你愉快!nn); printf(按任意鍵返回主目錄n); getch();break;case3:printf(確定要退出嗎?(y/n):);fflush(stdin);ch=getchar();if(

18、ch=y|ch=Y)exit(0);elsecontinue; while(1); /*游戲部分*/void game() int guessMANY,answerMANY; int times,i,m,j;int key;time_t t; char wantplay,temp; srand(unsigned)time(&t); do/*生成MANY個(gè)隨機(jī)數(shù)*/dou=0; for(i=0;iMANY;i+) guessi=rand()%10; same(guess); while(u); printf(請(qǐng)輸入%d位不相同的數(shù):n,MANY); for(times=1;times=TIME_OUT+1;times+) /*超過(guò)限定數(shù)次*/if(times=(TIME_OUT+1) printf(正確答案是:); for(m=0;mMANY;m+)printf(%d,guessm);printf(n猜了%d次都沒(méi)猜中,TIME_OUT);break;printf(第%d次:,times); /*玩家輸入*/fflush(stdin); for(j=0;jMANY;j+)temp=getchar();answerj=temp-48; /*temp是char型*/ /*檢查輸入有沒(méi)有重復(fù)*/u=0; same(answer); if(u) pr

溫馨提示

  • 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ù)網(wǎng)僅提供信息存儲(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)論