C語言程序課程設(shè)計_猜數(shù)字游戲_第1頁
C語言程序課程設(shè)計_猜數(shù)字游戲_第2頁
C語言程序課程設(shè)計_猜數(shù)字游戲_第3頁
C語言程序課程設(shè)計_猜數(shù)字游戲_第4頁
C語言程序課程設(shè)計_猜數(shù)字游戲_第5頁
已閱讀5頁,還剩22頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

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

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

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

4、:圖1 基礎(chǔ)題子函數(shù)流程圖主函數(shù)流程圖如圖2所示:圖2 基礎(chǔ)題主函數(shù)流程圖2.4源代碼基礎(chǔ)題源代碼見附錄A。2.5運行及測試結(jié)果運行及測試結(jié)果如圖3所示:圖3 基礎(chǔ)題運行及測試結(jié)果截圖三改錯題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解題思路程序的功能:這是一個求3*3矩陣主對角線元素累乘積的程序。程序分析:可以看出源程序中,先聲明了一個子函數(shù),

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

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

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

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

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

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

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

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

13、著.C程序設(shè)計(第四版)學(xué)習(xí)輔導(dǎo).北京:清華大學(xué)出版社,20109陳明編著.計算機導(dǎo)論.北京:清華大學(xué)出版社,200910C編寫組編.常用C語言用法速查手冊.北京:龍門書局,1995附錄附錄A#include void main() void fun(int a ,int n);int a10,i,k,b11;printf(請輸入十個數(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(請輸入一個插

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) /編寫子函數(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; /這個循環(huán)的作用是找出數(shù)組第i個元素以后最小數(shù)據(jù) if(k!=i) /如果k不等于i,說明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簡單猜數(shù)字nnnn); printf(tttt1.開始游戲nn);printf(tttt2.使用說明nn);printf(tttt3.退出游戲nn);printf(ttt請輸入(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(游戲說明:輸入%d位數(shù)字,輸入后會有提示XAYB,X表示有幾個數(shù)字與答案數(shù)字相同且位置相同。n ,MANY); printf(Y表示有幾位數(shù)字與答案數(shù)字相同但位置不正確。n); printf(例如:答案數(shù)字是5764,如果輸入5481,則會提示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個隨機數(shù)*/dou=0; for(i=0;iMANY;i+) guessi=rand()%10; same(guess); while(u); printf(請輸入%d位不相同的數(shù):n,MANY); for(times=1;times=TIME_OUT+1;times+) /*超過限定數(shù)次*/if(times=(TIME_OUT+1) printf(正確答案是:); for(m=0;mMANY;m+)printf(%d,guessm);printf(n猜了%d次都沒猜中,TIME_OUT);break;printf(第%d次:,times); /*玩家輸入*/fflush(stdin); for(j=0;jMANY;j+)temp=getchar();answerj=temp-48; /*temp是char型*/ /*檢查輸入有沒有重復(fù)*/u=0; same(answer); if(u) pr

溫馨提示

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

評論

0/150

提交評論