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

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

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

前言

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

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

1.rand函數(shù)

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

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

那我們可以測試?下rand函數(shù),這里多調(diào)用幾次,產(chǎn)生5個隨機數(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;
}

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

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

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

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

2.srand函數(shù)

C語言中又提供了?個函數(shù)叫 srand,用來初始化隨機數(shù)的生成器的,srand的原型如下:

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

3.time函數(shù)

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

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

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

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

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
	//使?time函數(shù)的返回值設(shè)置種?
	//因為srand的參數(shù)是unsigned int類型,我們將time函數(shù)的返回值強制類型轉(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;
}

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

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

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

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

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

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

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

同理可得要生成100~200的隨機數(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ù)的范圍。

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

相關(guān)文章

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

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

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

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

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

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

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

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

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

    c++素數(shù)篩選法

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

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

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

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

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

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

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

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

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

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

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

最新評論