本文目錄一覽:
關於C語言編程中隨機數函數的使用問題
rnd是vb中的隨機函數,應該用rand();
函數說明
rand()會返回一隨機數值,範圍在0至RAND_MAX
間。在調用此函數產生隨機數前,必須先利用srand()設好隨機數種子,如果未設隨機數種子,rand()在調用時會自動設隨機數種子為1。關於隨機數種子請參考srand()。
srand((int)time(0));
是產生的隨機數每次不一樣。
#includetime.h
#includestdlib.h
main()
{
int
i,j;
srand((int)time(0));
for(i=0;i10;i++)
{
j=1+(int)(10.0*rand()/(RAND_MAX+1.0));
printf(“
%d
“,j);
}
}
執行
5
8
8
8
10
2
10
6
9
9
2
9
7
4
10
3
2
10
8
7
關於C語言隨機函數
把
srand(
time(0)
);
放在循環外每次產生隨機數的種子也是一樣的啊,為什麼產生的隨機數就不一樣了?
因為隨機函數只需要一個種子就能產生一系列的隨機數,並不是每個隨機數都需要一個種子。
你把
srand(time(0))
放到循環前面就可以了。
原因:
time(0)返回的是系統的時間(從1970.1.1午夜算起),單位:秒,而那個循環運行起來耗時連0.000001秒都不到!
也就是說,srand(time(0))
連着4次的種子是一樣的,種子一樣,生產的隨機數當然是一樣了。
如果你在把srand()放循環裡面,在中間加個sleep函數,消耗一點時間(間隔大於1秒),那麼生成的rand
就不一樣了.但是這樣做很不好,連着兩次用srand生成的種子,間隔一樣,生產的隨機數間隔有會有規律性。
另:因為兩次運行同一程序的時間肯定是不一樣的,所以把srand放在循環前面可以得不同的種子,這樣才能得到你想要的。
c語言中關於隨機函數的問題
#include
“stdio.h”
#include
“stdlib.h”
#include
“time.h”
int
Rrand(int
min,int
max);
main()
{
int
i;
int
a[200];
srand((unsigned)time(NULL));
/*將當前時間設置成隨機函數的種子,以每次運行產生的數都不一樣
*/
for(i=0;i20;i++)
a[i]=Rrand(0,60);
for(;i60;i++)
a[i]=Rrand(59,70);
for(;i140;i++)
a[i]=Rrand(69,80);
for(;i180;i++)
a[i]=Rrand(79,90);
for(;i200;i++)
a[i]=Rrand(89,101);
for(i=0;i200;i++)
printf(“%d\t”,a[i]);
}
int
Rrand(int
min,int
max)//在min和max之間整數中生成一隨機數並返回(不包括min和max),若不能產生隨機數返回-1.
{
int
num;
if(max-min1min=0)
{
num=rand()%max;
if(nummin)
return
num;
else
return
Rrand(min,max);
}
else
return
-1;
}
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/160934.html