c分布 的程序设计语言,#2020学习打卡##C程序设计语言# C语言中的随机数函数解析...
在計(jì)算機(jī)中并沒有一個(gè)真正的隨機(jī)數(shù)發(fā)生器,但是可以做到使產(chǎn)生的數(shù)字重復(fù)率很低,這樣看起來好象是真正的隨機(jī)數(shù),實(shí)現(xiàn)這一功能的程序叫偽隨機(jī)數(shù)發(fā)生器。
有關(guān)如何產(chǎn)生隨機(jī)數(shù)的理論有許多,如果要詳細(xì)地討論,需要厚厚的一本書的篇幅。不管用什么方法實(shí)現(xiàn)隨機(jī)數(shù)發(fā)生器,都必須給它提供一個(gè)名為“種子”的初始值。而且這個(gè)值最好是隨機(jī)的,或者至少這個(gè)值是偽隨機(jī)的?!胺N子”的值通常是用快速計(jì)數(shù)寄存器或移位寄存器來生成的。
在實(shí)際編程中,我們經(jīng)常會(huì)用到隨機(jī)數(shù)這個(gè)概念,其實(shí)也是一個(gè)偽隨機(jī)數(shù),實(shí)際上并不是一個(gè)真正的隨機(jī)數(shù),但是也足夠我們使用了。在C語言中,編寫一些關(guān)于游戲之類的程序時(shí)就需要用到隨機(jī)數(shù)了。同時(shí)C語言也提供了一個(gè)標(biāo)準(zhǔn)庫里面一個(gè)函數(shù)來產(chǎn)生隨機(jī)數(shù),而對(duì)于隨機(jī)數(shù)的產(chǎn)生是根據(jù)種子(根據(jù)一個(gè)數(shù)值按照某種公式計(jì)算的)來變化的,種子 與隨機(jī)數(shù)之間符合正態(tài)分布(高斯分布)。
生成隨機(jī)數(shù)
在C語言中,我們一般使用 頭文件中的 rand() 函數(shù)來生成隨機(jī)數(shù),它的用法為:int rand (void);【void是指不需要傳遞參數(shù)】
rand() 會(huì)隨機(jī)生成一個(gè)位于 0 ~ RAND_MAX 之間的整數(shù)。而對(duì)RAND_MAX 是 頭文件中的一個(gè)宏,它用來指明 rand() 所能返回的隨機(jī)數(shù)的最大值。C語言標(biāo)準(zhǔn)并沒有規(guī)定 RAND_MAX 的具體數(shù)值,只是規(guī)定它的值至少為 32767。/**
* 第35堂課示例:隨機(jī)數(shù)
* 鄭凱
* 2020年5月25日
* */
#include
#include
int main()
{
int rands;
rands = rand();
printf("rand number is %d\n", rands);
printf("rand number2 is %d\n", rand());
return 0;
}但是這個(gè)隨機(jī)數(shù)一旦編譯之后就固定了,并不能滿足我們的實(shí)際需求,前面提到了只是一個(gè)偽隨機(jī)數(shù),我們需要對(duì)產(chǎn)生隨機(jī)數(shù)的種子進(jìn)行不斷的重播,從而達(dá)到我們實(shí)際需求的隨機(jī)數(shù)效果。我們可以通過 srand() 函數(shù)來重新“播種”,這樣種子就會(huì)發(fā)生改變。
srand() 的用法為:void srand (unsigned int seed);
它需要一個(gè) unsigned int 類型的參數(shù)。在實(shí)際開發(fā)中,我們可以用時(shí)間作為參數(shù),只要每次播種的時(shí)間不同,那么生成的種子就不同,最終的隨機(jī)數(shù)也就不同,通常我們采用 頭文件中的 time() 函數(shù)即可得到當(dāng)前的時(shí)間【精準(zhǔn)到秒】srand((unsigned)time(NULL));/**
* 第35堂課示例:隨機(jī)數(shù)
* 鄭凱
* 2020年5月25日
* */
#include
#include
#include
int main()
{
int rands;
srand((unsigned)time(NULL));
rands = rand();
printf("rand number is %d\n", rands);
printf("rand number2 is %d\n", rand());
return 0;
}小提示:根據(jù)種子與隨機(jī)數(shù)的符合高斯分布的關(guān)系可知,生成的隨機(jī)數(shù)是逐漸增大或者逐漸減小!
生成一定范圍隨機(jī)數(shù)
在實(shí)際編程開發(fā)中,實(shí)際需求往往是一定范圍內(nèi)的隨機(jī)數(shù),對(duì)于產(chǎn)生一定范圍的隨機(jī)數(shù),就需要使用一定的技巧了,常用的方法是取模運(yùn)算,再加上一個(gè)加法運(yùn)算:int a = rand() % 10; //產(chǎn)生0~9的隨機(jī)數(shù),注意10會(huì)被整除
如果要規(guī)定上下限:int a = rand() % 51 + 100; //產(chǎn)生100~150的隨機(jī)數(shù)
分析:取模即取余,rand()%51+13,看成兩部分:rand()%51是產(chǎn)生 0~50 的隨機(jī)數(shù),后面+100保證 a 最小只能是 100,最大就是 50+100=150。/**
* 第35堂課示例:有區(qū)間的隨機(jī)數(shù)
* 例如:100~150之間的數(shù)字
* 鄭凱
* 2020年5月25日
* */
#include
#include
#include
int main()
{
int rands;
srand((unsigned)time(NULL));
rands = rand() % 51 + 100;
printf("rand number is %d\n", rands);
return 0;
}
根據(jù)種子與隨機(jī)數(shù)的符合高斯分布的關(guān)系可知,生成的隨機(jī)數(shù)是逐漸增大或者逐漸減小。
總結(jié)
以上是生活随笔為你收集整理的c分布 的程序设计语言,#2020学习打卡##C程序设计语言# C语言中的随机数函数解析...的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 建行龙卡热购卡是什么意思
- 下一篇: 第一章c语言基础知识答案,第一章 C语