C random C ++rand函式應用
random函式不是ANSI C標準,不能在gcc,vc等編譯器下編譯通過。但在C語言中int random(num)可以這樣使用,它返回的是0至num-1的一個隨機數。
可改用C++下的rand函式來實現。
rand()%n 範圍 0~n-1
rand()主要是實現 產生隨機數,其他我們在這裡可以無視他
顯然任意 一個數 rand()%n 範圍顯然是 0~n-1;
那麼 如何產生 n~m的數呢? 一樣的 我們只要對rand()進行一些 符號操作就行了;
n+rand()%(m-n+1); 這樣就可以了
這樣我們 就只有 種子 和 浮點數的沒有分析了,
下面來說rand()的用法 ,浮點數的放在最後面講 :一般在用這個之前 都要 初始化 一個種子 ,但是 你不寫的話,系統會給你 一個預設的種子,下面是我們自己輸入種子的程式碼;
int seed;
scanf ("%d",&seed);
srand(seed);
cout<<rand()<<endl;
#include <stdio.h> #include <stdlib.h> #include <time.h> int main() { int arr[15]; //srand(time(NULL)); int seed; while(1){ scanf("%d",&seed); srand(seed); for (int i=0; i<15; i++) printf ("%d\t",rand()%10); printf ("\n"); } return 0; }
經過下圖的比較發現,每一個種子都是保持著這個狀態的隨機變數值,會存在系統裡面;
因此,我們要對這個初始化種子 保持著 時刻不同;也就是說 我們還是用 srand(time(NULL));比較好
用如下程式碼比較合適:
#include <stdio.h> #include <stdlib.h> #include <time.h> int main() { //int arr[15]; srand(time(NULL)); for (int i=0; i<15; i++) printf ("%d\t",rand()%10); printf ("\n"); while (1); return 0; }
好了,我們現在講下最後一點---------浮點數的隨機產生
rand()%n =========== 0~n-1 那麼 我們再除以 n 就行了
可以表示為: (rand()%n)/(n*1.0) //這裡注意下 隱式轉換 低------>高
下面給出一個範例:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
int arr[15];
//srand(time(NULL));
int seed;
while(1){
scanf("%d",&seed);
srand(seed);
for (int i=0; i<15; i++)
printf ("%lf\t",(rand()%10)/10.0);
printf ("\n");
}
return 0;
}
如果要 更精確呢?像0.11 這樣的呢??? 道理是一樣的
我們可以輸出 (rand()%n)/(n*1.0)+(rand()%n)/(n*10.0);
由此我們可以總結出規律:p 表示精確位數
{ p }
1.......1*(rand()%n)/10^p