C語言隨機函式

2021-09-30 04:44:31 字數 2036 閱讀 1522

1.rand()與srand()

在c語言函式庫中包含了乙個產生隨機數的函式:

int rand( void );

在函式庫中對這個函式的說明是:

the rand function returns a pseudorandom integer in the range

0 to rand_max. use the srand function to seed the pseudorandom

-number generator before calling rand.

而在c語言函式庫中是這樣定義rand_max的:

/* maximum value returned by "rand" function

*/#define rand_max 0x7fff

所以,函式int rand( void );返回的是乙個界於0~32767(0x7fff)之

間的偽隨機數,包括0和32767。注意,這裡產生的是偽隨機數,不是真正意

義上的隨機數,看下面的程式:

#include "stdlib.h"

#include "stdio.h"

void main( void )

程式執行的結果是:

346多次執行這個程式,發現每次產生的結果都是346(不同的機器可能產生

的結果不一樣),這就是所謂的偽隨機數。偽隨機數是通過乙個公式來運算

出來的,所以,每次產生的偽隨機數都一樣。那麼,如何才能產生真正意義

上的隨機數呢?這就有乙個隨機種子的問題。在c語言標準函式庫中,有這

麼乙個函式:

void srand( unsigned int seed );

在《the c programming language》中對這個函式是這樣描述的:

srand uses seed(函式變數宣告中的seed) as the seed(隨機函式中種子

的意思) for a new sequence of pseudo-random numbers. the

initial seed is 1.

所以,要產生真正意義上的隨機數,那麼就要求每次提供的種子不一樣,一

般情況下,都設定時間為隨機函式的種子。看下面的一段程式:

/* rand.c: this program seeds the random-number generator

* with the time, then displays 10 random integers.

*/#include "stdlib.h"

#include "stdio.h"

#include "time.h"

void main( void )

output

6929

8026

21987

30734

20587

6699

22034

25051

7988

10104

每次執行這個程式,產生的隨機數都不一樣,這樣就達到了隨機數的要求了

2.random與randomize()

開啟標準庫中的標頭檔案 stdlib.h 就會發現有這樣的一條語句:

#define random(num) (rand() % (num))

可見要產生給定範圍的隨機數,可以使用random()。

#define randomize() srand((unsigned)time(null))

srand( (unsigned)time( null ) );

/* display 10 numbers. */

for( i = 0; i < 10;i++ )

printf( 「 %6d/n」, rand() );

} randomize();

/* display 10 numbers. */

for( i = 0; i < 10;i++ )

printf( 「 %6d/n」, rand() );

} 2者等價

c語言 隨機函式

c語言 隨機函式 include rand srand 標準c庫中函式rand 可以生成0 rand max 之間的乙個隨機數,其中rand max 是stdlib.h 中定義的乙個整數,它與系統有關。rand 函式沒有輸入引數,直接通過表示式rand 來引用 例如可以用下面的語句來列印兩個隨機數 ...

隨機函式 C語言

有時對於一些程式,我是想寫乙個常用排序教程的合編 測試時需要輸入好多的測試資料,好麻煩呀,用隨機函式怎麼樣?好呀,不過得學隨機函式,好辦,baidu,做筆記如下吧 一 srand函式 srand函式是隨機數發生器的初始化函式。原型 void srand unsigned seed 用法 先提供乙個種...

C語言隨機函式

1 rand 函式 include stdio.h include stdlib.h include time.h int main void 其中rand 100中的 100 是可變數,也就是隨機產生時的最大值 100 1 99 產生隨機數的範圍是 0,100 如果不採用srand unsigne...