當前位置:ag真人国际官网-ag旗舰厅官方网站 » 編程軟體 » 真隨機編程

真隨機編程-ag真人国际官网

發布時間: 2024-01-19 18:06:30

⑴ c語言編程:編寫一個猜數的游戲,系統自動產生一個隨機數,你來猜,程序給出提示,直到猜對為止。

import java.util.*;

class assignment8{

public static void main(string[]args){

scanner sc=new scanner(system.in);

int x=(int)(math.random()*100);//生成一個0~100的隨機數

int y=-1;

system.out.println("已生成0~100的隨機整數,請輸入您所猜的數:");

while(x!=y)

{

y=sc.nextint();

if(y>x)

{

system.out.println("輸入的數過大");

}

else if(y<x)

{

system.out.println("輸入的數過小");

}

}

system.out.println("正確!該隨機數是" x);

sc.close();

}

}

(1)真隨機編程擴展閱讀:

while循環的格式:while(表達式){語句;}

while循環的執行順序:當表達式為真,則執行下面的語句,語句執行完之後再判斷表達式是否為真,如果為真,再次執行下面的語句,然後再判斷表達式是否為真??就這樣一直循環下去,直到表達式為假,跳出循環。

例:

int a=null;

while(a<10){

a ;//自加

if(a>5)//不等while退出循環,直接判斷循環

{break;//跳出循環}

}

結果:結束後a的值為6。

⑵ c語言編程中生成隨機數的初級教程

幾個概念

隨機數:數學上產生的都是偽隨機數,真正的隨機數使用物理方法產生的。

隨機數種子:隨機數的產生是由算術規則產生的,srand(seed)的隨機數種子不同,rand()的隨機數值就不同,倘若每次的隨機數種子一樣,則rand()的值就一樣。所以要產生隨機數,則srand(seed)的隨機數種子必須也要隨機的。

用srand()產生隨機數種子

原型:void srand ( unsigned int seed );

作用是設置好隨機數種子,為了讓隨機數種子是隨機的,通常用time(null)的值來當seed。

time()用於隨機數種子

函數原型:time_t time ( time_t * timer );

time()函數表示返回1970-1-1 00:00:00 到當前時間的秒數。

用的時候這樣:srand(unsigned(time(null)));例如產生1~10之間的隨機整數

#include#includeint main(){ srand(time(null)); for(int i=0;i < 10;i ) { int randvalue=rand(); }}

上面的程序中要注意srand是在for循環外面的,如果把srand放到for循環裡面,則每次產生的隨機數都相同。

用rand()產生隨機數

原型:int rand ( void );

作用是產生一個隨機數,當然隨機數是有范圍的,為0~rand_max之間,隨機數與隨機數種子有關。具體來說是,在產生隨機數 rand()被調用的時候,它會這樣執行:

如果用戶之前調用過 srand(seed)的話,他會重新調用一遍 srand(seed)以產生隨機數種子;

如果發現沒有調用過 srand(seed)的話,會自動調用 srand(1)一次。

如果調用srand(seed)產生的隨機數種子是一樣的.話(即seed的值相同),rand()產生的隨機數也相同。

所以,如果希望rand()每次調用產生的值都不一樣,就需要每次調用srand(seed)一次,而且seed不能相同。這里就是經常採用time(null)產生隨機數種子的原因。

c語言中可以使用rand()函數來生成一個從0到rand_max的uniform分布。基於這個函數,我們可以構造出一些特定的隨機數生成器來滿足我們的需求。

(一)0到1的uniform分布:

//generate a random number in the range of [0,1]double uniform_zero_to_one(){ return (double)rand()/rand_max;}

(二)任意實數區間的uniform分布:

//generate a random real number in [start,end]double uniform_real(double start,double end){ double rate=(double)rand()/rand_max; return start (end-start)*rate;}

(三)任意整數區間的uniform分布:

//generate a random integer number in [start,end)int uniform_integer(int start,int end){ int base=rand(); if(base==rand_max) return uniform_integer(start,end); int range=end-start; int remainder=rand_max%range; int bucket=rand_max/range; if(base

這個函數要特別說明一下,平常時候我們都是用rand()%n來生成0到n-1的隨機數,但是按這種方法生成的分布並不是uniform的,另外由於rand_max只有32767,因此要生成比這個數更大的隨機數需要另外想辦法,理論上可以直接用0到1的uniform分布直接放縮,但實際效果不好。這里給出一種移位方式的實現。

(四)32bits的隨機數

//generate a random 32 bits integer number int rand32(){ return ((rand()<<16) (rand()<<1) rand()%2);}

有了32bits的隨機數生成方法,就可以構造32bits范圍內的隨機整數區間了,方法和之前16bits的情況一樣。

(五)32bits范圍內的隨機整數區間

//generate a random 32bits integer number in [start,end) int uniform_integer_32(int start,int end){ int base=rand32(); if(base==rand32_max) return uniform_integer_32(start,end); int range=end-start; int remainder=rand32_max%range; int bucket=rand32_max/range; if(base

這里rand32_max定義為0x7fffffff。

除此之外,利用rand()函數構造任意分布的隨機數也是個值得探討的問題。

理論上可以通過(0,1)的uniform分布,加上標准采樣方法(sampling)獲得。

⑶ c語言怎樣產生一定范圍的隨機數

在c語言中,rand()函數可以用來產生隨機數,但是這不是真真意義上的隨機數,是一個偽隨機數,是根據一個數,可以稱它為種子。

為基準以某個遞推公式推算出來的一系數,當這系列數很大的時候,就符合正態公布,從而相當於產生了隨機數。

c語言產生一定范圍的隨機數的源代碼如下:

#include

#include

int main()

{

int i;

for(i=0; i<10; i ) //隨機產生10個數。

{

printf("%d ", rand());

}

return 0;

}

(3)真隨機編程擴展閱讀

1、如果要隨機生成一個在一定范圍的數,你可以在宏定義中定義一個random(int number)函數,然後在main()裡面直接調用random()函數。

2、在對rand()的前三次調用中,並且此後得到的返回值仍然是在對rand()的第一批調用中所得到的其餘的返回值。因此,只有再次給srand()提供一個隨機的「種子」值,才能再次得到一個隨機數。

熱點內容
愛奇藝正義聯盟為啥不能緩存 發布:2024-01-20 00:52:13 瀏覽:248
caccess查詢資料庫 發布:2024-01-20 00:43:10 瀏覽:769
xp文件夾圖標更改 發布:2024-01-20 00:43:03 瀏覽:19
python和node 發布:2024-01-20 00:37:12 瀏覽:194
android拖拉 發布:2024-01-20 00:00:49 瀏覽:583
少兒編程課程體系介紹 發布:2024-01-20 00:00:48 瀏覽:846
我說你做下載ftp 發布:2024-01-20 00:00:47 瀏覽:8
安卓驅動培訓哪裡好 發布:2024-01-19 23:55:41 瀏覽:987
python轉為字元串 發布:2024-01-19 23:51:39 瀏覽:272
合同文件夾 發布:2024-01-19 23:50:52 瀏覽:740
网站地图