C/C++產生指定範圍和不定範圍隨機數的實例代碼

想要學C/C++的朋友,下面,就和小編一起來看一看C/C++產生指定範圍和不定範圍隨機數的實例代碼,希望對大家有幫助!

C/C++產生指定範圍和不定範圍隨機數的實例代碼

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

用到函數rand(),函數原型爲int ra

nd(),無參數。此時會產生一個介於0~RAND_MAX間的整數。RAND_MAX的大小可以查看,在include文件夾(linux在usr目錄、windows在安裝目錄)的stdlib.h可以看到,linux下其值爲2147483647(),其值與具體系統有關。

參考代碼:

複製代碼 代碼如下:

#include

#include

int main()

{

int i;

for(i=0; i<10; i++) //隨機產生10個數。

{

printf("%dn", rand());

}

return 0;

}

  二. 指定範圍產生隨機數,產生0到某個數的隨機數

沒有現成的函數,但是可以通過取餘得到

複製代碼 代碼如下:

#include

#include

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

int main()

{

int i;

int dis; //產生[0, dis)之間的隨機數,注意不包括dis

for(i=0; i<10; i++)

{

printf("%dn", Random(dis));

}

return 0;

}

說明下:假設dis取5

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

複製代碼 代碼如下:

#include

#include

#include

int main()

{

int i;

srand((int)time(NULL)); //每次執行種子不同,生成不同的隨機數

for(i=0; i<10; i++)

{

printf("%dn", rand()); //因爲執行太快,不到一秒鐘,10個隨機數是相通的,但是每次執行是不同的

}

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

#include

int Random(int m, int n)

{

int pos, dis;

if(m == n)

{

return m;

}

else if(m > n)

{

pos = n;

dis = m - n + 1;

return rand() % dis + pos;

}

else

{

pos = m;

dis = n - m + 1;

return rand() % dis + pos;

}

}

int main()

{

int i, m, n;

srand((int)time(NULL));

m = -3;

n = -7;

for(i=0; i<10; i++)

{

printf("%dn", Random(m, n));

}

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