国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

C語(yǔ)言隨機(jī)數(shù)的產(chǎn)生(rand、srand、time函數(shù)細(xì)節(jié)講解)

這篇具有很好參考價(jià)值的文章主要介紹了C語(yǔ)言隨機(jī)數(shù)的產(chǎn)生(rand、srand、time函數(shù)細(xì)節(jié)講解)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

隨機(jī)數(shù)生成代碼:

先上代碼,再詳細(xì)解釋?zhuān)?/p>

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main()
{
	srand((unsigned int)time(NULL));
	//隨機(jī)數(shù)生成器
	int ret = rand()%100+1;
	//隨機(jī)數(shù)賦值,和范圍限定
	printf("%d\n", ret);
	return 0;
}

rand函數(shù):

  • 我們先來(lái)查詢(xún)下rand函數(shù)
  • 網(wǎng)站舊版我放在這兒,可以查詢(xún)庫(kù)函數(shù)等https://legacy.cplusplus.com/reference/cstring/strcat/

rand頭文件,c語(yǔ)言,算法,開(kāi)發(fā)語(yǔ)言,c++


    1. rand函數(shù)的頭文件是<stdlib.h>。
    1. rand函數(shù)無(wú)需傳參數(shù),返回類(lèi)型是一個(gè)偽隨機(jī)的整數(shù)范圍是0到RAND_MAX。那這個(gè)RAND_MAX所對(duì)應(yīng)的值是多少呢?我們同樣來(lái)查詢(xún)下RAND_MAX。

rand頭文件,c語(yǔ)言,算法,開(kāi)發(fā)語(yǔ)言,c++

這里就明確表明了他對(duì)應(yīng)的整數(shù)值:32767.

    1. rand函數(shù)范圍限定:原本rand函數(shù)范圍0~32767范圍很廣,我們往往不需要這么大,所以就需要規(guī)劃rand函數(shù)返回值在我們需要的范圍內(nèi),通過(guò)下面的方式來(lái):

rand頭文件,c語(yǔ)言,算法,開(kāi)發(fā)語(yǔ)言,c++

    1. 從rand函數(shù)介紹第二段我們了解到,這個(gè)數(shù)字是由一個(gè)算法生成的,該算法每次調(diào)用時(shí)都返回一個(gè)明顯不相關(guān)的數(shù)字序列。該算法使用種子來(lái)生成序列,該序列應(yīng)該使用函數(shù)srand初始化為一些獨(dú)特的值。
  • srand函數(shù)(提供)------>算法數(shù)列(決定)----->rand函數(shù)返回值

偽隨機(jī)數(shù):
rand函數(shù)返回的是偽隨機(jī)數(shù),也就是說(shuō)他返回的并不是真正的隨機(jī)數(shù),而是一個(gè)在那個(gè)范圍內(nèi)的一個(gè)固定整數(shù)。比如:我用VS2019編譯打印出來(lái)固定是41;

  • 這個(gè)時(shí)候我們就要用到一個(gè)隨機(jī)的種子,來(lái)隨機(jī)算法數(shù)列也就完成了隨機(jī)rand函數(shù)返回值。

?????什么呆呆你在開(kāi)玩笑吧,我要rand產(chǎn)生一個(gè)隨機(jī)數(shù),現(xiàn)在你又要一個(gè)隨機(jī)數(shù)種子來(lái)完成,這不是開(kāi)玩笑嗎?
?。?!??是的,沒(méi)有在開(kāi)玩笑,還記得這句話(huà)嗎?rand函數(shù)無(wú)需傳參數(shù) 這里也就表示了無(wú)法輸入值進(jìn)行更改,而是由本身函數(shù)算法決定返回值所以我們就引入可串參數(shù)改變的srand函數(shù);

srand函數(shù):

  • 我們查詢(xún)下srand函數(shù).

rand頭文件,c語(yǔ)言,算法,開(kāi)發(fā)語(yǔ)言,c++

傳入的參數(shù)是無(wú)符號(hào)整形種子,所以在上述隨機(jī)值代碼中強(qiáng)制類(lèi)型轉(zhuǎn)換了time函數(shù)返回值
這里每句話(huà)都是關(guān)鍵,所以我提供一張翻譯的圖
rand頭文件,c語(yǔ)言,算法,開(kāi)發(fā)語(yǔ)言,c++

從結(jié)合上述內(nèi)容我們已經(jīng)完全就清楚了,我們就徹底清楚原因了。
這里我們就不過(guò)多贅述,就主要看下最后一段

為了生成類(lèi)似隨機(jī)的數(shù)字,srand通常被初始化為一些獨(dú)特的運(yùn)行時(shí)值,比如函數(shù)time返回的值(在頭中聲明)。這對(duì)于大多數(shù)瑣碎的隨機(jī)化需求來(lái)說(shuō)是足夠獨(dú)特的。

這里提到了函數(shù)time函數(shù)返回值,所以又要引入time函數(shù);

time函數(shù):

  • 老規(guī)矩,我們先來(lái)查詢(xún)下time函數(shù).

rand頭文件,c語(yǔ)言,算法,開(kāi)發(fā)語(yǔ)言,c++

  • 這里我們就只需要了解time函數(shù)頭文件<time.h>,返回類(lèi)型是time_t(也就是long int類(lèi)型),也就是返回時(shí)間戳,傳入?yún)?shù)為時(shí)間指針,還有個(gè)時(shí)間戳的概念:說(shuō)我們當(dāng)前時(shí)間到1970年1月1日00:00小時(shí)以來(lái)的秒數(shù)(即當(dāng)前unix時(shí)間戳)。

time函數(shù)補(bǔ)充:

  • 算了,我還是多講一些time函數(shù)吧,這里與隨機(jī)值無(wú)關(guān):
time_t time( time_t *timer );

time_t類(lèi)型討論

time_t是(long還是long long的討論),能確定的是time_t始終占8個(gè)字節(jié)
rand頭文件,c語(yǔ)言,算法,開(kāi)發(fā)語(yǔ)言,c++
從這位大佬總結(jié)的圖中,我們就很清楚的認(rèn)識(shí)到,討論應(yīng)當(dāng)先分平臺(tái),在分多少位;

  • 總結(jié):若在Windows平臺(tái)全是long long,Linux平臺(tái)32位為long,64位為long long。
    這里就要注意項(xiàng)目轉(zhuǎn)平臺(tái)時(shí)要調(diào)整。

time_t指針傳入的討論:

返回值如上面所說(shuō),返回時(shí)間戳(當(dāng)前時(shí)間到1970年1月1日00:00小時(shí)以來(lái)的秒數(shù));

    1. 當(dāng)傳入的time_t指針為空指針(NULL)時(shí),不會(huì)將返回值賦值到time_t指針指向的空間里;
    1. 當(dāng)傳入的time_t指針不為空指針(NULL)時(shí),會(huì)將返回值賦值到time_t指針指向的空間里;(不好演示證明)

代碼演示證明:

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main()

{
	time_t a = 1;
	srand((unsigned int)time(&a));
	printf("%lld\n", a);

	time_t b = 2;
	srand((unsigned int)time(&b));
	printf("%lld\n", b);
	
	srand((unsigned int)time(NULL));

	return 0;
}

rand頭文件,c語(yǔ)言,算法,開(kāi)發(fā)語(yǔ)言,c++
總結(jié):文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-718432.html

  • 這個(gè)代碼的實(shí)現(xiàn)為我們后面的許多項(xiàng)目設(shè)計(jì)提供了一定的基礎(chǔ);
  • 要注意頭文件,參數(shù)的傳入類(lèi)型,返回值類(lèi)型;
  • time函數(shù)(隨機(jī)種子提供)------>srand函數(shù)(提供)------>算法數(shù)列(決定)------>rand函數(shù)返回值------>限制所需范圍

到了這里,關(guān)于C語(yǔ)言隨機(jī)數(shù)的產(chǎn)生(rand、srand、time函數(shù)細(xì)節(jié)講解)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶(hù)投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 【LINUX相關(guān)】生成隨機(jī)數(shù)(srand、/dev/random 和 /dev/urandom )

    【LINUX相關(guān)】生成隨機(jī)數(shù)(srand、/dev/random 和 /dev/urandom )

    在一個(gè)循環(huán)中,生成多組隨機(jī)值,發(fā)現(xiàn)最終的結(jié)果都一樣,結(jié)果是調(diào)用的函數(shù)如下,在函數(shù)中設(shè)置了隨機(jī)種子,且是以秒為單位,那么在一秒類(lèi),由于都是用一個(gè)種子,srand又是偽隨機(jī),所以最終生成的都是同一組隨機(jī)字符。 2.1 修改種子 (1)將 srand(time(NULL)); 放到循環(huán)外面

    2024年02月12日
    瀏覽(22)
  • Qt產(chǎn)生隨機(jī)數(shù)

    提問(wèn): 有沒(méi)有小伙伴遇到這么一種情況,使用rand()和qrand()函數(shù)生成的隨機(jī)數(shù)好像不是那么隨機(jī),每次都一樣。那這種就叫做“偽隨機(jī)”,因?yàn)闆](méi)有種隨機(jī)數(shù)種子,所以系統(tǒng)默認(rèn)隨機(jī)數(shù)種子是固定值。 在Qt項(xiàng)目中呢,生成隨機(jī)數(shù)有兩個(gè)步驟: 1.使用qsrand()種隨機(jī)數(shù)種子 2.調(diào)用

    2024年02月11日
    瀏覽(24)
  • STM32產(chǎn)生隨機(jī)數(shù)

    STM32有2種方式產(chǎn)生隨機(jī)數(shù):硬件方式和軟件方式 其中軟件方式可以通過(guò)C語(yǔ)言標(biāo)準(zhǔn)函數(shù) stdlib.h 的 srand() 和 rand() 來(lái)獲取隨機(jī)數(shù),使用步驟為: 使用 srand(seed) 來(lái)設(shè)置隨機(jī)數(shù)種子。我們知道種子不改變的時(shí)候,產(chǎn)生多個(gè)隨機(jī)數(shù)的時(shí)候,第一次產(chǎn)生的數(shù)字是隨機(jī)的,后面產(chǎn)生的都與

    2024年02月12日
    瀏覽(22)
  • STM32 產(chǎn)生隨機(jī)數(shù)方式

    STM32 產(chǎn)生隨機(jī)數(shù)方式

    C語(yǔ)言的stdlib.h庫(kù)里的srand(unsigned seed)和rand(void)函數(shù),可以配合產(chǎn)生偽隨機(jī)數(shù)。其中srand(seed)產(chǎn)生算法種子,再由rand()通過(guò)算法產(chǎn)生隨機(jī)數(shù),產(chǎn)生的隨機(jī)數(shù)在宏定義RAND_MAX范圍內(nèi)。如果seed不變,則產(chǎn)生的隨機(jī)數(shù)不變。 這里介紹STM32 HAL庫(kù)環(huán)境的隨機(jī)數(shù)產(chǎn)生代碼,采用STM32CUBEIDE開(kāi)發(fā)

    2024年02月09日
    瀏覽(22)
  • 在MATLAB產(chǎn)生正態(tài)(Gauss)分布隨機(jī)數(shù)

    在MATLAB產(chǎn)生正態(tài)(Gauss)分布隨機(jī)數(shù)

    在 MATLAB 中內(nèi)置了有產(chǎn)生標(biāo)準(zhǔn)正態(tài)(Gauss)分布的隨機(jī)數(shù)函數(shù),使用方法如下: 其中 m、n 為產(chǎn)生矩陣的行數(shù)和列數(shù), p 為產(chǎn)生矩陣的個(gè)數(shù),產(chǎn)生的矩陣中的每個(gè)元素均為服從 N ( 0 , 1 ) N(0, 1) N ( 0 , 1 ) 的標(biāo)準(zhǔn)正態(tài)分布的元素。 使用如下命令產(chǎn)生一個(gè) 100x1 的服從 標(biāo)準(zhǔn)正態(tài)(Gauss)分布

    2024年02月02日
    瀏覽(19)
  • 基于FPGA的LFSR16位偽隨機(jī)數(shù)產(chǎn)生算法實(shí)現(xiàn),可以配置不同的隨機(jī)數(shù)種子和改生成多項(xiàng)式,包含testbench

    基于FPGA的LFSR16位偽隨機(jī)數(shù)產(chǎn)生算法實(shí)現(xiàn),可以配置不同的隨機(jī)數(shù)種子和改生成多項(xiàng)式,包含testbench

    目錄 1.算法仿真效果 2.算法涉及理論知識(shí)概要 3.Verilog核心程序 4.完整算法代碼文件 vivado2019.2仿真結(jié)果如下: ? ? ? ? ? LFSR(線(xiàn)性反饋移位寄存器)提供了一種在微控制器上快速生成非序列數(shù)字列表的簡(jiǎn)單方法。生成偽隨機(jī)數(shù)只需要右移操作和 XOR 操作。LFSR 完全由其多項(xiàng)式

    2024年02月11日
    瀏覽(25)
  • Google Earth Engine(GEE)——土地分類(lèi)精度分析randomColumn產(chǎn)生偽隨機(jī)數(shù)然后進(jìn)行混淆矩陣計(jì)算

    Google Earth Engine(GEE)——土地分類(lèi)精度分析randomColumn產(chǎn)生偽隨機(jī)數(shù)然后進(jìn)行混淆矩陣計(jì)算

    我們?cè)谶M(jìn)行土地分類(lèi)時(shí),需要進(jìn)行精度驗(yàn)證,但是之前我們要進(jìn)行樣本點(diǎn)的隨機(jī)分類(lèi),也就是分出一部分作為訓(xùn)練樣本另外一部分作為,這是我們要想產(chǎn)生隨機(jī)種子賦值給我們所選定的訓(xùn)練樣本,這樣我們就可以隨機(jī)將樣本進(jìn)行分成訓(xùn)練樣本和驗(yàn)證樣本,而我們使用的函數(shù)

    2024年02月09日
    瀏覽(17)
  • mysql隨機(jī)數(shù)函數(shù)

    declare@iint select@i=count(*)fromA while@i0 begin UpdateAsetB=ceiling(rand()*150+50)whereid=@i set@i=@i-1 id是表A里的自增長(zhǎng)列,不清楚你的表里有沒(méi)有,若是沒(méi)有的話(huà),可以自己造個(gè)臨時(shí)表,插入數(shù)據(jù)。 本回答由提問(wèn)者推薦 UUID是一個(gè)由5位十六進(jìn)制數(shù)的字符串表示的128比特?cái)?shù)字,其格式為aaaaaaaa-

    2023年04月11日
    瀏覽(34)
  • 生成隨機(jī)數(shù)——C語(yǔ)言

    在C語(yǔ)言中,可以使用標(biāo)準(zhǔn)庫(kù)函數(shù) rand() 來(lái)生成隨機(jī)數(shù)。需要注意的是, rand() 函數(shù)生成的是偽隨機(jī)數(shù),具體的隨機(jī)序列取決于種子(seed)的值。 下面是一個(gè)簡(jiǎn)單的示例代碼,展示如何在C語(yǔ)言中生成隨機(jī)數(shù): 在上述代碼中,首先包含了 stdio.h 、 stdlib.h 和 time.h 頭文件來(lái)使用相

    2024年02月12日
    瀏覽(31)
  • 明明的隨機(jī)數(shù)【C語(yǔ)言】

    明明生成了N個(gè)1到500之間的隨機(jī)整數(shù)。請(qǐng)你刪去其中重復(fù)的數(shù)字,即相同的數(shù)字只保留一個(gè),把其余相同的數(shù)去掉,然后再把這些數(shù)從小到大排序,按照排好的順序輸出。 數(shù)據(jù)范圍: 1≤ n ≤1000 ,輸入的數(shù)字大小滿(mǎn)足 1≤ val ≤500 第一行先輸入隨機(jī)整數(shù)的個(gè)數(shù) N 。 接下來(lái)的

    2024年01月16日
    瀏覽(20)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包