在實際編程中,我們經常需要生成隨機數。在c語言中我們通常使用rand方法生成隨機數,在調用rand前需要調用srand初始化隨機數種子。
公司主營業務:網站制作、網站建設、移動網站開發等業務。幫助企業客戶真正實現互聯網宣傳,提高企業的競爭能力。創新互聯是一支青春激揚、勤奮敬業、活力青春激揚、勤奮敬業、活力澎湃、和諧高效的團隊。公司秉承以“開放、自由、嚴謹、自律”為核心的企業文化,感謝他們對我們的高要求,感謝他們從不同領域給我們帶來的挑戰,讓我們激情的團隊有機會用頭腦與智慧不斷的給客戶帶來驚喜。創新互聯推出大觀免費做網站回饋大家。
電腦:華為MateBook14
系統:Windows10
軟件:notepad++等編輯器、gcc編譯器1.0
1、使用rand函數生成隨機數,rand隨機生成一個位于0 ~ RAND_MAX之間的整數。如下圖中,我們直接使用rand方法生成10個隨機數。
2、程序運行后生成了隨機數,但直接使用rand的問題在于,在下次程序調用時,生成的隨機數與上次一致。所以,rand函數雖然生成隨機數,但可以說是一個偽隨機。因為每次調用時,生成數字順序都是固定的。
3、為了在每次調用時生成不同的隨機數,使用srand函數初始化隨機數種子。只要隨機數種子變化了,那么生成的隨機數就會改變。通常,srand使用當前時間作為種子。
4、但使用時間作為隨機數種子是否安全呢?我們目前程序執行的速度都太快了,一秒鐘對于計算機來說太漫長了。我們將生成隨機數的操作定義為函數,然后調用函數兩次,看生成的隨機數仍然時一樣。
5、優化函數也比較簡單,在使用時間的基礎上,我們還加上一個定增序號。這樣能保證就算同一秒鐘內多次調用,隨機數的種子都是不一樣的。
6、通常,我們需要獲取一定范圍內的隨機數。所以,在生成隨機數之后我們使用模運算獲取對應范圍內的數據。如生成0到100內的隨機數。
rand()函數 返回值是產生一個隨機數,這個返回值雖然是隨機數,但是可能會發現,每回產生的都一樣,比如:
#include iostream
using namespace std;
void main()
{
for(int i=0;i3;i++){
coutrand()endl;
}
}
運行程序后發現,產生的隨機數,雖然每次運行程序時是隨機數,但是,后來再運行程序,發現與上幾次結果一樣。
這是因為,隨機數的起始值都一樣。
為了產生真正的隨機數,就應該設置隨機數的起始值,這個要利用srand()函數。
將上面程序改為:
#include iostream
using namespace std;
void main()
{
cout"請輸入隨機數的起始值"endl;
int num;
cinnum;
srand(num);
for(int i=0;i3;i++){
coutrand()endl;
}
}
運行程序 就會發現 輸入的起始值不同,產生的隨機數就不同。
當然 也可以產生時間隨機數,這個要用到c語言time.h中的程序,這個可以供你自己思考,自己解決問題,樂趣更多呢~呵呵~
啰嗦這么多 希望對您有所幫助!
rand()
rand()函數用來產生隨機數,但是,rand()的內部實現是用線性同余法實現的,是偽隨機數,由于周期較長,因此在一定范圍內可以看成是隨機的。
rand()會返回一個范圍在0到RAND_MAX(至少是32767)之間的偽隨機數(整數)。
在調用rand()函數之前,可以使用srand()函數設置隨機數種子,如果沒有設置隨機數種子,rand()函數在調用時,自動設計隨機數種子為1。隨機種子相同,每次產生的隨機數也會相同。
rand()函數需要的頭文件是:stdlib.h
rand()函數原型:int rand(void);
使用rand()函數產生1-100以內的隨機整數:int number1 = rand() % 100+1。
srand()
srand()函數需要的頭文件仍然是:stdlib.h
srand()函數原型:void srand (usigned int seed);
srand()用來設置rand()產生隨機數時的隨機數種子。參數seed是整數,通常可以利用time(0)或getpid(0)的返回值作為seed。
使用rand()和srand()產生1-100以內的隨機整數:
srand(time(0));
int number1 = rand() % 100+1。
當前名稱:c語言如何使用隨機數函數,c語言隨機產生函數
網站鏈接:http://vcdvsql.cn/article36/heodsg.html
成都網站建設公司_創新互聯,為您提供動態網站、外貿網站建設、服務器托管、云服務器、自適應網站、App開發
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯