C語言用rand產生的是偽隨機數麼

2021-05-06 00:24:47 字數 5770 閱讀 5327

1樓:匿名使用者

#include

#include

void test_rand(void)}

c語言rand函式產生的最大隨機數是多少?

2樓:辟芷兮兮

最大32767 (2^16-1)。

系統裡的隨機數是利用初等數論中的同餘定理來實現的.

整數rand的原理是:

y=ax+b(mod n)其中,n一般是一個很大的素數,幾萬。

a也是大素數。而且a,b,n都是常數。所以rand的產生決定於x,他被稱為seed。

每一個seed都是上一次產生的y的函式。這樣,如果直接取seed=y的話,

雖然產生的rand之間相關性甚小,但只要知道某個y,就能推知以後的rand。

為避免這種情況,一般取seed為y和當時計算機的時間的函式,如seed=y+t

比如vc中對於rand()函式是如下實現的.

int __cdecl rand (void)

c語言中的rand()函式,說是產生隨機數的函式,可是為什麼我在使用時產生的隨機數就沒變過呢?

3樓:

rand() 使用的隨機數產生機制,稱為偽隨機數;

所以rand()也叫偽隨機數發生器。

必須初始化一個真正的隨機一點的資料,得到的才像一個真正的隨機數。

所以使用它之前,要呼叫srand 函式初始化一下。

一般大家都喜歡用,系統當前時間來初始化它

#include

srand(time(null));/*或者

.....

a[i]=rand() / rand_max * n;

/* 或者 a[i]=(double)rand() /( rand_max +1)* n; */

....

4樓:匿名使用者

隨機數函式是不真正的隨機數,所以每次執行會有相同的結果,這個現象要用srand函式來解決,用srand函式初始化隨機數生成器,可以避免生成相同的隨機數

一般用電腦的時間來進行初始化

srand((unsigned) time(null));

5樓:龍__鳳

在程式前面加上srand(time(null));,保證隨機種子在每次執行程式時都不一樣,rand()得到的數就不一樣了

6樓:何處可人生

你需要加一個種子,就是在用rand()之前加上srand(time(null))就好了;這樣要用到標頭檔案time.h;根據執行的系統時間不同了計算隨機數,但其實這個函式並不是真隨機,是偽隨機,

7樓:旋風男孩兒

這是因為在使用rand()隨機函式時之前要獲取隨機種子srand((unsigned)time(null));

8樓:匿名使用者

我記得rand()是需要引數的,不同引數導致不同的序列,比如用當前時間作為引數就是一個不錯的選擇。

rand()函式產生的隨機數為什麼是偽隨機數

9樓:匿名使用者

計算機的執行過程是一個

確定的過程,每一條指令都是確定,因此從根本上來講,計算機產生不了真正意義上的隨機數。

那麼偽隨機數怎麼理解呢?舉個最簡單的例子,要隨機產生0~9十個數,那麼計算機可以迴圈快速的給出0、1、2、3、4、5、6、7、8、9、0、1……這樣的一個數列,這個數列並不是隨機的,而是有規律的(所以才叫做偽隨機),當我們按下按鈕,或者點下滑鼠的瞬間,機器停止,並顯示最後的一個數字(有點類似於玩***),這個過程我們挑選出來的數字好像是隨機的,但其實並不是100%隨機,只有我們去觸發機器的那個時間點是隨機的,其他都是有規律的,所以就是偽隨機。

rand()函式就是給出一列數值(這列數值是被事先打亂,但是是固定的數值),所以屬於偽隨機數。只是機器執行到rand()函式的時間點是隨機的,才讓我們感覺執行結果是隨機的一樣。

c語言怎樣產生一定範圍的隨機數?

10樓:hk_孤獨的心

編譯環境為:vs2013

產生1到3的整型隨機數的**如下:

#include

#include

#include

#define max 3   //這個函式的意義為:隨機生成最大的數為3

#define min 1    //這個函式的意義為:隨機生成最小的數為1

int main()

11樓:愛夏的你呀

在c語言中,rand()函式可以用來產生隨機數,但是這不是真真意義上的隨機數,

是一個偽隨機數,是根據一個數,可以稱它為種子。

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

c語言產生一定範圍的隨機數的源**如下:

#include

#include

int main()

return 0;

}擴充套件資料

1、如果要隨機生成一個在一定範圍的數,你可以在巨集定義中定義一個random(int number)函式,然後在main()裡面直接呼叫random()函式。

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

12樓:匿名使用者

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

13樓:哇哎西西

利用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( )

14樓:溫柔_儂渲芷

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的等差數列:

請採納答案,支援我一下。

15樓:a羅網天下

srand((int)time(null));設定隨機數種子

例子如下:

直接編譯,程式執行結果如下圖所示:

16樓:匿名使用者

#include

#include

#include

int main(void)

17樓:匿名使用者

要生成[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之間整數

18樓: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

用c語言怎樣產生不同的隨機數,用C語言怎樣產生10個不同的隨機數

方法和詳細的操作步驟如下 1 第一步,開啟c語言編譯器並建立一個新的初始.cpp檔案,例如 test.cpp 見下圖,轉到下面的步驟。2 第二步,執行完上面的操作之後,輸入c語言 見下圖,轉到下面的步驟。3 第三步,執行完上面的操作之後,編譯器執行test.cpp檔案,執行結果見下圖。這樣,就解決了...

c語言問題,請問如何才能產生隨機數

srand int value rand max 1 min min c語言怎樣產生一定範圍的隨機數?編譯環境為 vs2013 產生1到3的整型隨機數的 如下 include include include define max 3 這個函式的意義為 隨機生成最大的數為3 define min 1 ...

c語言怎樣將產生的隨機數放入一維陣列中

定義一個一維陣列number 然後把取得的隨機數賦值給number c語言如何把rand 產生的隨機數存入陣列 rand 函式是產生隨bai機數的一個隨機函du數。zhi 1 使用dao 專該函式首先應在開屬頭包含標頭檔案stdlib.h include c 建議使用 include,下同 2 在標...