真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

【c語(yǔ)言】和【Java】版本的猜數(shù)字小游戲-創(chuàng)新互聯(lián)

目錄

創(chuàng)新互聯(lián)專(zhuān)注于五常企業(yè)網(wǎng)站建設(shè),響應(yīng)式網(wǎng)站設(shè)計(jì),商城網(wǎng)站建設(shè)。五常網(wǎng)站建設(shè)公司,為五常等地區(qū)提供建站服務(wù)。全流程定制設(shè)計(jì),專(zhuān)業(yè)設(shè)計(jì),全程項(xiàng)目跟蹤,創(chuàng)新互聯(lián)專(zhuān)業(yè)和態(tài)度為您提供的服務(wù)

前言

一、c語(yǔ)言版本

1.游戲設(shè)計(jì)思路

2.rand()及srand()函數(shù)的使用

2.取模確定取值范圍

3.條件運(yùn)算符

4.利用二分法進(jìn)行猜測(cè)

二、java版本

1.Math.random()的用法

2.整體代碼展示

總結(jié)


前言

系統(tǒng)隨機(jī)提供一個(gè)某范圍內(nèi)的數(shù)字,讓用戶進(jìn)行逐步地猜測(cè),那么你是否能猜出系統(tǒng)先生心中所想的數(shù)字呢?

今天為大家?guī)?lái)一個(gè)c語(yǔ)言和java版本的猜數(shù)字小游戲,雖然實(shí)現(xiàn)過(guò)程十分簡(jiǎn)單,但也有些小細(xì)節(jié)希望初學(xué)者能夠理解掌握。

(注:1.文中代碼段由作者自己編寫(xiě),若有紕漏或錯(cuò)誤,歡迎大家指正;2.作者本人為初學(xué)者,編程水平有待提高,所寫(xiě)博客皆為本人的筆記和一些簡(jiǎn)單知識(shí)的分享,還望各位路過(guò)的大佬嘴下留情)

一、c語(yǔ)言版本 1.游戲設(shè)計(jì)思路

我們先來(lái)探討一下猜數(shù)字小游戲的整體設(shè)計(jì)思路。

  1. 首先我們需要系統(tǒng)提供一個(gè)[0,100]范圍內(nèi)的隨機(jī)整數(shù)(可自定義范圍),再進(jìn)行逐步猜測(cè)。
  2. 其次對(duì)于我們所輸入的不同數(shù)字,系統(tǒng)根據(jù)判斷作出三種不同的答復(fù):

ⅰ當(dāng)輸入數(shù)字小于系統(tǒng)所給數(shù)字,則輸出“You guessed the number down”,猜測(cè)繼續(xù);

ⅱ當(dāng)輸入數(shù)字大于系統(tǒng)所給數(shù)字,則輸出“You guessed the number up”,猜測(cè)繼續(xù);

ⅲ當(dāng)輸入數(shù)字等于系統(tǒng)所給數(shù)字,則輸出“Congratulations! You guessed it”,猜測(cè)結(jié)束。

2.rand()及srand()函數(shù)的使用

當(dāng)我們理解了整體設(shè)計(jì)思路之后,就可以正式開(kāi)始敲寫(xiě)程序了。

如何讓系統(tǒng)為我們提供一個(gè)0到100的隨機(jī)整數(shù)呢?這時(shí)c語(yǔ)言中的rand()函數(shù)就派上用場(chǎng)了。

rand()函數(shù):系統(tǒng)會(huì)隨機(jī)提供一個(gè)位于 0 ~ RAND_MAX 之間的整數(shù)。C語(yǔ)言標(biāo)準(zhǔn)并沒(méi)有規(guī)定 RAND_MAX 的具體數(shù)值,只是規(guī)定它的值至少為 32767。在實(shí)際編程中,我們也不需要知道?RAND_MAX 的具體值,把它當(dāng)做一個(gè)很大的數(shù)來(lái)對(duì)待即可。

一個(gè)隨機(jī)數(shù)生成的實(shí)例:

#include#include//需調(diào)用rand()函數(shù)
int main()
{
    int a = rand();
    printf("%d\n",a);
    return 0;
}

運(yùn)行結(jié)果實(shí)例:

可是當(dāng)我們多次運(yùn)行這段程序時(shí),就會(huì)產(chǎn)生疑問(wèn)了,為什么我每次生成的隨機(jī)數(shù)都是一個(gè)數(shù)呢?隨機(jī)數(shù)難道不隨機(jī)嗎?

其實(shí)并不然,實(shí)際上,rand() 函數(shù)產(chǎn)生的隨機(jī)數(shù)是偽隨機(jī)數(shù),是根據(jù)一個(gè)數(shù)值按照某個(gè)公式推算出來(lái)的,這個(gè)數(shù)值我們稱之為“種子”。

種子在每次啟動(dòng)計(jì)算機(jī)時(shí)是隨機(jī)的,但是一旦計(jì)算機(jī)啟動(dòng)以后它就不再變化了,也就是說(shuō),每次啟動(dòng)計(jì)算機(jī)以后,種子就是定值了。

那我們到底如何才能真正地生成一個(gè)隨機(jī)數(shù)呢,這時(shí)我們就可以使用標(biāo)題中所提到的srand()函數(shù)來(lái)對(duì)“種子”進(jìn)行重新“播種”。

“播種”原理:srand()函數(shù)需要一個(gè) unsigned int 類(lèi)型的參數(shù),使用頭文件中的 time() 函數(shù)即可得到當(dāng)前的時(shí)間(精確到秒),用時(shí)間作為參數(shù):srand((unsigned)time(NULL))

只要每次播種的時(shí)間不同,那么生成的種子就不同,最終的隨機(jī)數(shù)也就不同、

對(duì)之前的代碼進(jìn)行修改:

#include#include//需調(diào)用srand()函數(shù)
#include//需調(diào)用time()函數(shù)
int main()
{
    int a;
    srand((unsigned)time(NULL));
    a = rand();
    printf("%d\n", a);
    return 0;
}

多次的運(yùn)行結(jié)果實(shí)例:

具體的隨機(jī)教程可見(jiàn)下方鏈接,在此只做部分的知識(shí)分享(作者本人也是通過(guò)此教程進(jìn)行學(xué)習(xí)的)C語(yǔ)言隨機(jī)數(shù)生成教程,C語(yǔ)言rand和srand用法詳解 (biancheng.net)http://c.biancheng.net/view/2043.html

2.取模確定取值范圍

當(dāng)我們掌握了rand()及srand()函數(shù)的用法,接著就可以對(duì)這個(gè)隨機(jī)數(shù)進(jìn)行一個(gè)范圍的圈定,在本文我們采用取模的方法確定隨機(jī)數(shù)在[0,100]之內(nèi)。

確定范圍:

int a = rand()%100;

分析:

取模即取余,而其余數(shù)的范圍即是隨機(jī)數(shù)范圍的子集。

當(dāng)被除數(shù)小于101時(shí),其余數(shù)皆為0;

當(dāng)被除數(shù)無(wú)論多大,其余數(shù)大只能為100,因?yàn)楫?dāng)你余數(shù)大于或等于100時(shí),只能說(shuō)明你沒(méi)有除盡;

這樣我們就得到了隨機(jī)數(shù)的范圍[1,100]。

3.條件運(yùn)算符

當(dāng)我們獲得了[0,100]內(nèi)的一個(gè)隨機(jī)整數(shù),問(wèn)題基本上已經(jīng)解決的差不多了。

下面展示完整代碼:?

#include#include//需要調(diào)用rand()及srand()函數(shù) 
#include//需要調(diào)用time()函數(shù) 

int main()
{
	//每秒進(jìn)行一次播種 
	srand((unsigned)time(NULL));
	//系統(tǒng)隨機(jī)給出一個(gè)整數(shù) 
	int r_number = rand() % 101;	//函數(shù)返回一個(gè)0~RAND_MAX范圍內(nèi)的整數(shù),取模確定取值范圍 
	//用戶循環(huán)輸入整數(shù),進(jìn)行猜測(cè)
	printf("Please guess\n");		//打印提示信息
	int number = -1;
	while (number != r_number)		//用戶猜測(cè)數(shù)字不等于隨機(jī)數(shù)字,滿足條件進(jìn)行循環(huán)
	{
		scanf("%d", &number);
		if (number != r_number)
			printf((number >r_number) ? "You guessed the number up\n" : "You guessed the number down\n");
		else
			printf("Congratulations! You guessed it");
	}
}

下面展示運(yùn)行結(jié)果:?

有的朋友或許會(huì)對(duì)第18行的代碼有些疑惑,這里有一個(gè)小小的知識(shí)點(diǎn),關(guān)于條件運(yùn)算符的使用。

條件運(yùn)算符的使用:

首先我們先來(lái)看一段代碼?

if(a >b)
{
    max = a;
}
else
{
    max = b;
}

我們可以嘗試用條件運(yùn)算符來(lái)優(yōu)化這段代碼

max = (a>b) ? max=a : max=b;

第一段代碼通過(guò)使用條件運(yùn)算符便簡(jiǎn)化成了一串代碼,可見(jiàn)條件運(yùn)算符的便利之處。

什么是條件運(yùn)算符呢?

條件運(yùn)算符是由一組“?”和“:”兩個(gè)符號(hào)組成,判斷“?”前的表達(dá)式的真假,若真,執(zhí)行“:”前的語(yǔ)句;若假,執(zhí)行“:”后的語(yǔ)句。

條件運(yùn)算符的一般形式:

表達(dá)式1 ? 表達(dá)式2 : 表達(dá)式3;

當(dāng)我們掌握了條件運(yùn)算符的使用后,再來(lái)看第18段代碼究竟是什么意思?

printf((number >r_number) ? "You guessed the number up\n" : "You guessed the number down\n");

首先判斷number是否大于r_number,若是,則輸出“You guessed the number up”;若否,則輸出“You guessed the number down”。

這樣一來(lái),對(duì)于條件運(yùn)算符存在疑惑的朋友們是不是能夠理解了呢。

4.利用二分法進(jìn)行猜測(cè)

為什么說(shuō)方法正確的話,100以內(nèi)的數(shù)最多猜7次就夠了呢?

這里再為大家分享一個(gè)猜測(cè)100以內(nèi)的數(shù)的方法,叫做二分法。

二分法查找:

數(shù)據(jù)是按升序排序的,對(duì)于給定值1,從序列的中間位置50開(kāi)始比較,

如果當(dāng)前位置等于key,則查找成功;

若key小于當(dāng)前位置值arr[k],則在數(shù)列的前半段中查找,arr[low,mid-1];

若key大于當(dāng)前位置值arr[k],則在數(shù)列的后半段中繼續(xù)查找arr[mid+1,high],

直到找到為止

我們來(lái)分析100以內(nèi)猜數(shù)字的最壞情況復(fù)雜度:假設(shè)系統(tǒng)給出的隨機(jī)數(shù)為1,見(jiàn)下圖:

對(duì)于給定值1,從序列的中間位置50開(kāi)始比較,1小于當(dāng)前位置值50,則在數(shù)列的前半段中查找,如此反復(fù),在經(jīng)過(guò)7次的猜測(cè)后,我們終于猜到了系統(tǒng)所給的值。

所以說(shuō)100以內(nèi)的數(shù)最多猜7次就夠了。

二、java版本 1.Math.random()的用法

java版本的猜數(shù)字小游戲與c語(yǔ)言版本的整體設(shè)計(jì)思路相同,但值得注意的是,在java版本中使系統(tǒng)提供隨機(jī)數(shù)的方法與c語(yǔ)言版本不同,這里提供其中一種方法,運(yùn)用Math.random()語(yǔ)句。

Math.random()語(yǔ)句:

是一個(gè)隨機(jī)函數(shù)。利用該函數(shù)可以取得0到1之間的隨機(jī)小數(shù),如果想得到一個(gè)大于1的隨機(jī)值,則需要再乘以一定的數(shù)值來(lái)實(shí)現(xiàn)。

而這里我們需要得到一個(gè)[1,100]的隨機(jī)整數(shù),

首先我們將Math.random()乘以100再加一,此時(shí)其范圍為[0,101)的浮點(diǎn)數(shù);

其次再將Math.random()強(qiáng)制轉(zhuǎn)換為整形,如下:

int r_number = ((int)(Math.random()*100+1));
2.整體代碼展示

如此,我們便得到了系統(tǒng)提供的一個(gè)隨機(jī)數(shù),下面展示整體代碼:

package text;

import java.util.Scanner;

public class Text {   

	public static void main(String[] args) {

		//系統(tǒng)隨機(jī)給出一個(gè)整數(shù) 
		Scanner in = new Scanner(System.in);
		int r_number = ((int)(Math.random()*100+1));	
		//用戶循環(huán)輸入整數(shù),進(jìn)行猜測(cè)
		System.out.println("Please guess");	//打印提示信息
		int number = 0;
		while (number != r_number)		    //用戶猜測(cè)數(shù)字不等于隨機(jī)數(shù)字,滿足條件進(jìn)行循環(huán)
		{
			number = in.nextInt();
			if (number != r_number)
				System.out.print((number >r_number) ? "You guessed the number up\n" : "You guessed the number down\n");
			else
				System.out.print("Congratulations! You guessed it");
		}	
	}
}

運(yùn)行結(jié)果展示:?

總結(jié)

以上便是對(duì)于c語(yǔ)言和java版本的猜數(shù)字小游戲的代碼設(shè)計(jì)分享,雖說(shuō)其過(guò)程十分簡(jiǎn)單,但還是希望能夠幫到大家?。如若文章存在紕漏或錯(cuò)誤,歡迎大家指正,謝謝!

你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購(gòu),新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧


網(wǎng)頁(yè)名稱:【c語(yǔ)言】和【Java】版本的猜數(shù)字小游戲-創(chuàng)新互聯(lián)
新聞來(lái)源:http://weahome.cn/article/jiooo.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部