標籤:style http color io 使用 ar for sp div
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
C random C ++rand函數應用