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...