两个吃奶一个添下面视频_人妻第一页香蕉网_欧美xxxx少妇_妺妺窝人体色www婷婷

  • 歡迎訪問(wèn)C語(yǔ)言網(wǎng)www.sztianhecheng.cn 比賽欄每月有獎(jiǎng)月賽!舉辦比賽聯(lián)系QQ:2045302297
  • 問(wèn)題反饋、粉絲交流 QQ群327452739 藍(lán)橋杯訓(xùn)練群:113766799 申請(qǐng)群時(shí)請(qǐng)備注排名里的昵稱
  • C語(yǔ)言研究中心 為您提供有圖、有料、解渴的C語(yǔ)言專題! 歡迎討論!

C語(yǔ)言中如何使用隨機(jī)數(shù)?

技術(shù)專題 CTO 20864次瀏覽 3個(gè)評(píng)論

隨機(jī)數(shù)的使用,是不少在學(xué)C語(yǔ)言過(guò)程中進(jìn)行一些小功能開(kāi)發(fā)的同學(xué)的一個(gè)技術(shù)問(wèn)題,今天我們?yōu)榇蠹抑v解如何在C語(yǔ)言中使用隨機(jī)數(shù)。

?

通常情況下,使用最多的方法的就是使用rand函數(shù)隨機(jī)生成偽隨機(jī)數(shù)來(lái)完成隨機(jī)數(shù)的生成工作。注意這里的偽隨機(jī)數(shù)并非是假的! 只不過(guò)是計(jì)算機(jī)按自己的一套理論生成,并不是”完全理想”狀態(tài)下的隨機(jī)數(shù),所以是可以接受的。

函數(shù)原型為:int? rand(void);?? ?需要包含stdlib頭文件,它可以生成一個(gè)0 ~RAND_MAX之間的數(shù)字,其中RAND_MAX是一個(gè)宏,VC6下筆者查看為0x7fff,建議大家親自上機(jī)實(shí)驗(yàn)!

這個(gè)時(shí)候你可能會(huì)遇到下面幾個(gè)問(wèn)題:

Q1:為什么每次生成的數(shù)字都一樣?

A1:rand函數(shù)每次生成的數(shù)字與所謂的”種子”有關(guān),使用rand函數(shù)前需要使用srand函數(shù)進(jìn)行種種子(請(qǐng)見(jiàn)后文)。如果沒(méi)有調(diào)用,系統(tǒng)會(huì)默認(rèn)給1,導(dǎo)致每次的隨機(jī)數(shù)都一樣。

Q2:為什么最大是0x7fff?

A1:這可能取決于編譯器環(huán)境,筆者這里是VC6,在rand的函數(shù)中看到定義的最大值為0x7fff,如下圖:

C語(yǔ)言中如何使用隨機(jī)數(shù)?

 

Q3:如果我想生成特定范圍內(nèi)的數(shù)字,該如何寫(xiě)呢?

A3:多多利用%求余運(yùn)算符即可。如:

生成10以內(nèi)的數(shù)字,可以參考rand()%10

生成1~10之間的數(shù)字,可以參考rand()%10+1

特定的,要生成a~b之間的數(shù)字,可以參考rand()%(b-a+1)+a

?

?

更多時(shí)候,我們希望每次運(yùn)行生成的數(shù)字都不相同,這個(gè)時(shí)候需要配合srand函數(shù)來(lái)解決這一問(wèn)題。關(guān)于具體原因,大家可以參考rand函數(shù)與srand函數(shù)的實(shí)現(xiàn)細(xì)節(jié)來(lái)加以理解,代碼如下:

 

 

/***
*rand.c - random number generator
*
*       Copyright (c) Microsoft Corporation. All rights reserved.
*
*Purpose:
*       defines rand(), srand() - random number generator
*
*******************************************************************************/
 
#include <cruntime.h>
#include <mtdll.h>
#include <stddef.h>
#include <stdlib.h>
 
/***
*void srand(seed) - seed the random number generator
*
*Purpose:
*       Seeds the random number generator with the int given.  Adapted from the
*       BASIC random number generator.
*
*Entry:
*       unsigned seed - seed to seed rand # generator with
*
*Exit:
*       None.
*
*Exceptions:
*
*******************************************************************************/
 
void __cdecl srand (
        unsigned int seed
        )
{
        _getptd()->_holdrand = (unsigned long)seed;
}
 
 
/***
*int rand() - returns a random number
*
*Purpose:
*       returns a pseudo-random number 0 through 32767.
*
*Entry:
*       None.
*
*Exit:
*       Returns a pseudo-random number 0 through 32767.
*
*Exceptions:
*
*******************************************************************************/
 
int __cdecl rand (
        void
        )
{
        _ptiddata ptd = _getptd();
 
        return( ((ptd->_holdrand = ptd->_holdrand * 214013L
            + 2531011L) >> 16) & 0x7fff );
}

 

那么srand函數(shù)如何使用呢,先看函數(shù)原型:

void ?srand(unsigned seed);? 只需要在rand函數(shù)使用之前,調(diào)用srand函數(shù)傳入一個(gè)種子即可。但事實(shí)上傳入一個(gè)數(shù),往往產(chǎn)生的隨時(shí)仍然固定不變。那么較為聰明的寫(xiě)法目前看來(lái)只有使用系統(tǒng)時(shí)間作為種子最為合適,所以這里srand的參數(shù)往往傳入time(NULL)參數(shù)作為獲取系統(tǒng)當(dāng)前時(shí)間作為種子,來(lái)產(chǎn)生不同的結(jié)果!

并注意類型一致,srand((unsigned)time(NULL)); 記得添加time.h的頭文件!

 

測(cè)試代碼如下:

 

 

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main()
{
	int r=0;
	int i=0;
	srand((unsigned)time(NULL));
	while(i++<10)
	{
		printf("r = %d\n",rand());
	}
	return 0;
}

 

大家可以自行上機(jī)測(cè)試,如發(fā)現(xiàn)新的問(wèn)題或有其他好玩的,歡迎告知我們!

C語(yǔ)言研究中心(www.sztianhecheng.cn)

C語(yǔ)言網(wǎng)提供「C語(yǔ)言、C++、算法競(jìng)賽」在線課程,全部由資深研發(fā)工程師或ACM金牌大佬親授課,更科學(xué)、全面的課程體系,以在線視頻+在線評(píng)測(cè)的學(xué)習(xí)模式學(xué)習(xí),學(xué)練同步,拒絕理論派,真正學(xué)會(huì)編程!還有獎(jiǎng)學(xué)金等增值福利等你!

C語(yǔ)言網(wǎng), 版權(quán)所有丨如未注明 , 均為原創(chuàng)丨本網(wǎng)站采用BY-NC-SA協(xié)議進(jìn)行授權(quán) , 轉(zhuǎn)載請(qǐng)注明C語(yǔ)言中如何使用隨機(jī)數(shù)?!
喜歡 (45)
[jinyangH@aliyun.com]
分享 (0)
發(fā)表我的評(píng)論
取消評(píng)論
表情

Hi,您需要填寫(xiě)昵稱和郵箱!

  • 昵稱 (必填)
  • 郵箱 (必填)
(3)個(gè)小伙伴在吐槽
  1. 向srand傳入time(NULL)參數(shù),我的三次結(jié)果也是一樣的
    dadan2018-01-10 17:29 回復(fù)
    • 那你系統(tǒng)時(shí)間沒(méi)有變過(guò),你看下time(NULL)的返回值每次是不是一樣
      cjkdjr2018-07-26 10:03 回復(fù)