說明:
1、這兩個函數都在頭文件是stdlib.h
中。
2、rand()函數和srand()函數必須配套使用。
(1) rand()
函數:
原型: int rand(void)
功能: 產生從0到RAND_MAX(0x7fff)之間的隨機數。
頭文件: stdlib.h
例:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int k;
k = rand();
printf("%d\n", k);
return 0;
}
編譯運行,發現的確產生隨機數了,但是,每次運行程序產生的隨機數都是一樣的,為什么呢?因為隨機數取在
C語言中采用的是固定序列,所以每次執行所取的是同一個數。那么如何寫一個程序,讓它每次運行時產生的隨機數
都不一樣呢?
(2)srand()
函數:
原型: void srand(unsigned seed)
功能: 產生隨機數的起始發生數據,和rand函數配合使用
頭文件: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;
}
這時運行程序,會發現每次產生的隨機數都不一樣。這是因為這里采用了時間作為種子,而時間在每時每刻都不相同,所以就產生了"隨機"的隨機數了。所以,要想產生不同的隨機數,在使用rand之前需要先調用srand。
這樣做相當麻煩,有沒一個更簡單的函數呢?
(3)randomize()
函數:
原型: int randomize(void)
功能: 通過time函數來得到一個隨機數
頭文件:stdlib.h time.h
該函數就相當于srand((unsign)(time(NULL))
不過應注意的是randomize()
的功能要通過time來實現所以在
調用它時頭文件要包含time.h
。
(4)產生一個X到Y的隨機數:
由于rand產生的隨機數從0到rand_max
,而rand_max
是一個很大的數,那么如何產生從X~Y的數呢?
只要這樣寫:
k=rand()%(Y-X+1)+X;
這樣可以產生任何范圍內的隨機數。