隨機函式rand srand

2021-09-23 10:37:36 字數 2114 閱讀 8785

一、隨機函式

產生數的函式,庫函式中系統提供了兩個函式用於產生隨機數:srand()和rand()

二、偽隨機數

偽隨機數是在一定的數值範圍內,由隨機種子採用一定的演算法計算出來乙個數字做為結果顯示,盡量保證演算法公平使得產生的結果接近隨機數。

其實rand 、srand是通過設定乙個隨機種子(數值形式)用來產生偽隨機數的。

p:若使用的種子不變,只要計算方法一定,則偽隨機數的數序也不變。

舉例: *#includeusing namespace std;

int main(){

unsigned int seed=5;//unsigned 表示資料型別無符號

兩次結果相同

三、種子

1、 隨機種子來自系統時鐘即計算機主機板上的定時/計數器在記憶體中的計數值,

通常利用系統時間來改變系統的種子值srand(time(null))

2、標頭檔案:time.h/ctime

3、 舉例:*` #include#include#includeusing namespace std;

兩次結果不同,感興趣可以自己試一試

四、srand()函式

1、含義:是隨機數發生器的初始化函式

2、標頭檔案:stdlib.h/cstdlib

3、原型:void srand(unsigned int seed);//unsigned:無符號整型

4、用法:一般與rand()函式一起使用

通過引數seed改變系統提供的種子值(用來初始化函式的起始值)使得每次呼叫rand函式生成的偽隨機數序列不同,實現真正意義上的隨機。

五、rand()函式

1、標頭檔案:stdlib.h/cstdlib

2、原型:int rand(viod);

int num=rand();

3、返回值:返回乙個【0,rand_max】間的隨機整數

4、與srand配合原理:

系統在呼叫rand之前如果呼叫過srand,並且引數seed指定了乙個值那麼rand會將其作為初始值,而如果沒有呼叫過那麼其會將1作為初始值。當初始值seed 是定值又或者初始值是預設值1都代表是乙個定值,這樣會導致產生的隨機數是一樣的。

5、解決方案:前面有點繞哈,不過記住,產生一切的前提是初始值也就是種子值一定不可以是定值,有人又會有疑問一直一次次呼叫一次次設豈不是很麻煩? 所以,我們需要系統時鐘的幫助,一般形式如下:

srand((ungined)time(0))

srand((ungined)time(null))//筆者一般用這個哈

6、 指定範圍:在一些實際實驗時,由於實際問題的需要我們要產生在一定 範圍內的隨機數

先舉例

要產生【0~99】100個整數則:int num=rand()%100;即可

產生【1~100】之間則:int num=rand()%100+1;即可

總結:

產生【a,b】範圍則:int num=rand()%(a-b+1)+b

思想方法:

模除+加法

7、應用舉例:

#include#include#includeusing namespace std;

int main(){

srand((unsigned)time(null));

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

unsigned int r=rand();

cout<

C 隨機函式 rand srand

rand rand 是用線性同餘法實現的,因此不是真的隨機數,但因其週期特別長,故在一定 的範圍裡可看成是隨機的。rand 返回一隨機數值的範圍在0至rand max 間。rand max的範圍最少是在32767之間 int 用 unsigned int 雙位元組是65535,四位元組是429496...

C 隨機函式rand srand

標頭檔案 include int rand 產生的隨機數範圍是0 65536,型別為unsigned int。rand 函式不接受引數,預設以1為種子 即起始值 srand 函式用來初始化隨機數發生器,void srand unsigned int seed 引數 seed是整數,seed相同,ra...

隨機數函式rand srand

1.rand 功能 隨機數發生器 用法 int rand void 所在標頭檔案 stdlib.h rand 的內部實現是用線性同餘法做的,它不是真的隨機數,因其週期特別長,故在一定的範圍裡可看成是隨機的。include include include using namespace std int...