當前位置:首頁 » 編程語言 » c語言的隨機函數原理
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

c語言的隨機函數原理

發布時間: 2022-07-15 10:59:10

c語言中產生隨機數利用到時間種子,什麼原理謝謝啦。

在C語言中取隨機數所需要的函數是:

int rand(void);
void srand (unsigned int n);
rand()函數和srand()函數被聲明在頭文件stdlib.h中,所以要使用這兩個函數必須包含該頭文件:

#include <stdlib.h>

rand()函數返回0到RAND_MAX之間的偽隨機數(pseudorandom)。RAND_MAX常量被定義在stdlib.h頭文件中。其值等於32767,或者更大。

srand()函數使用自變數n作為種子,用來初始化隨機數產生器。只要把相同的種子傳入srand(),然後調用rand()時,就會產生相同的隨機數序列。因此,我們可以把時間作為srand()函數的種子,就可以避免重復的發生。如果,調用rand()之前沒有先調用srand(),就和事先調用srand(1)所產生的結果一樣。

Ⅱ C語言中rand函數的原理問題,高手快來~

1、只能產生偽隨機數,最多也只是提高模擬的程度而已,rand函數內部管理著一個計數單位,程序每調用一次,它就根據這個計數單位和對應的srand產生種子的值,經過一系列的運算,得到隨機值,其實就相當於你傳了2個參數給rand(),比如是x是計數器的值,y是srand的值,那麼:

rand() = x*2 + y // 舉個簡單的例子,實際可能比這個關系式要復雜

對於給定的參數和關系式,x由rand函數內部管理,而y也就是srand的默認值是1,也不變,所以每調用一次只有x產生變化,而且是固定的變化,得到的隨機數也就是固定的了。

2、srand的作用就是設置y,根據以上的解釋,它的作用很已經很明顯了吧。

其實就算設置srand,得到的還是偽隨機數,只設定一個固定值的話,rand產生的偽隨機數的范圍就是0~RAND_MAX,而如果調用time()函數來返回一個隨時都會變化的值給rand做種子的話,也只相當於擴大了rand對偽隨機數列的選擇范圍,偽隨機數列的數量由1個增加至sizeof(time_t)個,對於每個由time()產生的種子,都有一個偽隨機數列與之對應,而x又不斷變化。舉個形象的例子:

rand函數就像是從流水線上選選蘋果一樣(只以顏色區分),設置srand可以變換這條流水線,比如原來為編號1的流水線,srand(2)之後,就變為編號2的流水線了,但選蘋果的位置是不變的(x不變),也就是rand第一次選擇了1號流水線上的第3個黃色蘋果,srand之後,rand就接下來去選2號流水線上的第4個蘋果了,而如果調用srand(time(0))的,相當於每次rand選蘋果之前都變換流水線,也可以理解為rand面前共有sizeof(time_t)條流水線,如果rand函數的調用速度和time函數相當的話,那麼rand就依此從各條流水線上挑選對應位置x的蘋果。其實所有的流水線和每條流水線上的蘋果的擺放次序都是不變的。

Ⅲ C語言的隨機函數的機理怎麼達到隨機的

個人理解:C語言常用的隨機數是以時間為隨機種子,時間變數是精確到毫秒的,也就是一千分之一秒,所以每次隨機時候的時間變數只有很小的概率相同,根據這個時間以一定的演算法再算出你要得到的隨機數。

Ⅳ C語言怎樣產生一定范圍的隨機數

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

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

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

#include<stdio.h>

#include<stdlib.h>

int main()

{

int i;

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

{

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

}

return 0;

}

(4)c語言的隨機函數原理擴展閱讀

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

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

Ⅳ c語言隨機數函數是什麼

C語言隨機函數主要用於實現一組隨機數的生成。

代碼示例如下:

#include<stdio.h>

#include<stdlib.h>

int main ()

{

int a;

a=rand()%4;

printf("%d ",a);

return 0;

}

C預先生成一組隨機數,每次調用隨機函數時從指針所指向的位置開始取值,因此使用rand()重復運行程序產生的隨機數都是相同的,可以通過srand()函數來改變指針位置。

(5)c語言的隨機函數原理擴展閱讀:

C語言隨機函數指針位置

void srand( unsigned int seed )

改變隨機數表的指針位置(用seed變數控制)。一般配合time(NULL)使用,因為時間每時每刻都在改變,產生的seed值都不同。

基於毫秒級隨機數產生方法:

#include<windows.h>

種子設為:srand(unsigned int seed);

srand(GetTickCount());

參考資料:網路-C語言隨機函數

Ⅵ 計算機語言中,隨機函數原理是什麼

計算機不會產生絕對隨機的隨機數,計算機只能產生「偽隨機數」。其實絕對隨機的隨機數只是一種理想的隨機數,即使計算機怎樣發展,它也不會產生一串絕對隨機的隨機數。計算機只能生成相對的隨機數,即偽隨機數。 偽隨機數並不是假隨機數,這里的「偽」是有規律的意思,就是計算機產生的偽隨機數既是隨機的又是有規律的。怎樣理解呢?產生的偽隨機數有時遵守一定的規律,有時不遵守任何規律;偽隨機數有一部分遵守一定的規律;另一部分不遵守任何規律。比如「世上沒有兩片形狀完全相同的樹葉」,這正是點到了事物的特性,即隨機性,但是每種樹的葉子都有近似的形狀,這正是事物的共性,即規律性。從這個角度講,你大概就會接受這樣的事實了:計算機只能產生偽隨機數而不能產生絕對隨機的隨機數。
隨機函數有如下兩種:
rand()函數返回0到RAND_MAX之間的偽隨機數(pseudorandom)。RAND_MAX常量被定義在stdlib.h頭文件中。其值等於32767,或者更大。

srand()函數使用自變數n作為種子,用來初始化隨機數產生器。只要把相同的種子傳入srand(),然後調用rand()時,就會產生相同的隨機數序列。因此,我們可以把時間作為srand()函數的種子,就可以避免重復的發生。如果,調用rand()之前沒有先調用srand(),就和事先調用srand(1)所產生的結果一樣。

Ⅶ C語言中如何產生一個隨機數及其原理

使用函數 rand()
舉例:
int rrr = rand() %100;
則產生[0,99]的隨機數
使用時請增加包含文件:
#include <stdlib.h>

Ⅷ c語言裡面隨機函數有什麼用,或者說當初設計這個隨機函數的初衷是什麼

隨機函數其原理就是在特定的數字中產生隨機數字,而數字的產生又於系統的時間有關系,當初產生的可能是方便吧!減小代碼量

Ⅸ 如何在C語言中產生一定范圍的隨機數

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