VS2010中srand和rand產生隨機數的用法

2021-08-30 08:30:11 字數 1496 閱讀 3417

1.vc和vs2010中srand()和rand()函式的區別    

在vc中rand()和srand()函式是包含在math.h標頭檔案中,在使用時需要新增#include "math.h"或者#include ,但是在vs2010中srand()和rand()是包含在stdlib.h中的,在使用時需要新增語句#include "stdlib.h"或者#include 。

2.vs2010中srand()和rand()函式的用法

vs2010中通常用srand()和rand()聯合使用來產生隨機數,用srand(unsigned int seed)來生成seed,然後通過rand()來產生隨機數。它們的原始定義都包含在「根目錄\visual studio 2010\vc\crt\src\rand.c"中。

(1)關於srand的討論 

srand(unsigned int seed)無返回值,但是有形參,通常形參有兩種形式,一種是常數,如srand(0),srand(1)等,另一種是嵌入函式,這時候通常會需要包含另外的標頭檔案,time.h等,如srand(time(null)),srand(rand()%5)等等。

srand函式放在迴圈內時用rand()產生隨機數時每次產生的隨機數都一樣,執行多少遍都一樣。**如下:

#include "stdafx.h"

#include "stdlib.h"

//#include "time.h"

#define size 10

int _tmain(int argc, _tchar* argv)

printf("\n");

}return 0;

}

由此可見迴圈內使用srand時rand()每次產生的隨機數都一樣。

上述**中將srand(0)放到外層迴圈外,這時rand()產生的隨機數每次都不一樣。

改進後的執行結果為:

由此可見迴圈外使用srand時rand()每次產生的隨機數都不一樣。

如果要了解srand(0)和srand(1)的區別可參閱參考**[2]。

(2)關於rand()的討論

rand()用來從srand()偽隨機數結果中產生隨機數,沒有形參,有返回值,返回值為處於0~32767之間的隨機數,通常我們用取餘」%「的方法來得到我們想要的區間內的隨機數,比如rand()%10即可得到0~9之間的任意隨機數。

如果我們想要獲得1~10之間的隨機數的時候怎麼辦呢?這時候加一就可以了,即1+rand()%10。

由此得到一般規律,我們想要得到0~(n-1)之間的隨機數時我們可以採用如下步驟:

方法一:直接用rand()%n;

方法二:先定義#define maxsize  32767,然後採用語句"(int)(n*rand()/(maxsize+1.0));",這裡之所以加上1.0是為了使除法得到的結果是浮點型。

如果需要得到1~n之間的隨機數秩序在上述表示式加一即可,即1+rand()%n或者1+(int)(n*rand()/(maxsize+1.0))。

[1][2]

vs2010中處理char和CString

編寫個網路聊天的程式,sendto和recvfrom函式中使用char,使用sprintf格式化呢又提示警告,要用format函式,使用cstring物件呢經過lparam引數傳遞後又不好轉換,接收端接收到的全是亂碼,不知道該如何處理了,如下 這是接收端的 dword winapi csx15 ch...

vs2010安裝和使用

vs2010是之前我跟老師做 專案時安裝的,這次軟體工程作業我就用它了,安裝過程中的截圖就不存在了,我就詳細說說它的使用吧。下面讓我們用vc2010來做乙個控制台的helloworld程式吧。vs2010裡面不能單獨編譯乙個.cpp或者乙個.c檔案,這些檔案必須依賴於某乙個專案,因此我們必須建立乙個...

Matlab R2010a和vs 2010混合程式設計

matlabr2010a與vs2010 c 混合程式設計成功,在vs2010 c 中能夠呼叫matlab的m函式,進行計算,得到正確結果,呼叫matlab中m函式轉化成的dll檔案 一 matlab編譯環境的設定 mex setup pleasechoose your compiler for bu...