當前位置:編程學習大全網 - 編程語言 - C語言中取隨機數的函數

C語言中取隨機數的函數

1. 基本函數

在C語言中取隨機數所需要的函數是:

 int rand(void); void srand (unsigned int n);

rand()函數和srand()函數被聲明在頭文件stdlib.h中,所以要使用這兩個函數必須包含該頭文件:

 #include <stdlib.h>

2. 使用方法

rand()函數返回0到RAND_MAX之間的偽隨機數(pseudorandom)。RAND_MAX常量被定義在stdlib.h頭文件中。其值等於32767,或者更大。

srand()函數使用自變量n作為種子,用來初始化隨機數產生器。只要把相同的種子傳入srand(),然後調用rand()時,就會產生相同的隨機數序列。因此,我們可以把時間作為srand()函數的種子,就可以避免重復的發生。如果,調用rand()之前沒有先調用srand(),就和事先調用srand(1)所產生的結果壹樣。

舉個例子,假設我們要取得0~10之間的隨機整數(不含10本身):

 /* 例1:不指定種子的值 */

 for (int i=0; i<10; i++) { printf("%d ", rand()%10); }

  每次運行都將輸出:1 7 4 0 9 4 8 8 2 4

 /* 例2:指定種子的值為1 */

 srand(1); for (int i=0; i<10; i++) { printf("%d ", rand()%10); }

  每次運行都將輸出:1 7 4 0 9 4 8 8 2 4

  例2的輸出結果與例1是完全壹樣的。

 /* 例3:指定種子的值為8 */ srand(8); for (int i=0; i<10; i++) { printf("%d ", rand()%10); }

  每次運行都將輸出:4 0 1 3 5 3 7 7 1 5

  該程序取得的隨機值也是在[0,10)之間,與srand(1)所取得的值不同,但是每次運行程序的結果都相同。

 /* 例4:指定種子值為現在的時間 */ srand((unsigned)time(NULL)); for (int i=0; i<10; i++) { printf("%d ", rand()%10); }

  該程序每次運行結果都不壹樣,因為每次啟動程序的時間都不同。另外需要註意的是,使用time()函數前必須包含頭文件time.h。

 3. 註意事項

求壹定範圍內的隨機數。

  如要取[0,10)之間的隨機整數,需將rand()的返回值與10求模。

 randnumber = rand() % 10;

  那麽,如果取的值不是從0開始呢?妳只需要記住壹個通用的公式。

  要取[a,b)之間的隨機整數(包括a,但不包括b),使用:

  (rand() % (b - a)) + a

偽隨機浮點數。

  要取得0~1之間的浮點數,可以用:

  rand() / (double)(RAND_MAX)

  如果想取更大範圍的隨機浮點數,比如0~100,可以采用如下方法:

  rand() /((double)(RAND_MAX)/100) 其他情況,以此類推,這裏不作詳細說明。

  • 上一篇:FLEXA的全名怎麽寫的?希望SMT高手指點壹下,特此感謝!
  • 下一篇:最通用的編程語言
  • copyright 2024編程學習大全網