恰好在找這方面的資料,看到了一片不錯的,就全文轉過來了,省的我之後再找找不到。函數
在C語言中,能夠經過rand函數獲得一個「僞隨機數」。這個數是一個整數,其值大於等於0且小於等於RAND_MAX。rand函數和常量RAND_MAX都定義在庫stdlib.h之中,這意味着必須在頭文件中包含庫stdlib.h才能使用rand函數和常量RAND_MAX。
rand函數聲明爲:
int rand(void)
//代碼示例 start
#include <stdio.h>
#include <stdlib.h>
int main()
{
printf("%d %d\n", rand(), rand());
}
//代碼示例 end
編譯運行以上代碼,將在屏幕顯示兩個隨機數。但屢次運行這個程序,你會發現每次程序啓動後生成的兩個隨機數都是同樣的!可見,rand()生成的值並不隨機。
標準庫(stdlib)中隨機數的一個可能的實現以下:
//代碼示例 start
#define RAND_MAX 0x7fff
unsigned long int next = 1;
int rand(void)
{
next = next * 1103515245 + 12345;
return (unsigned int)(next/65536) % RAND_MAX;
}
/*srand函數:爲rand函數設置種子數*/
void srand(unsigned int seed)
{
next = seed;
}
//代碼示例 end
由上可知,只要咱們每次在程序運行開始時用srand設置好不一樣的nex值,那麼程序每次運行都將獲得不一樣是隨機序列。那又如何給srand傳入不一樣的數呢?隨機數?好吧,這下變成雞生蛋蛋生雞的問題了。其實不用那麼複雜。咱們只須要把當前的時間做爲srand的參數傳入就行了。程序每次運行的時間點是確定是不同的。
要獲取當前時間,可使用time庫中的time函數。示例以下:
//代碼示例 start
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
srand((int)time(0));
printf("%d %d\n", rand(), rand());
}
//代碼示例 end
編譯運行上述代碼,就能讓程序每次運行都獲得不一樣的隨機值了。
程序中time(0)函數返回值類型爲time_t(time_t定義爲長整型),time(0)返回從1970年1月1日零時零分零秒到目前爲止所通過的時間,單位爲秒。spa