C語言中如何產生隨機數


    今天看到一段小程序 ,里面用到隨機數。才發現在C語言中產生隨機數不像matlab中那么簡單。

    C中也有rand()函數,但是rand()函數產生的數不是真正意義上的隨機數,是一個偽隨機數,是根據一個數,我們稱它為種子,為基准以某個遞推公式推算出來的一系列數。范圍在0~RAND_MAX之間。RAND_MAX和rand()一樣也定義在stdlib.h中,其值至少為32767。當計算機正常開機后,種子是固定了的。所以如果不結合其他函數,使用rand()產生隨機數就會出現以下情況:

 1 #include<stdlib.h>
 2 int main()
 3 {
 4      int i,j;
 5      for(i=0;i<10;i++)
 6      {
 7             j=1+(int)(rand()%10);
 8             printf("%d",j);
 9      } 
10 }

你會發現程序連續執行N次的結果是一樣的,這是因為如果未設置隨機數種子,rand()在調用時會默認隨機數種子為1。為了解決這個問題C提供了srand()函數。所以在調用rand()產生隨機數之前必須調用srand()設置種子。srand()的原形是void srand(int a)。下面結合srand()的使用我們編寫一個產生隨機數的程序:

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main()
{
     srand((int)time(0));
     int i;
     for (i=0;i<!0;i++)
     {
        printf("%d ",(int)(rand()%10));
      }
    
      printf("\n");
}
root@ubuntu:/home/qj/python_pro# ./test
5 6 2 3 8 6 1 9 8 0 
root@ubuntu:/home/qj/python_pro# ./test
5 6 1 7 6 0 9 8 0 2 
root@ubuntu:/home/qj/python_pro# ./test
1 1 6 2 6 1 6 5 1 0 
root@ubuntu:/home/qj/python_pro# ./test
9 4 0 3 0 7 8 7 0 1 
root@ubuntu:/home/qj/python_pro# ./test
8 2 1 5 4 0 2 9 5 2 
root@ubuntu:/home/qj/python_pro# ./test
6 1 9 6 8 2 6 2 1 1 
root@ubuntu:/home/qj/python_pro# ./test
2 1 0 4 0 8 9 0 7 2 
root@ubuntu:/home/qj/python_pro# ./test
7 4 9 3 1 7 6 4 1 0 
root@ubuntu:/home/qj/python_pro# ./test
4 8 1 1 1 2 6 3 3 0 
root@ubuntu:/home/qj/python_pro# 

其中time()用來獲得機器時間,它定義在time.h中。

由於程序執行是隨機的,系統時間也具有隨機性。故可以得到具有隨機性的種子,且每次使用rand()函數前都使用srand()設置一次種子,這樣我們就能得到隨機數了。

還可以參考:

http://wenku.baidu.com/link?url=UCsVYyZNNAoXlVUIqhGjppcbL6JlCpxMPxAhyzep_ePMDxb977NQqTk-DAed7k7-kjj9v90Bn6N0a-P1rfaGi9DvN0WsVY04kF8-L34dXn_

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM