C 隨機(jī)函數(shù) `rand()\srand()\randomize()`

說明:
1、這兩個函數(shù)都在頭文件是stdlib.h中。
2、rand()函數(shù)和srand()函數(shù)必須配套使用。

(1) rand()函數(shù):

原型: int rand(void)
功能: 產(chǎn)生從0到RAND_MAX(0x7fff)之間的隨機(jī)數(shù)。
頭文件: stdlib.h
例:

   #include <stdio.h>
   #include <stdlib.h>

   int main()
   {
       int k;
       k = rand();
       printf("%d\n", k);
       return 0;
   }

編譯運(yùn)行,發(fā)現(xiàn)的確產(chǎn)生隨機(jī)數(shù)了,但是,每次運(yùn)行程序產(chǎn)生的隨機(jī)數(shù)都是一樣的,為什么呢?因為隨機(jī)數(shù)取在
C語言中采用的是固定序列,所以每次執(zhí)行所取的是同一個數(shù)。那么如何寫一個程序,讓它每次運(yùn)行時產(chǎn)生的隨機(jī)數(shù)
都不一樣呢?

(2)srand()函數(shù):

原型: void srand(unsigned seed)
功能: 產(chǎn)生隨機(jī)數(shù)的起始發(fā)生數(shù)據(jù),和rand函數(shù)配合使用
頭文件:stdlib.h time.h
例:

   #include <stdio.h>
   #include <stdlib.h>
   #include <time.h>
   int main(void)
   {
       int i;
       time_t t;
       srand((unsigned) time(&t));
       printf("Ten random numbers from 0 to 99\n\n");
       for (i=0; i<10; i++)
       printf("%d\n", rand()%100);
       return 0;
   }

這時運(yùn)行程序,會發(fā)現(xiàn)每次產(chǎn)生的隨機(jī)數(shù)都不一樣。這是因為這里采用了時間作為種子,而時間在每時每刻都不相同,所以就產(chǎn)生了"隨機(jī)"的隨機(jī)數(shù)了。所以,要想產(chǎn)生不同的隨機(jī)數(shù),在使用rand之前需要先調(diào)用srand。
這樣做相當(dāng)麻煩,有沒一個更簡單的函數(shù)呢?

(3)randomize()函數(shù):

原型: int randomize(void)
功能: 通過time函數(shù)來得到一個隨機(jī)數(shù)
頭文件:stdlib.h time.h
該函數(shù)就相當(dāng)于srand((unsign)(time(NULL))不過應(yīng)注意的是randomize()的功能要通過time來實現(xiàn)所以在
調(diào)用它時頭文件要包含time.h。

(4)產(chǎn)生一個X到Y(jié)的隨機(jī)數(shù):

由于rand產(chǎn)生的隨機(jī)數(shù)從0到rand_max,而rand_max是一個很大的數(shù),那么如何產(chǎn)生從X~Y的數(shù)呢?
只要這樣寫:
k=rand()%(Y-X+1)+X;
這樣可以產(chǎn)生任何范圍內(nèi)的隨機(jī)數(shù)。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容