這兩個函數的使用都要包含頭文件stdio.h
,rand()
函數返回的是一個0到RAND_MAX
的隨機數,RAND_MAX
這是一個常數,它的值在windows和linux下是不同的。在我的機子上這個值是32767,也就是說,在我的機子上,rand()
這個函數會返回一個0到32767的隨機數。(這裏不討論返回的是不是真正意義上的隨機數的問題,只討論它的用法。)
產生某個區間的隨機數
如果我們需要這個函數產生某個區間的隨機數怎麼做呢?首先我們看看rand()
函數原型:int rand(void)
,可以看出這個函數不接受任何參數,那麼怎麼讓他產生某個區間的隨機呢?通用的公式是這樣的:n+rand()%m
,這個公式的意思產生區間[n,n+m)
的隨機數,即包括n到不包括m之間的隨機數。由區間可以看出,式子中n
是區間的開始,m
你想要的區間的差。
這個通用公式也很容易理解,因爲rand()
這個函數不接受任何參數,所以他本身始終表示0到RAND_MAX的隨機數,所以我們可以在它產生缺省隨機數的基礎上加n,就是想要的區間的起始,在用m表示區間的結束。
需要注意的是,這樣的產生的隨機數缺省是左閉右開的:[n,m)
srand函數
這個函數通常和rand()函數配合使用以達到最好的隨機數效果。它的原型是:void srand(unsigned int seed)
,爲函數rand()
提供隨機數種子。這個函數要在rand()
調用之前調用,才能達到應有的效果。