中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C語言的數據結構怎么理解

發布時間:2022-04-15 17:23:43 來源:億速云 閱讀:140 作者:zzz 欄目:開發技術

這篇文章主要介紹了C語言的數據結構怎么理解的相關知識,內容詳細易懂,操作簡單快捷,具有一定借鑒價值,相信大家閱讀完這篇C語言的數據結構怎么理解文章都會有所收獲,下面我們一起來看看吧。

1 猜數字游戲-問題描述

這個游戲一點都不陌生,猜價格是一度很火的綜藝節目。很多老師也用這個案例作為課堂案例。在這里,我想把重點放到“思維層面上”,即:為什么要這樣寫代碼,就實現了猜數字游戲的功能。

我們先來說真人版的猜數字游戲:

A:心里默默出一個數字(約定一個范圍,假設[1-100]之間),開始猜把

B猜:50

A: 大了

B猜:25

A:小了

B猜:150

A:你違規了

B猜:30

A:猜對了!正確答案就是30!是否繼續猜?

B:需要

…

2 問題分析

從前面的真人版,換成人機版:

現實世界程序模擬實現途徑
A電腦 
心里默默出一個數字一個變量的值隨機數/手動在程序里悄悄定義的變量值/其他(總之就是你解決:產生一個數的方法)
B猜B敲鍵盤scanf掃描鍵盤
A說大了、小了、對了計算機判斷并輸出判斷結果if判斷
A和B之間的繼續猜重復事件循環

所謂“天下大事必做于易,天下難事必做于細”,

有了一個對現實問題的一個分析,你還可以把一個問題進行逐層簡化,然后再逐層豐富其功能:

1)猜一次

2)直到猜到為止

3)限定猜的次數,并顯示當前是第幾次猜

4)處理特殊情況:如果你提前猜到了;如果你猜的數超出了范圍

5)猜更多的數

6)對游戲計時、一分鐘猜對得越多還可以設關卡

…

這樣,就會對一個較為綜合的問題,有了一個自己的方案,接下來就可以開始嘗試逐個擊破了。

3 問題解決

3.1 猜一次

用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;
}

3.2 直到猜到為止

接著上面的故事。

還要繼續猜:

1)計算機出的數是否應該變化? &mdash;&mdash;顯然,不能變,變了就作弊了

2)用戶還要繼續猜 &mdash;&mdash; 那么就還要再敲鍵盤、計算機還要繼續獲得這個數(3.1節代碼:Line9-10)

3)計算機還要繼續判斷&mdash;&mdash;還要判斷大小關系(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;
}
}

3.3 限定猜10次

循環結束條件就變為:猜了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;
}

3.4 處理特殊情況

情況1:如果用于猜的范圍超出[1,100],給出提示

顯然,從鍵盤獲得用戶猜的數(3.3節代碼Line13)后,就應判斷:

&mdash;&mdash; a)是否超過了[1,100]的范圍,是,本次不判斷猜的情況,用戶重新猜下一次;

&mdash;&mdash;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;
}

3.5 猜下一個數

分析:

1) 上一個數的猜,已經結束;&mdash;&mdash; 3.4節代碼中的Line29

2) 詢問用戶,是否繼續進行游戲; &mdash;&mdash;輸出一條詢問語句

3) 輸入用戶的意愿; &mdash;&mdash; scanf輸入

4) 如果是,則繼續做游戲;否則游戲結束 &mdash;&mdash;新的循環是否繼續的條件

5) 重新給10次猜的機會 &mdash;&mdash;計數器清0

6) 計算機再重新想一個數; &mdash;&mdash;3.4節代碼中的Line 8-9

7) 繼續猜; &mdash;&mdash;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語言的數據結構怎么理解”知識都有一定的了解,大家如果還想學習更多知識,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

黄龙县| 聂拉木县| 会泽县| 稷山县| 会理县| 长丰县| 和田县| 金溪县| 都昌县| 会宁县| 都匀市| 凤庆县| 中阳县| 保靖县| 哈巴河县| 津市市| 南涧| 曲阳县| 隆回县| 武宣县| 洱源县| 蓬溪县| 临夏县| 陵川县| 望都县| 阳曲县| 河北省| 洛南县| 雅安市| 稻城县| 青州市| 涟水县| 武乡县| 清镇市| 濉溪县| 闽清县| 治多县| 潜山县| 吴忠市| 宿州市| 贵阳市|