其實,除了random函數(shù),還有一個rand函數(shù),這個函數(shù)也是一個隨機函數(shù),他可以產生從0到rand_max的隨機數(shù)。
創(chuàng)新互聯(lián)建站專注于龍文企業(yè)網(wǎng)站建設,響應式網(wǎng)站,成都做商城網(wǎng)站。龍文網(wǎng)站建設公司,為龍文等地區(qū)提供建站服務。全流程按需制作,專業(yè)設計,全程項目跟蹤,創(chuàng)新互聯(lián)建站專業(yè)和態(tài)度為您提供的服務
大家可以把以上的代碼編譯運行一下,發(fā)現(xiàn)他的確產生隨機數(shù)了,但是你會發(fā)現(xiàn),每次運行程序產生的隨機數(shù)都是一樣的,如過
你在程序里加上for循環(huán),每次產生的數(shù)不一樣,但是,如果再運行這個程序,它產生的數(shù)故巧洗緯絳蠆??慕峁??
那么如何寫一個程序,讓它每次運行時產生的隨機數(shù)都不一樣呢? 請看下面的例子:
#include stdlib.h
#include stdio.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; i10; i++)
printf("%d\\n", rand() % 100);
return 0;
}
這時運行程序,會發(fā)現(xiàn)每次產生的隨機數(shù)都不一樣。
那么為什么第一個程序一樣而第二個程序一樣呢?
第二個程序用到了一個新的函數(shù)srand
這個函數(shù)是給隨機數(shù)產生一個隨機種子(seed),函數(shù)原型是srand( (unsigned)time( NULL ) );
time的值每時每刻都不同。所以種子不同,所以,產生的隨機數(shù)也不同。
所以說,要想產生不同的隨機數(shù),在使用rand之前需要先調用srand
srand和rand函數(shù)都包含在stdlib.h的頭文件里。
由于rand產生的隨機數(shù)是從0到rand_max的,而rand_max是一個很大的數(shù),那么如何產生從X~Y的數(shù)呢?
從X到Y,有Y-X+1個數(shù),所以要產生從X到Y的數(shù),只需要這樣寫:
k = rand() % (Y - X + 1) +X;
這樣,就可以產生你想要的任何范圍內的隨機數(shù)了。
time.h 是編輯器包裝好的頭文件 包含方法 rand() srand()
rand() 是 提供隨機數(shù)的方法
srand() 是 建立隨機數(shù)種子 隨機數(shù)要根據(jù)種子產生
seed 指的是隨機數(shù)種子 無此方法
首先告訴你隨機數(shù)種子是什么東東.
電腦不是人,不能隨便就憑空想象一個數(shù)字出來。所謂的隨機數(shù),不過是通過一個函數(shù)經(jīng)過計算出來的數(shù)字而已。 因此,隨機數(shù)不過是函數(shù)計算出來的值,而一個函數(shù)要得到這個值Y,肯定需要一個輸入X,所以X就是那個種子。
簡單點說 Y = function(x);
隨機數(shù)=Y,隨機數(shù)種子=X。
第二,rand()%Y+1是什么意思。 首先你要弄懂%是什么意思,是取余運算。
舉個例子 10 % 3 = 1 10 % 5 = 0;就是得到余數(shù)。
余數(shù)的范圍永遠是從 0到被除數(shù)-1 不可能等于被除數(shù)。
所以rand()%Y的意思就是 得到一個隨機數(shù),這個隨機數(shù)的范圍是從0到Y-1
再加1當然就是把這個隨機數(shù)的范圍確定在0到Y之間了
一般rand()%某數(shù) 都是用來指定取某個范圍內的隨機數(shù)的
這個for循環(huán)不過就是取打印10個0-99之間的隨機數(shù)而已..
如果還不明白hi我