最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

前言

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

一、隨機數的生成

1.rand函數

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

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

那我們可以測試?下rand函數,這里多調用幾次,產生5個隨機數:

#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ā)現:

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

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

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

2.srand函數

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

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

3.time函數

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

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

4.生成隨機數的代碼如下:

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

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
	//使?time函數的返回值設置種?
	//因為srand的參數是unsigned int類型,我們將time函數的返回值強制類型轉換
	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ā)現每次的結果就會有所差異。

而且srand函數是不需要頻繁調用的,一次運行的程序中調用一次就夠了。

二、設置隨機數的范圍

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

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

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

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

同理可得要生成100~200的隨機數,方法如下:

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

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

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

總結

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

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

相關文章

  • C++11 尾隨返回類型的實現示例

    C++11 尾隨返回類型的實現示例

    C++11?引入的尾隨返回類型是一個強大的特性,它為開發(fā)者提供了更加靈活和清晰的方式來聲明函數的返回類型,下面就來介紹一下尾隨返回類型,感興趣的可以了解一下
    2025-06-06
  • C語言 變量詳解及示例代碼

    C語言 變量詳解及示例代碼

    本文主要介紹C語言 變量,這里整理了C語言 變量的基礎知識,并附有示例代碼和詳細講解,希望能幫助學習C語言的朋友
    2016-08-08
  • C++結構體作為函數參數傳參的實例代碼

    C++結構體作為函數參數傳參的實例代碼

    這篇文章主要介紹了C++結構體作為函數參數傳參的實例代碼,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-12-12
  • 用C++面向對象的方式動態(tài)加載so的方法

    用C++面向對象的方式動態(tài)加載so的方法

    下面小編就為大家?guī)硪黄肅++面向對象的方式動態(tài)加載so的方法。小編覺得挺不錯的,現在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-12-12
  • c語言顏色代碼詳解

    c語言顏色代碼詳解

    在本篇文章里小編給大家整理的是關于c語言顏色代碼的知識點內容,需要的朋友們可以參考下。
    2020-02-02
  • C++獲取多瀏覽器上網歷史記錄示例代碼(支持獲取IE/Chrome/FireFox)

    C++獲取多瀏覽器上網歷史記錄示例代碼(支持獲取IE/Chrome/FireFox)

    這篇文章主要介紹了C++獲取多瀏覽器上網歷史記錄示例代碼,支持獲取IE, Chrome,FireFox等瀏覽器
    2013-11-11
  • C++實現簡單版通訊錄管理系統(tǒng)

    C++實現簡單版通訊錄管理系統(tǒng)

    這篇文章主要為大家詳細介紹了C++實現簡單版通訊錄管理系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-06-06
  • C++零基礎精通數據結構之帶頭雙向循環(huán)鏈表

    C++零基礎精通數據結構之帶頭雙向循環(huán)鏈表

    帶頭雙向循環(huán)鏈表:結構最復雜,一般用在單獨存儲數據。實際中使用的鏈表數據結構,都是帶頭雙向循環(huán)鏈表。另外這個結構雖然結構復雜,但是使用代碼實現以后會發(fā)現結構會帶來很多優(yōu)勢,實現反而簡單
    2022-03-03
  • C++回溯算法中組合的相關問題分析

    C++回溯算法中組合的相關問題分析

    回溯算法并不是什么高效的算法,因為本質上時去遍歷所有元素,找出所有可能,然后選出需要的答案。那為什么還要回溯法,簡單來說,不是所有的問題都能用什么巧妙的方法來解決的
    2023-03-03
  • VS2019配置OpenCV時找不到Microsoft.Cpp.x64.user的解決方法

    VS2019配置OpenCV時找不到Microsoft.Cpp.x64.user的解決方法

    這篇文章主要介紹了VS2019配置OpenCV時找不到Microsoft.Cpp.x64.user的解決方法,需要的朋友可以參考下
    2020-02-02

最新評論

阳朔县| 衡阳县| 安康市| 油尖旺区| 措勤县| 新晃| 峨眉山市| 来宾市| 海晏县| 卓尼县| 大姚县| 固安县| 休宁县| 阳西县| 桂平市| 保定市| 驻马店市| 自贡市| 富平县| 东安县| 乌苏市| 建瓯市| 罗甸县| 睢宁县| 隆子县| 巴青县| 措勤县| 托克逊县| 京山县| 泸西县| 松桃| 绥江县| 潢川县| 广水市| 黄陵县| 清镇市| 宝坻区| 长宁区| 大石桥市| 莱西市| 酒泉市|