說明:
1头滔、這兩個函數(shù)都在頭文件是stdlib.h
中。
2涎显、rand()函數(shù)和srand()函數(shù)必須配套使用坤检。
(1) rand()
函數(shù):
原型: int rand(void)
功能: 產(chǎn)生從0到RAND_MAX(0x7fff)之間的隨機數(shù)。
頭文件: stdlib.h
例:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int k;
k = rand();
printf("%d\n", k);
return 0;
}
編譯運行期吓,發(fā)現(xiàn)的確產(chǎn)生隨機數(shù)了早歇,但是,每次運行程序產(chǎn)生的隨機數(shù)都是一樣的讨勤,為什么呢箭跳?因為隨機數(shù)取在
C語言中采用的是固定序列,所以每次執(zhí)行所取的是同一個數(shù)潭千。那么如何寫一個程序谱姓,讓它每次運行時產(chǎn)生的隨機數(shù)
都不一樣呢?
(2)srand()
函數(shù):
原型: void srand(unsigned seed)
功能: 產(chǎn)生隨機數(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;
}
這時運行程序屉来,會發(fā)現(xiàn)每次產(chǎn)生的隨機數(shù)都不一樣。這是因為這里采用了時間作為種子,而時間在每時每刻都不相同,所以就產(chǎn)生了"隨機"的隨機數(shù)了狈癞。所以奶躯,要想產(chǎn)生不同的隨機數(shù),在使用rand之前需要先調(diào)用srand亿驾。
這樣做相當麻煩嘹黔,有沒一個更簡單的函數(shù)呢?
(3)randomize()
函數(shù):
原型: int randomize(void)
功能: 通過time函數(shù)來得到一個隨機數(shù)
頭文件:stdlib.h time.h
該函數(shù)就相當于srand((unsign)(time(NULL))
不過應注意的是randomize()
的功能要通過time來實現(xiàn)所以在
調(diào)用它時頭文件要包含time.h
莫瞬。
(4)產(chǎn)生一個X到Y(jié)的隨機數(shù):
由于rand產(chǎn)生的隨機數(shù)從0到rand_max
儡蔓,而rand_max
是一個很大的數(shù),那么如何產(chǎn)生從X~Y的數(shù)呢疼邀?
只要這樣寫:
k=rand()%(Y-X+1)+X;
這樣可以產(chǎn)生任何范圍內(nèi)的隨機數(shù)喂江。