欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

c語言之猜數字游戲

系統 1707 0

很久之前我就先自己編寫猜數字這個小游戲。這里先附上我從百度百科搜到對猜數字的規則。

游戲規則如下:

通常由兩個人玩,一方出數字,一方猜。出數字的人要想好一個沒有重復數字的4位數,不能讓猜的人知道。猜的人就可以開始猜。每猜一個數字,出數者就要根據這個數字給出幾A幾B,其中A前面的數字表示位置正確的數的個數,而B前的數字表示數字正確而位置不對的數的個數。

  如正確答案為 5234,而猜的人猜 5346,則是 1A2B,其中有一個5的位置對了,記為1A,而3和4這兩個數字對了,而位置沒對,因此記為 2B,合起來就是 1A2B。

  接著猜的人再根據出題者的幾A幾B繼續猜,直到猜中(即 4A0B)為止。

百度百科鏈接如下 http://baike.baidu.com/view/358630.htm

規則明白之后,其實我們要做的事情就很明確了。

第一步:我們就是要讓計算機隨機產生一個0-9不重復的4位數

第二步:我們要輸入自己所猜的4個0-9不重復的數字

第三步:判斷我們所猜的數字和計算機隨機的數字是否吻合,如果不為4A0B,返回第二步

思路明確之后,就是嘗試這這些思路轉化為c語言,用c語言的方式表達出來。

現在我們來完成第一步,第一步比較簡單。我們可以使用 rand() 來產生一個隨機數,不過由于這個函數產生的隨機數為一個偽隨機數,所以我們必須在一句 srand(time(NULL)); 具體為什么,百度上有很多,我就不再闡述了。不過讀者可以下載我的程序,試試把這句話去掉有什么不一樣,一試便知。在生產隨機數時,我們還要確保所生成的隨機數,不能用重復數字,具體實現代碼如下。

    void getTheGuessNum()
{
	int i,j;
	int flag = 0;		//是否有數字重復標記位。
	srand(time(NULL));
	for (i = 0;i < 4;)
	{
		guess_num[i] = rand() % 10;	//產生0-9的隨機數
		for (j = 0;j < i;j ++)
		{
			if (guess_num[j] == guess_num[i])	//四個數字有重復,退出內嵌for
			{
				flag = 1;
				break;
			}
			flag = 0;
		}
		if (flag == 0)	//如果沒有重復值,i++,生成下一個隨機數
		{
			i++;
		}
	}
}
【注】guess_num為一個全局數組變量。
  

第一步實現了,我們就要進行我自認為最難得一步了。那就是輸入四個數字。也許有朋友會笑我,不就是輸入 4 個數字而已嗎?使用 scanf 函數不就完事了嗎?被你的那么難,你是唬人的吧!對于那些初學者來說,他們很有可能編寫如下的程序:

    int num1,num2,num3,num4;
scanf("%d%d%d%d",&num1,&num2,&num3,&num3);

  


對于學過數組的朋友來說,他們可能會這樣寫


    int num[4],i;
for(i = 0;i < 4;i ++)
  scanf("%d",&num[i]);
  


你說以上代碼有問題。確實,以上代碼沒有什么問題,不過那是在對于完完全全輸入正確的基礎上而言的。不理解我這句話的意思。那我就寫一個小程序給你們瞧瞧(其實我也是菜鳥,高手看到請不要噴我)

    #include <stdio.h>

void main()
{
	int a;
	printf("請輸入一個數字:");
	scanf("%d",&a);
	printf("a = %d\n",a);
}
  

以上這么一個程序,大家看看有沒有錯誤。其實我可以很負責的告訴大家,這段代碼完全沒有任何錯誤的。如果在輸入一個數字的情況下,完全可以打印出 a 的值。那如果就是有人存心搞怪,輸入一個非數字的情況下會這么樣呢?不要認為這是不可能的事。假如,我輸入 hgj ,那么 a 的值會為多少呢?截圖如下:

至此,大家明白我要表達的意思了沒有?不明白的話,請從頭看。哈哈。。。。如果明白了,則請繼續看下去。

如果大家明白了問題所在,那么這個問題要如何解決了?如果我告訴大家我在輸入4 個數字壓根沒有使用 scanf() 函數,大家會相信嗎?其實我使用的函數為 getchar() 。大家看到這個函數的時候,應該會感到很奇怪,這個函數不是用于輸入一個字符的嗎?怎么可以用來輸入 4 個數字呢?其實我在寫第一個程序的時候確實是使用 scanf() 函數,代碼如下

    int inputTheNum()
{
	int i,j;
	for(i = 0;i < 4;)
	{
	//	printf("請輸入第%d個數字:",i);
		if(scanf("%d",&input_num[i]) == 1)		//輸入正確
		{
			i ++;
		}
		else					//輸入錯誤
		{
			fflush(stdin);		//清除輸入內容
			return 3;
		}
	}
	for(i = 0;i<4;i ++)
	{
		if(input_num[i] < 0 || input_num[i] > 9)
			return 2;
		for(j = 0;j < i; j ++)
		{
			if(input_num[j] == input_num[i])
			{
				return 1;
			}
		}
	}
	return 0;
}
  

scanf() 是有返回值的,具體可以查看百度百科 http://baike.baidu.com/view/1390039.htm ,這里我也不想說太多了。我剛剛開始這樣寫有一個壞處,那就是我輸出 4 個數字的時候必須用空格或者回車或者 tab 鍵分開,只是是太麻煩。因為這幾個數字都是一位數的。有時候我想輸入 1 2 3 4 結果我輸入 1234 之后回車,但是函數 inputTheNum() 就只把 1234 保存在 input_num 的第一個元素里。這時候我又不得不輸入另外 3 個數字。雖然我知道我這是在做無用功,不過我沒辦法。因為我就想改近一下這個函數,最后我使用如下的方法:

    typedef enum
{
	SUCCESS,
	ILLEFAL_CHAR,
	NUMBER_REPEATED,
	NUMBER_BEYOND,
	NUMBER_WITHIN
}return_type;
int inputTheNum()
{
	int temp;
	int count = 0;
	int i,j;
	while(1)
	{
		temp = getchar();
		if (temp == '\n')
		{
			break;
		}
		else if (temp >= '0' && temp <= '9')
		{
			if (count < 4)
			{
				input_num[count] = temp - 0x30;
				count ++;
			}
			else
			{
				while(getchar() != '\n');
				return NUMBER_BEYOND;
			}
		}
		else if(temp == ' ' || temp == '\t')
		{
			continue;
		}
		else 
		{
			while(getchar() != '\n');
			return ILLEFAL_CHAR;
		}
	}
	if (count != 4)
	{
		return NUMBER_WITHIN;
	}
	for(i = 0;i<4;i ++)
	{
		for(j = 0;j < i; j ++)
		{
			if(input_num[j] == input_num[i])
			{
				return NUMBER_REPEATED;
			}
		}
	}
	return SUCCESS;
}
  


如果我輸入的是回車鍵,那么我就結束這次輸入。如果我輸入的空格或者 tab 鍵,我將忽略這次輸入。如果我輸入的字母或者符號,我則返回一個錯誤信息。如果我輸入的是一個字符 '0'-'9', 我就將其轉為為數字 0-9 之后保存在數據里。如果輸入的數字的過多或者過少,我都將返回相應的信息。至此,輸入過程就完成了。

接下來的一步,比較簡單,那就是比較輸入的數字和計算機所給的數字。看看答案是幾 A B

具體算法如下:


    void comparisonTheNum()
{
	int i,j;
	for(i = 0; i < 4; i ++)
	{
		for(j = 0;j < 4; j ++)
		{
			if(input_num[j] == guess_num[i] && i == j)
			{
				A_num ++;
			}
			else	if(input_num[j] == guess_num[i])
			{
				B_num ++;
			}
		}
	}
}
  


這個算法很簡單,不再說明。

整個猜數字的主要三個子函數已經實現,那么主函數,也就清晰明了。這里也不再講述。實在不知道怎么寫的人,可以參考我的資料。 http://download.csdn.net/detail/tianshi_kco/4605873


c語言之猜數字游戲


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 四虎新网站 | 久久亚洲精品玖玖玖玖 | 国产资源在线看 | 国产成人综合在线观看 | 在线视频亚洲 | 久久久精品99 | 成人精品一区二区 | 午夜亚洲国产成人不卡在线 | 国产精品一区久久 | 国产成人久久婷婷精品流白浆 | 日本字幕在线观看 | 久草视频精品 | 色欧美片视频在线观看 | 综合网天天射 | 亚洲黄色网址大全 | 欧美三级 欧美一级 | 国产在线自在拍91精品黑人 | 亚洲欧美国产精品久久久久久久 | 男女啪啪免费观看无遮挡动态图片 | 精品三级视频 | 人人澡人人澡 | 三级国产短视频在线观看 | 久久精品二区亚洲w码 | 美女视频黄a视频免费全过程 | 91视频电影 | 免费小视频 | 99只有精品 | 精品久久| 久在线观看视频 | 欧美成人在线免费 | 99久久精品国产高清一区二区 | 成人毛片网站 | 亚洲网站在线观看 | 999毛片免费观看 | 新97人人模人人爽人人喊 | 色在线免费 | 成人久久18免费软件 | 欧美一区二区 | 欧美一区2区三区4区公司二百 | 日韩和的一区二在线 | 成人精品国产 |