rand(產生隨機數)  
相關函數 
srand
 
表頭文件 
#include<stdlib.h>
 
定義函數 
int rand(void)
 
函數説明 
rand()會返回一隨機數值,範圍在0至RAND_MAX 間。在調用此函數產生隨機數前,必須先利用srand()設好隨機數種子,如果未設隨機數種子,rand()在調用時會自動設隨機數種子為1。關於隨機數種子請參考srand()。
 
返回值 
返回0至RAND_MAX之間的隨機數值,RAND_MAX定義在stdlib.h,其值為2147483647。
 
範例 
/* 產生介於1 到10 間的隨機數值,此範例未設隨機數種子,完整的隨機數產生請參考
srand()*/
#include<stdlib.h>
main()
{
int i,j;
for(i=0;i<10;i++)
{
j=1+(int)(10.0*rand()/(RAND_MAX+1.0));
printf("%d ",j);
}
}
 
執行 
9 4 8 8 10 2 4 8 3 6
9 4 8 8 10 2 4 8 3 6
 
  



srand(設置隨機數種子)  
相關函數 
rand
 
表頭文件 
#include<stdlib.h>
 
定義函數 
void srand (unsigned int seed);
 
函數説明 
srand()用來設置rand()產生隨機數時的隨機數種子。參數seed必須是個整數,通常可以利用geypid()或time(0)的返回值來當做seed。如果每次seed都設相同值,rand()所產生的隨機數值每次就會一樣。
 
返回值 

範例 
/* 產生介於1 到10 間的隨機數值,此範例與執行結果可與rand()參照*/
#include<time.h>
#include<stdlib.h>
main()
{
int i,j;
srand((int)time(0));
for(i=0;i<10;i++)
{
j=1+(int)(10.0*rand()/(RAND_MAX+1.0));
printf(" %d ",j);
}
}
 
執行 
5 8 8 8 10 2 10 8 9 9
2 9 7 4 10 3 2 10 8 7



實現原理:  產生整數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