您好,登錄后才能下訂單哦!
這篇文章主要介紹了C語言的數據結構怎么理解的相關知識,內容詳細易懂,操作簡單快捷,具有一定借鑒價值,相信大家閱讀完這篇C語言的數據結構怎么理解文章都會有所收獲,下面我們一起來看看吧。
這個游戲一點都不陌生,猜價格是一度很火的綜藝節目。很多老師也用這個案例作為課堂案例。在這里,我想把重點放到“思維層面上”,即:為什么要這樣寫代碼,就實現了猜數字游戲的功能。
我們先來說真人版的猜數字游戲:
A:心里默默出一個數字(約定一個范圍,假設[1-100]之間),開始猜把
B猜:50
A: 大了
B猜:25
A:小了
B猜:150
A:你違規了
B猜:30
A:猜對了!正確答案就是30!是否繼續猜?
B:需要
…
從前面的真人版,換成人機版:
現實世界 | 程序模擬 | 實現途徑 |
---|---|---|
A | 電腦 | |
心里默默出一個數字 | 一個變量的值 | 隨機數/手動在程序里悄悄定義的變量值/其他(總之就是你解決:產生一個數的方法) |
B猜 | B敲鍵盤 | scanf掃描鍵盤 |
A說大了、小了、對了 | 計算機判斷并輸出判斷結果 | if判斷 |
A和B之間的繼續猜 | 重復事件 | 循環 |
所謂“天下大事必做于易,天下難事必做于細”,
有了一個對現實問題的一個分析,你還可以把一個問題進行逐層簡化,然后再逐層豐富其功能:
1)猜一次
2)直到猜到為止
3)限定猜的次數,并顯示當前是第幾次猜
4)處理特殊情況:如果你提前猜到了;如果你猜的數超出了范圍
5)猜更多的數
6)對游戲計時、一分鐘猜對得越多還可以設關卡
…
這樣,就會對一個較為綜合的問題,有了一個自己的方案,接下來就可以開始嘗試逐個擊破了。
用IPO的思維,繼續分析這種情況,其故事流程是不是這樣的:
// I:輸入
1)計算機:出一個數
2)用戶: 鍵盤輸一個數(猜)
3)計算機:獲得這個數
//處理并輸出
4)計算機:判斷這個數和自己出的數的大小關系
5)計算機:根據不同的關系,告訴你猜大了、小了、對了
6)計算機:告訴你正確答案
根據輸入與輸出,確定要定義的變量:計算機出的數、用于猜的數
程序員要做的:就是把上面的故事流程,用一種編程語言描述出來。
而故事的流程就是:算法;
編程語言描述出來的就是:程序
那么,我們就可以得到以下程序了:
#include <stdio.h> #include <stdlib.h> #include <time.h> int main() { int guess,magic; //magic計算機想的數 srand(time(NULL)); //用時間做種子,產生一個隨機數 magic = rand()%100+1; //隨機數落到1-100之間 printf("guess a number:\n"); //用戶猜一個數 scanf("%d",&guess); if(guess>magic) //計算機判斷,并告訴你猜的情況 printf("too big!\n"); else if(guess<magic) printf("too small!\n"); else printf("right!\n"); printf("the right number is %d\n",magic); return 0; }
接著上面的故事。
還要繼續猜:
1)計算機出的數是否應該變化? ——顯然,不能變,變了就作弊了
2)用戶還要繼續猜 —— 那么就還要再敲鍵盤、計算機還要繼續獲得這個數(3.1節代碼:Line9-10)
3)計算機還要繼續判斷——還要判斷大小關系(3.1節代碼:Line11-16)
因此,3.1節代碼Line9-16就應該反復做,循環體就確定了;
直到猜到為止: 循環條件則是magic!=guess
#include <stdio.h> #include <stdlib.h> #include <time.h> int main() { int guess,magic; srand(time(NULL)); magic = rand()%100+1; do{ ///用戶和計算機判斷是循環體 printf("guess a number:\n"); scanf("%d",&guess); if(guess>magic) printf("too big!\n"); else if(guess<magic) printf("too small!\n"); else printf("right!\n"); }while(guess!=magic); //循環條件 printf("the right number is %d\n",magic); return 0; } }
循環結束條件就變為:猜了10次結束
那么就需要一個計數器,每猜一次,計數器+1, 到10次,循環結束;
#include <stdio.h> #include <stdlib.h> #include <time.h> int main() { int guess,magic; int count=0; //計數器,一次都還沒有猜,初始為0 srand(time(NULL)); magic = rand()%100+1; do{ count++; //猜1次,計數器加1 printf("the %dth: guess a number:\n",count); //顯示第幾次猜 scanf("%d",&guess); if(guess>magic) printf("too big!\n"); else if(guess<magic) printf("too small!\n"); else printf("right!\n"); }while(count<=10); //判斷猜到10次了沒有 printf("the right number is %d\n",magic); return 0; }
情況1:如果用于猜的范圍超出[1,100],給出提示
顯然,從鍵盤獲得用戶猜的數(3.3節代碼Line13)后,就應判斷:
—— a)是否超過了[1,100]的范圍,是,本次不判斷猜的情況,用戶重新猜下一次;
——b)否,則判斷用戶猜的情況。
情況2:如果不到10次就猜到了,提前結束循環;
這就是代碼輸出“right!”的情況(3.3節代碼Line19),同時加上結束循環的語句break就ok。
#include <stdio.h> #include <stdlib.h> #include <time.h> int main() { int guess,magic; int count=0; srand(time(NULL)); magic = rand()%100+1; do{ count++; printf("the %dth: guess a number:\n",count); scanf("%d",&guess); if(guess>100 ||guess<1) //處理情況1 { printf("You guess the number should be in the range [1,100]:\n"); continue; //跳過本次循環 } if(guess>magic) printf("too big!\n"); else if(guess<magic) printf("too small!\n"); else { printf("right!\n"); break; //處理情況2 } }while(count<=10); printf("the right number is %d\n",magic); return 0; }
分析:
1) 上一個數的猜,已經結束;—— 3.4節代碼中的Line29
2) 詢問用戶,是否繼續進行游戲; ——輸出一條詢問語句
3) 輸入用戶的意愿; —— scanf輸入
4) 如果是,則繼續做游戲;否則游戲結束 ——新的循環是否繼續的條件
5) 重新給10次猜的機會 ——計數器清0
6) 計算機再重新想一個數; ——3.4節代碼中的Line 8-9
7) 繼續猜; ——3.4節代碼中的Line 10-29
于是3.4節代碼的Line8-29是需要繼續作為新的循環的循環體。
#include <stdio.h> #include <stdlib.h> #include <time.h> int main() { int guess,magic; int count; int reply=0; //用戶是否繼續游戲 do{ count=0; //每猜一個新的數,計數器清0 srand(time(NULL)); //重新產生一個新的數來猜 magic = rand()%100+1; do{ count++; //猜1次,計數器加1 printf("the %dth: guess a number:\n",count); scanf("%d",&guess); if(guess>100 ||guess<1) { printf("You guess the number should be in the range [1,100]:\n"); continue; } if(guess>magic) printf("too big!\n"); else if(guess<magic) printf("too small!\n"); else { printf("right!\n"); break; } }while(count<=10); printf("the right number is %d\n",magic); printf("Is the game continue? 1(yes) or 0(no):\n"); //詢問是否繼續游戲 scanf("%d",&reply); //獲得用戶的意愿 }while(reply==1); //如果意愿是1,則繼續游戲;否則,整個程序結束 return 0; }
關于“C語言的數據結構怎么理解”這篇文章的內容就介紹到這里,感謝各位的閱讀!相信大家對“C語言的數據結構怎么理解”知識都有一定的了解,大家如果還想學習更多知識,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。