C C 產生隨機數

2022-04-15 09:26:53 字數 1532 閱讀 2656

c/c++產生隨機數用到兩個函式rand() 和 srand()

一. 不指定範圍產生隨機數

用到函式rand(),函式原型為int rand(),無引數。此時會產生乙個介於0~rand_max間的整數。rand_max的大小可以檢視,在include資料夾(linux在usr目錄、windows在安裝目錄)的stdlib.h可以看到,linux下其值為2147483647(),其值與具體系統有關。

#include#includeint main()

return 0;

}

二. 指定範圍產生隨機數,產生0到某個數的隨機數沒有現成的函式,但是可以通過取餘得到

#include#include#define random(x) (rand() % x) //通過取餘取得指定範圍的隨機數

int main()

return 0;

}

說明下:假設dis取5,

注意乙個問題:以上兩個程式每次執行產生的結果是相同的,既是個偽隨機數。rand()產生隨機數與具體的種子有關,當不特意用srand()獲取種子時,種子的預設值為1,因此需要用srand()函式產生不同的種子,srand函式原型:void srand(unsigned seed);為了產生不同的種子值,通常用時間作為引數值。例如對於一,修改程式如下:

#include#include#includeint main()

return 0;

}

三. 指定範圍產生隨機數要求:指定範圍(m,n),m、n關係不定,隨機數包括m和n

想方設法,把範圍(m,n)改變到(0,x),到最後再轉移回去。三種情況

1:m=n此時不該叫隨機數,這裡返回m

2:m>n:

標記pos=n,距離差pos=m-n+1

返回 rand() % dis + pos

3:n>m:

標記pos=m,距離差=n-m+1

返回rand()%dis + pos

#include#include#includeint random(int m, int n)

else if(m > n)

else

}int main()

return 0;

}

昇華srand((unsigned)time(null));

(a,b) (rand()%(b-a+1))+a-1

[a,b) (rand()%(b-a))+a

(a,b] (rand()%(b-a))+a+1

[a,b] (rand()%(b-a+1))+a

C C 產生隨機數

c c 產生隨機數 c c 產生隨機數用到兩個函式rand 和 srand 一.不指定範圍產生隨機數 用到函式rand 函式原型為int rand 無引數。此時會產生乙個介於0 rand max間的整數。rand max的大小可以檢視,在include資料夾 linux在usr目錄 windows在...

C C 產生隨機數

c c 產生隨機數用到兩個函式rand 和 srand 一.不指定範圍產生隨機數 用到函式rand 函式原型為int rand 無引數。此時會產生乙個介於0 rand max間的整數。rand max的大小可以檢視,在include資料夾 linux在usr目錄 windows在安裝目錄 的stdl...

C C 產生隨機數

c c 產生隨機數用到兩個函式rand 和 srand 一.不指定範圍產生隨機數 用到函式rand 函式原型為int rand 無引數。此時會產生乙個介於0 rand max間的整數。rand max的大小可以檢視,在include資料夾 linux在usr目錄 windows在安裝目錄 的stdl...