在UNIX操作系統和window的操作系統上,我們知道有一個函數rand,它就是用來產生隨機數的函數API接口,那么它的原理如何實現?
如果約定a1=f(seed),an+1=f(an),那么可以得到一個序列a1,a2,a3..an,那么要制作一個偽隨機函數rand,只需要讓它每調用一次就返回序列的下一個元素就行。其實就是相當于第1次調用rand返回a1,第2次返回a2,…,第n次返回an,這樣每次返回的數值都不一樣,也就是相當于隨機數了。但是其實不是真正的隨機數,真正的隨機數是使用物理現象產生的:比如擲錢幣、骰子、轉輪、使用電子元件的噪音、核裂變等等。這樣的隨機數發生器叫做物理性隨機數發生器,它們的缺點是技術要求比較高。那到底什么是隨機數呢?
隨機數:隨機數就是每次運行代碼的時候隨機產生的數,每次產生的數的值是無法確定的,返回 0 到 RANDMAX 之間的隨機整數值,不包含 RANDMAX 的值,RANDMAX 的范圍最少是在32767之間(int),即雙字節(16位數)。若用 unsigned int 雙字節是65535,四字節是4294967295的整數范圍。而且 0 到 RANDMAX 每個數字被選中的概率是相同的。
原理:產生隨機數的原理是根據一個值,一般稱為隨機種子,然后把這個種子作為參數,經過一系列的公式運算產生出一個值,這個值就是隨機數。
在 C 語言當中使用隨機數要用到 rand 函數和 srand 函數,
int rand():返回值為隨機值,參數為空,通過 rand 函數就會產生一個隨機數。
void srand(unsigned int seed):返回值為空, 就是設置隨機種子的,當我們不設置隨機種子的時候,默認設置的種子為 1,也就是srand(1)。
使用:
#include<stdlib.h>//得引入 stdlib.h 這個頭文件int main(){ int rand_num = rand(); printf("rand_num = %d/n", rand_num); return 0;}
每次運行的結果都一樣,這是為什么呢?上面已經說了,隨機數產生的是有一個隨機種子作為參數,然后返回一個值,而且默認的隨機種子為1,所以每次產生的隨機數都一樣。
如果我們修改一下隨機種子,會發現隨機數和原來的不一樣了,但是每次運行的結果還是一樣:
#include<stdlib.h>//得引入 stdlib.h 這個頭文件int main(){ srand(3); int rand_num = rand(); printf("rand_num = %d/n", rand_num); srand(5); rand_num = rand(); printf("rand_num = %d/n", rand_num); return 0;}
兩次的輸出結果不一樣,我的輸出結果如下:
rand_num = 50421rand_num = 847425747
但是我們程序肯定是寫好之后,不改動隨機種子,然后每次產生不同的值才對啊,那我們來如何做呢?既然產生的隨機值與種子有關,只要每次的隨機種子不一樣,那么產生的隨機值也不一樣,我們就可以把時間作為隨機種子,因為每次運行時,時間都不一樣,因此產生的隨機值也不一樣,因此我們可以這樣:
#include<time.h> //使用 time 函數必須引入 time.h 頭文件#include<stdlib.h>int main(){ srand((int)time(0)); int rand_num = rand(); printf("rand_num = %d/n", rand_num); return 0;}
這樣的話,每次輸出結果都不一樣了。
通過上面的方法,我們可以獲取不同的隨機值了,但是我們一般會獲取一定范圍內的隨機值,比如返回 0~100 之間的返回值,比如模擬骰子,隨機返回 1~6 的值。那么我們該如何做呢?
我們要返回 0~6 的隨機值,只需在上面返回隨機值的地方對 7 取余即可:
int rand_num = rand() % 7;printf("rand_num = %d/n", rand_num);
所以我們如果要返回 0~a 的隨機值,只要對 a + 1 取余即可,所以有下面的公式:
int rand_num = rand() % (a + 1);//返回 0 ~ a 的隨機值
如果我們要返回 a ~ b 的隨機值,公式是什么呢?因為隨機數取余法只能返回 0 到某個數的隨機值,所以 a ~ b 的隨機值,我們可以先返回 0 ~ (b 亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩女在线观看| 国产精品v日韩精品| 久久91亚洲精品中文字幕奶水| 欧美激情一区二区久久久| 亚洲天堂网站在线观看视频| 91在线观看欧美日韩| 亚洲国产高清自拍| 精品国产一区二区三区久久狼黑人| 久久视频在线免费观看| 欧美一区二区影院| 欧美裸体xxxxx| 亚洲激情在线观看| 日韩美女福利视频| 欧美疯狂做受xxxx高潮| 成人激情视频网| 日韩在线小视频| 欧美另类老肥妇| 国产精品91久久久久久| 国产精品青青在线观看爽香蕉| 日韩电影免费观看在线观看| 国产精品爽黄69| 亚洲成人网av| 91精品国产免费久久久久久| 伊人久久大香线蕉av一区二区| 日韩美女视频免费在线观看| 亚洲第一精品电影| 国产精品揄拍一区二区| 91精品久久久久久| 欧美自拍大量在线观看| 国产玖玖精品视频| 欧美性色xo影院| 日韩av在线不卡| 黄色成人在线播放| 日本久久91av| 日本国产一区二区三区| 综合久久五月天| 国产精品老牛影院在线观看| 久久琪琪电影院| 色综久久综合桃花网| 国内成人精品视频| 日韩国产精品一区| 欧美专区在线视频| 国产精品久久久久久久久男| 精品在线小视频| 亚洲视频在线观看免费| 亚洲视频一区二区三区| 国产免费久久av| 超薄丝袜一区二区| 久久不射热爱视频精品| 2019亚洲男人天堂| 亚洲午夜未删减在线观看| 精品福利在线看| 国产剧情久久久久久| 91精品视频在线看| 欧美国产日本在线| 欧美在线视频导航| 亚洲一区二区三区四区视频| 热久久免费视频精品| 欧美一区深夜视频| 成人在线激情视频| 在线观看欧美日韩国产| 91亚洲精品视频| 精品视频在线播放色网色视频| 久久久久久久久久久91| 国产精品久久9| 亚洲精品视频免费在线观看| 精品国偷自产在线| 亚洲第一区第二区| 亚洲国产精彩中文乱码av| 久久精品成人欧美大片古装| 夜夜嗨av色综合久久久综合网| 国产美女精彩久久| 精品久久久久久| 伊人久久综合97精品| 国产激情视频一区| 欧美最猛性xxxxx免费| 欧洲成人免费视频| 欧美一级高清免费播放| 亚洲精品二三区| 疯狂做受xxxx高潮欧美日本| 亚洲精品乱码久久久久久按摩观| 欧美午夜久久久| 成人午夜黄色影院| 国产精品爽爽爽爽爽爽在线观看| 亚洲精品福利视频| 国产精品吴梦梦| 久久精品久久久久久国产 免费| 国产91精品黑色丝袜高跟鞋| 欧美一级片在线播放| 国产成人综合精品| 成人在线视频福利| 国产精品欧美一区二区| 亚洲自拍另类欧美丝袜| 精品久久久久久| 色综合久久精品亚洲国产| 日韩中文在线中文网在线观看| www.久久撸.com| 中文字幕精品—区二区| 日韩av电影在线播放| 97国产精品视频人人做人人爱| 亚洲精品电影在线| 欧美午夜久久久| 日韩欧美极品在线观看| 成人中文字幕在线观看| 国产精品99久久久久久久久| 欧美裸体xxxx| 日韩在线观看免费高清完整版| 国产成人精品久久二区二区| 中文字幕日韩av综合精品| 亚洲永久在线观看| 在线精品高清中文字幕| 日韩精品在线视频美女| 成人a免费视频| 日韩精品中文字幕在线| 欧美日韩国产一区二区| 国产精品第3页| 国产精品成人观看视频国产奇米| 欧美视频专区一二在线观看| 亚洲黄在线观看| 久久91亚洲人成电影网站| 亚洲色图国产精品| 成人激情视频在线观看| 国产精品xxx视频| 视频一区视频二区国产精品| 欧美日韩视频免费播放| 国产精品自拍视频| 久久国产精品99国产精| 国产手机视频精品| 亚洲精品有码在线| 日韩中文字幕久久| 91视频免费网站| 91精品中国老女人| 久久久久久久网站| 黑人巨大精品欧美一区免费视频| 欧美专区国产专区| 亚洲xxxx妇黄裸体| 日韩成人高清在线| 日韩av理论片| 日韩av在线播放资源| 色黄久久久久久| 中文字幕日韩综合av| 成人精品视频在线| 少妇高潮 亚洲精品| 欧美大秀在线观看| 91av视频导航| 久久精品国产电影| 亚洲精品久久久久久久久| 在线精品播放av| 国产精品一区二区三区毛片淫片| 韩剧1988免费观看全集| 久久影院模特热| 日韩国产欧美区| 91探花福利精品国产自产在线| 98精品国产高清在线xxxx天堂| 午夜精品一区二区三区视频免费看| 中文字幕亚洲一区二区三区| 国产欧美日韩中文字幕在线| 国产在线视频2019最新视频| 爽爽爽爽爽爽爽成人免费观看| 亚洲丝袜av一区| 亚洲男人的天堂在线播放| 欧美美女18p| 97视频在线观看亚洲| 日韩av一区二区在线观看|