【C++】2.2 C++基本語法--隨機數函數的使用

(1)、C++標準函數庫提供一隨機數生成器rand(),函數說明:int rand(); 返回[0,MAX]之間均勻分佈的僞隨機整數,這裏的MAX與你所定義的數據類型有關,必須至少爲32767。rand()函數不接受參數,默認以1爲種 子(即起始值)。隨機數生成器老是以相同的種子開始,因此造成的僞隨機數列也相同,失去了隨機意義。(但這樣便於程序調試)
html

#include "stdafx.h"  //預編譯頭
#include <iostream>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
    int x = rand();
    cout << x << endl;
    getchar();
    return 0;
}

ios

能夠發現,每次運行程序,rand()獲得的序列值是不變的,都爲41。
ide

(2)、C++中另外一函數srand(),能夠指定不一樣的數(無符號整數變元)爲種子。可是若是種子相同,僞隨機數列也相同。一個辦法是讓用戶輸入種子,可是仍然不理想函數

(3)、比較理想的是用變化的數,好比時間來做爲隨機數生成器的種子。time的值每時每刻都不一樣。因此種子不一樣,產生的隨機數也不一樣。調用srand()函數後,rand()就會產生不一樣的隨機序列數。ui

#include "stdafx.h"  //預編譯頭
#include <time.h>
#include <iostream>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
    srand((unsigned)time(NULL));
    int x = rand();
    cout << x << endl;
    getchar();
    return 0;
}

url

能夠發現,每次運行程序,rand()獲得不一樣的序列值:1146,1185,...spa

對上段程序改寫:調試

#include "stdafx.h"  //預編譯頭
#include <time.h>
#include <iostream>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
    srand((unsigned)time(NULL));
    for (int i = 0; i < 10; i++){
        int x = rand() % 10;
        cout << x << endl;
    }
    getchar();
    return 0;
}
htm

運行結果:產生0-9之間的10個隨機整數。blog

wKioL1OC7RDwk9M1AAA3xJMhEkI778.jpg

若是要產生1~10之間的10個整數,則是這樣:int x = 1 + rand() % 10;

總結來講,能夠表示爲:a + rand() % n,其中的a是起始值,n是整數的範圍。 

a + rand() % (b-a+1) 就表示 a~b之間的一個隨機數,好比表示3~50之間的隨機整數,則是:int x = 3 + rand() % 48;包含3和50.

更多資料查閱:http://blog.163.com/wujiaxing009@126/blog/static/719883992011113011359154/

http://blog.sina.com.cn/s/blog_4c740ac00100d8wz.html

http://zhidao.baidu.com/link?url=8v-qSW4aU7MVQfzzVRfjbhK2g2gIrI-9-tfSeZruyTbviPeNyuXZDfKK3Q8ftQb9TF-SMYEIs-CciZx-uityta

http://zhidao.baidu.com/link?url=bWSjl5w2oXcoDJYbR3BR24KdONoHuFq425nvYE8REuKvOGVZQ7tUkLPDTNl_uLNVjbucwZf9hyqYM_kWghrID_

http://baike.baidu.com/subview/10368/12526578.htm?fr=aladdin&qq-pf-to=pcqq.c2c    

相關文章
相關標籤/搜索