c語言rand函數?
rand函數,C語言中用來產生一個隨機數的函數。
rand函數界限:stdlib.h頭文件中有宏#define rand_MAX 0x7fff
rand產生一個0-0x7fff的隨機數,即最大是32767的一個數
rand函數原型
#include <stdlib.h>
int rand(void);
rand函數調用
rand()函數每次調用前都會查詢是否調用過srand(seed),是否給seed設定了一個值,如果有那么它會自動調用srand(seed)一次來初始化它的起始值
若之前沒有調用srand(seed),那么系統會自動給seed賦初始值,即srand(1)自動調用它一次
srand函數
srand函數是隨機數發生器的初始化函數,原型:
void srand(unsigned int seed);
這個函數需要提供一個種子,如srand(1),用1來初始化種子
rand()產生隨機數時,如果用srand(seed)播下種子之后,一旦種子相同(下面的getpid方法),產生的隨機數將是相同的。當然很多時候刻意讓rand()產生的隨機數隨機化,用時間作種子 srand(time(NULL)),這樣每次運行程序的時間肯定是不相同的,產生的隨機數肯定就不一樣了。
我們常常使用系統時間來初始化,使用time函數來獲取系統時間,得到的值是一個時間戳,即從1970年1月1日0點到現在時間的秒數,然后將得到的time_t類型數據轉化為(unsigned int)的數,然后再傳給srand函數,用法如下:
srand((unsigned int)time(NULL));//我們在使用rand和srand時,主要使用的就是這一種初始化方法!!
如果仍然覺得時間間隔太小,可以在(unsigned)time(0)或者(unsigned)time(NULL)后面乘上某個合適的整數。 例如,srand((unsigned)time(NULL)*10)
time的參數傳NULL表示不需要經過參數獲得到的time_t數據,time函數原型如下
time_t time(time_t *tloc);//time_t類型被定義為一個長整型
還有另外一種初始化種子的方式如下,用進程的pid作為種子值seed,在同一個程序中,這樣的種子的值是相同的
srand((unsigned int)getpid())
rand函數的使用
如果想要表示一個數是從0開始到最大值的,比如說,想要產生一個0-99之間的隨機數,那么用法如下
int num = rand() % 100;
如果想要產生一個數是從1開始到最大值的,比如說,想要產生一個1-100之間的隨機數,那么用法如下
int num = rand() % 100 + 1;
需要注意最后+1和不+1的區別,+1的最小值是1,不+1的最小值是0