1樓:匿名使用者
之前我也在學這個隨機數,這是我搜到的一些,不知對你有沒有幫助
工作原理如下
1) 首先給srand()提供乙個種子,它是乙個unsigned int型別,其取值範圍從0~65535;
2) 然後呼叫rand(),它會根據提供給srand()的種子值返回乙個隨機數(在0到32767之間)
3) 根據需要多次呼叫rand(),從而不間斷地得到新的隨機數;
4) 無論什麼時候,都可以給srand()提供乙個新的種子,從而進一步「隨機化」rand()的輸出結果。
因為srand()函式是乙個隨機數產生函式,其意思就是指c語言裡的隨機數都是由它來控制產生的!!!如果在應用srand()函式之前就用隨機函式rand(),則相當於使用了srand(1);
而將srand( (unsigned)time( null ) );這條語句放在了for迴圈裡,即是用了srand( (unsigned)time(0 ));故此句語句不變的話,產生的隨機數就不變!!
c語言隨機函式總結) rand()函式:
原型: int rand(void)
功能: 產生從0到rand_max(0x7fff)之間的隨機數。
標頭檔案: stdlib.h
例:#include
#include
int main()
(2)srand()函式:
原型: void srand(unsigned seed)
功能: 產生隨機數的起始發生資料,和rand函式配合使用
標頭檔案: stdlib.h time.h
例:#include
#include
#include
int main(void)
這時執行程式,會發現每次產生的隨機數都不一樣。這是因為這裡採用了時間作為種子,而時間在每時每刻都不相同,所以就產生了"隨機"的隨機數了。所以,要想產生不同的隨機數,在使用rand之前需要先呼叫srand。
2樓:匿名使用者
想產生有效隨機數 很考數學 啊
本人建議你研究下 :
指數偏離、高斯偏離、伽馬分布、泊松偏離、二項偏離、蒙特卡羅積分、拉丁超立方、遞迴分層取樣、混合策略
夠學一本書的了
數學啊數學
c語言怎樣產生一定範圍的隨機數?
3樓:hk_孤獨的心
編譯環境為:vs2013
產生1到3的整型隨機數的**如下:
#include
#include
#include
#define max 3 //這個函式的意義為:隨機生成最大的數為3
#define min 1 //這個函式的意義為:隨機生成最小的數為1
int main()
4樓:愛夏的你呀
在c語言中,rand()函式可以用來產生隨機數,但是這不是真真意義上的隨機數,
是乙個偽隨機數,是根據乙個數,可以稱它為種子。
為基準以某個遞推公式推算出來的一係數,當這系列數很大的時候,就符合正態公布,從而相當於產生了隨機數。
c語言產生一定範圍的隨機數的源**如下:
#include
#include
int main()
return 0;
}擴充套件資料
1、如果要隨機生成乙個在一定範圍的數,你可以在巨集定義中定義乙個random(int number)函式,然後在main()裡面直接呼叫random()函式。
2、在對rand()的前三次呼叫中,並且此後得到的返回值仍然是在對rand()的第一批呼叫中所得到的其餘的返回值。因此,只有再次給srand()提供乙個隨機的「種子」值,才能再次得到乙個隨機數。
5樓:匿名使用者
c語言的獲取隨
機數的函式為rand(), 可以獲得乙個非負整數的隨機數。要呼叫rand需要引用標頭檔案stdlib.h。
要讓隨機數限定在乙個範圍,可以採用模除加加法的方式。
要產生隨機數r, 其範圍為 m<=r<=n,可以使用如下公式:
rand()%(n-m+1)+m
其原理為,對於任意數,
0<=rand()%(n-m+1)<=n-m於是0+m<=rand()%(n-m+1)+m<=n-m+m即m<=rand()%(n-m+1)+m<=n
6樓:哇哎西西
利用srand((unsigned int)(time(null))是一種方法,因為每一次執行程式的時間是不同的。
在c語言裡所提供的隨機數發生器的用法:現在的c編譯器都提供了乙個基於ansi標準的偽隨機數發生器函式,用來生成隨機數。它們就是rand()和srand()函式。
這二個函式的工作過程如下:
1) 首先給srand()提供乙個種子,它是乙個unsigned int型別,其取值範圍從0~65535;
2) 然後呼叫rand(),它會根據提供給srand()的種子值返回乙個隨機數(在0到32767之間)
3) 根據需要多次呼叫rand(),從而不間斷地得到新的隨機數;
4) 無論什麼時候,都可以給srand()提供乙個新的種子,從而進一步「隨機化」rand()的輸出結果。
下面是0~32767之間的隨機數程式:
#include
#include
#include // 使用當前時鐘做種子
void main(void)
根據上面的程式可以很容易得到0~1之間的隨機數:
#include
#include
#include
int main( )
而產生1~100之間的隨機數可以這樣寫:
#include
#include
#include
int main( )
7樓:溫柔_儂渲芷
srand((int)time(null));設定隨機數種子
rand()%100;產生0-99的隨機數。高階點的,假如要產生16-59之間的數,你可以這樣寫:rand()%44+16(這裡44由59-16+1得到)。其他情況如法炮製!
下面是搜回來的:
問題1: 怎樣獲得乙個真正的隨機數?要知道,rand()是不能產生真正的隨機數的!即使不能產生真正的隨機數,也要大概接近呀!而rand()好象每次的隨機都一樣。
專家解答:
之所以rand()每次的隨機數都一樣是因為rand()函式使用不正確。各種程式語言返回的隨機數(確切地說是偽隨機數)實際上都是根據遞推公式計算的一組數值,當序列足夠長,這組數值近似滿足均勻分布。如果計算偽隨機序列的初始數值(稱為種子)相同,則計算出來的偽隨機序列就是完全相同的。
這個特性被有的軟體利用於加密和解密。加密時,可以用某個種子數生成乙個偽隨機序列並對資料進行處理;解密時,再利用種子數生成乙個偽隨機序列並對加密資料進行還原。這樣,對於不知道種子數的人要想解密就需要多費些事了。
當然,這種完全相同的序列對於你來說是非常糟糕的。要解決這個問題,需要在每次產生隨機序列前,先指定不同的種子,這樣計算出來的隨機序列就不會完全相同了。你可以在呼叫rand()函式之前呼叫srand( (unsigned)time( null ) ),這樣以time函式值(即當前時間)作為種子數,因為兩次呼叫rand函式的時間通常是不同的,這樣就可以保證隨機性了。
你也可以使用srand函式來人為指定種子數。windows 9x/nt的遊戲freecell就允許使用者指定種子數,這樣使用者如果一次遊戲沒有成功,下次還可以以同樣的發牌結果再玩一次。
問題2: 我按照上述方法並不能產生隨機數,僅產生公差為3或4的等差數列:
請採納答案,支援我一下。
8樓:a羅網天下
srand((int)time(null));設定隨機數種子
例子如下:
直接編譯,程式執行結果如下圖所示:
9樓:匿名使用者
#include
#include
#include
int main(void)
10樓:匿名使用者
要生成[a,b]範圍內隨機數:rand()%(b-a+1)+a30~120之間:rand()%(120-30+1)+30即rand()%91+30
rand()%91會生成0~90之間隨機整數rand()%91+30會生成30~120之間整數
11樓:ll我在這等你
一、第一種:
(1)#include
(2)#include
(3)#include
(4)int main(void)
(5)二、第二種:
(1)語言的獲取隨機數的函式為rand(), 可以獲得乙個非負整數的隨機數。要呼叫rand需要引用標頭檔案stdlib.h。
(2)要讓隨機數限定在乙個範圍,可以採用模除加加法的方式。
要產生隨機數r, 其範圍為 m<=r<=n,可以使用如下公式:
rand()%(n-m+1)+m
(3)其原理為,對於任意數,
0<=rand()%(n-m+1)<=n-m於是0+m<=rand()%(n-m+1)+m<=n-m+m即m<=rand()%(n-m+1)+m<=n
12樓:慢冰片
也要大概接近呀,因為兩次呼叫rand函式的時間通常是不同的,則計算出來的偽隨機序列就是完全相同的。各種程式語言返回的隨機數(確切地說是偽隨機數)實際上都是根據遞推公式計算的一組數值;
for(int i=0;100000;i++)參考資料.h>time,而由於計算機執行很快;i
問題1;設定隨機數種子
rand()%100,需要在每次產生隨機序列前。
13樓:匿名使用者
前幾位把常規方法都說了,我補充一種更前衛的方法。用boost的random庫,專業隨機數生成器
14樓:匿名使用者
1.此方法並不保證 每個數字是等可能的
//在程式中初始化隨機種子 乙個程式只需一次srand((unsigned int)time(null));
//再用rand()返回的值%範圍的大小
//rand()%(b-a);
//比如要求100~10000之間的隨機數rand()%(10000-100)+100;
2.//注意1的方法不能求範圍超過65535的隨機數//在程式中初始化隨機種子
srand((unsigned int)time(null));
//rand()/(65536.0)*(b-a)+a;
//比如要求10~100000000之間的隨機數rand()/(65535.0)*(100000000-10)+10;
c產生隨機數的問題
通常隨機數使用都是帶兩個引數的 例 ro.next 1,5 1為下限 包括 5為上限 不包括 結果為產生1 4的隨機數 所以你那個只會是0 public virtual int next int maxvalue 引數maxvalue 要生成的隨機數的上界 隨機數不能取該上界值 maxvalue 必...
如何用rand函式產生隨機數如何用rand函式產生乙個隨機數?
如果需要在數值a b之間隨即產生乙個數,如下操作 單元格中輸入函式 round rand c a 3 函式解釋 在a b區間範圍內隨即產生乙個數,小數點後保留3位!其中的 rand c a 函式解釋 以a為起點,步長為c 在a b中隨即產生乙個數。備註 c 為步長,也就是所取點的範圍長度。在這裡應該...
matlab中如何產生n個隨機數,和為定值
yty隨意 1 首先在電腦中,找到並開啟matlab軟體,二項分佈隨機數的產生。2 接著輸入二項分佈隨機數x b n,p n為發生次數,p為發生概率,如下圖所示。3 然後輸入泊松分佈,引數為p,如下圖所示。4 接著輸入指數分佈,引數為 如下圖所示。5 最後正態分佈,x n 2 如下圖所示,就完成了。...