欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C語(yǔ)言生成隨機(jī)數(shù)以及設(shè)置隨機(jī)數(shù)范圍的方法(超詳細(xì))

 更新時(shí)間:2025年02月12日 09:15:27   作者:歲月失語(yǔ)唯石能言  
文章介紹了C語(yǔ)言中生成隨機(jī)數(shù)的方法,包括使用`rand`和`srand`函數(shù),以及如何通過(guò)`time`函數(shù)設(shè)置隨機(jī)種子以確保每次運(yùn)行程序生成的隨機(jī)數(shù)序列不同,此外,還詳細(xì)講解了如何根據(jù)需要設(shè)置隨機(jī)數(shù)的范圍,需要的朋友可以參考下

前言

博主將會(huì)這篇文章介紹c語(yǔ)言如何生成隨機(jī)數(shù)以及設(shè)置隨機(jī)數(shù)的范圍。

一、隨機(jī)數(shù)的生成

1.rand函數(shù)

C語(yǔ)言提供了?個(gè)函數(shù)叫 rand,這函數(shù)是可以生成隨機(jī)數(shù)的,函數(shù)原型如下所示:

int rand (void);
  1. rand函數(shù)會(huì)返回?個(gè)偽隨機(jī)數(shù),這個(gè)隨機(jī)數(shù)的范圍是在0~RAND_MAX之間,這個(gè)RAND_MAX的大小是依賴(lài)編譯器上實(shí)現(xiàn)的,但是大部分編譯器上是32767。
  2. rand函數(shù)的使用需要包含?個(gè)頭文件是:stdlib.h

那我們可以測(cè)試?下rand函數(shù),這里多調(diào)用幾次,產(chǎn)生5個(gè)隨機(jī)數(shù):

#include <stdio.h>
#include <stdlib.h>
int main()
{
	printf("%d\n", rand());
	printf("%d\n", rand());
	printf("%d\n", rand());
	printf("%d\n", rand());
	printf("%d\n", rand());
	return 0;
}

我們可以多運(yùn)行幾次,可以發(fā)現(xiàn):

  1. 我們會(huì)發(fā)現(xiàn)一次運(yùn)行中產(chǎn)生的5個(gè)數(shù)字是相對(duì)隨機(jī)的,下一次運(yùn)行程序生成的結(jié)果會(huì)和上一次一模?樣。

  2. 如果再深入了解?下,我們就不難發(fā)現(xiàn),其實(shí)rand函數(shù)生成的隨機(jī)數(shù)是偽隨數(shù),偽隨機(jī)數(shù)不是真正的隨機(jī)數(shù),是通過(guò)某種算法生成的隨機(jī)數(shù)。真正的隨機(jī)數(shù)的是無(wú)法預(yù)測(cè)下?個(gè)值是多少的。而rand函數(shù)是對(duì)?個(gè)叫“種子”的基準(zhǔn)值進(jìn)行運(yùn)算生成的隨機(jī)數(shù)。

  3. 之所以前面每次運(yùn)行程序產(chǎn)生物的隨機(jī)數(shù)序列是?樣的,那是因?yàn)閞and函數(shù)生成隨機(jī)數(shù)的默認(rèn)種子是1。如果要生成不同的隨機(jī)數(shù),就要讓種子是變化的。

2.srand函數(shù)

C語(yǔ)言中又提供了?個(gè)函數(shù)叫 srand,用來(lái)初始化隨機(jī)數(shù)的生成器的,srand的原型如下:

void srand (unsigned int seed);
  1. 程序中在調(diào)用 rand 函數(shù)之前先調(diào)用 srand 函數(shù),通過(guò) srand 函數(shù)的參數(shù)seed來(lái)設(shè)置rand函數(shù)生成隨機(jī)數(shù)的時(shí)候的種子,只要種子在變化,每次生成的隨機(jī)數(shù)序列也就變化起來(lái)了。
  2. 那也就是說(shuō)給srand的種子是如果是隨機(jī)的,rand就能生成隨機(jī)數(shù);在生成隨機(jī)種子的時(shí)候又需要?個(gè)隨機(jī)數(shù),這就矛盾了。

3.time函數(shù)

在程序中我們?般是使用程序運(yùn)行的時(shí)間作為種子的,因?yàn)闀r(shí)間時(shí)刻在發(fā)生變化的。 在C語(yǔ)言中有?個(gè)函數(shù)叫 time ,就可以獲得這個(gè)時(shí)間,time函數(shù)原型如下:

time_t time (time_t* timer);
  1. time
    函數(shù)會(huì)返回當(dāng)前的日歷時(shí)間,其實(shí)返回的是1970年1月1日0時(shí)0分0秒到現(xiàn)在程序運(yùn)行時(shí)間之間的差值,單位是秒。返回的類(lèi)型是time_t類(lèi)型的,time_t 類(lèi)型本質(zhì)上其實(shí)就是32位或者64位的整型類(lèi)型。
  2. time函數(shù)的參數(shù) timer 如果是非NULL的指針的話,函數(shù)也會(huì)將這個(gè)返回的差值放在timer指向的內(nèi)存中帶回去。
  3. 如果timer 是NULL,就只返回這個(gè)時(shí)間的差值。time函數(shù)返回的這個(gè)時(shí)間差也被叫做:時(shí)間戳。
  4. time函數(shù)的時(shí)候需要包含頭文件:time.h
  5. 如果只是讓time函數(shù)返回時(shí)間戳,我們就可以這樣寫(xiě):
time(NULL);//調(diào)用time函數(shù)返回時(shí)間戳,這里沒(méi)有接收返回值

4.生成隨機(jī)數(shù)的代碼如下:

那樣我們就能把隨機(jī)數(shù)的代碼改寫(xiě)成下面這樣:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
	//使?time函數(shù)的返回值設(shè)置種?
	//因?yàn)閟rand的參數(shù)是unsigned int類(lèi)型,我們將time函數(shù)的返回值強(qiáng)制類(lèi)型轉(zhuǎn)換
	srand((unsigned int)time(NULL));
	printf("%d\n", rand());
	printf("%d\n", rand());
	printf("%d\n", rand());
	printf("%d\n", rand());
	printf("%d\n", rand());
	return 0;
}

多運(yùn)行幾次,會(huì)發(fā)現(xiàn)每次的結(jié)果就會(huì)有所差異。

而且srand函數(shù)是不需要頻繁調(diào)用的,一次運(yùn)行的程序中調(diào)用一次就夠了。

二、設(shè)置隨機(jī)數(shù)的范圍

如果我們要生成0~99之間的隨機(jī)數(shù),方法如下:

rand() %100;
余數(shù)的范圍是0~99

如果要生成1~100之間的隨機(jī)數(shù),方法如下:

rand()%100+1;
%100的余數(shù)是0~ 99,0~ 99的數(shù)字+1,范圍是1~100

同理可得要生成100~200的隨機(jī)數(shù),方法如下:

100 + rand()%(200-100+1)
余數(shù)的范圍是0~ 100,加100后就是100~200

綜上所述,生成a~b范圍的公式為:

a + rand()%(b-a+1)

總結(jié)

本文主要介紹了rand函數(shù)、srand函數(shù)、以及time函數(shù)和時(shí)間戳的概念和如何控制隨機(jī)數(shù)的范圍。

到此這篇關(guān)于C語(yǔ)言如何生成隨機(jī)數(shù)以及設(shè)置隨機(jī)數(shù)的范圍的方法(超詳細(xì))的文章就介紹到這了,更多相關(guān)C語(yǔ)言隨機(jī)數(shù)生成及范圍設(shè)置內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 關(guān)于在C程序中處理UTF-8文本的方法詳解

    關(guān)于在C程序中處理UTF-8文本的方法詳解

    這篇文章主要給大家介紹了關(guān)于在C程序中處理UTF-8文本的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起看看吧。
    2017-11-11
  • Qt項(xiàng)目實(shí)戰(zhàn)之實(shí)現(xiàn)多文本編輯器

    Qt項(xiàng)目實(shí)戰(zhàn)之實(shí)現(xiàn)多文本編輯器

    這篇文章主要為大家詳細(xì)介紹了如何利用Qt實(shí)現(xiàn)簡(jiǎn)易的多文本編輯器,文中的示例代碼講解詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴可以了解一下
    2023-03-03
  • C語(yǔ)言調(diào)用攝像頭生成avi視頻程序

    C語(yǔ)言調(diào)用攝像頭生成avi視頻程序

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言如何調(diào)用攝像頭生成avi視頻程序,文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,有需要的小伙伴可以參考一下
    2023-11-11
  • C++17中的折疊表達(dá)式實(shí)現(xiàn)

    C++17中的折疊表達(dá)式實(shí)現(xiàn)

    這篇文章主要介紹了C++17中的折疊表達(dá)式實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • c++素?cái)?shù)篩選法

    c++素?cái)?shù)篩選法

    本文講的是篩選法的C++實(shí)現(xiàn), 篩選法又稱(chēng)篩法,是求不超過(guò)自然數(shù)N(N&gt;1)的所有質(zhì)數(shù)的一種方法。據(jù)說(shuō)是古希臘的埃拉托斯特尼(Eratosthenes,約公元前274~194年)發(fā)明的,又稱(chēng)埃拉托斯特尼篩子。
    2017-05-05
  • c文件匯編后函數(shù)參數(shù)傳遞的不同之處

    c文件匯編后函數(shù)參數(shù)傳遞的不同之處

    在w7 32位系統(tǒng)下把c文件匯編后,確實(shí)與mac后的差異很大。可不僅僅是寄存器eax與rax的區(qū)別。我想說(shuō)的是函數(shù)參數(shù)傳遞的不同
    2013-11-11
  • opencv3/C++ 實(shí)現(xiàn)SURF特征檢測(cè)

    opencv3/C++ 實(shí)現(xiàn)SURF特征檢測(cè)

    今天小編就為大家分享一篇opencv3/C++ 實(shí)現(xiàn)SURF特征檢測(cè),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-12-12
  • OpenCV實(shí)現(xiàn)無(wú)縫克隆算法的步驟詳解

    OpenCV實(shí)現(xiàn)無(wú)縫克隆算法的步驟詳解

    借助無(wú)縫克隆算法,您可以從一張圖像中復(fù)制一個(gè)對(duì)象,然后將其粘貼到另一張圖像中,從而形成一個(gè)看起來(lái)無(wú)縫且自然的構(gòu)圖。本文將詳解OpenCV實(shí)現(xiàn)無(wú)縫克隆算法的步驟,需要的可以參考一下
    2022-06-06
  • linux安裝mysql和使用c語(yǔ)言操作數(shù)據(jù)庫(kù)的方法 c語(yǔ)言連接mysql

    linux安裝mysql和使用c語(yǔ)言操作數(shù)據(jù)庫(kù)的方法 c語(yǔ)言連接mysql

    Linux下使用C語(yǔ)言操作數(shù)據(jù)庫(kù)的方法,我將從MySQL環(huán)境的搭建,MySQL命令的使用到使用C接口來(lái)操作MySQL等過(guò)程詳細(xì)的介紹在Linux下管理MySQL數(shù)據(jù)庫(kù)的方法
    2014-01-01
  • C++鏈表實(shí)現(xiàn)通訊錄設(shè)計(jì)

    C++鏈表實(shí)現(xiàn)通訊錄設(shè)計(jì)

    這篇文章主要為大家詳細(xì)介紹了C++鏈表實(shí)現(xiàn)通訊錄設(shè)計(jì),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-06-06

最新評(píng)論