//---------------------------------------------------------------------------
創(chuàng)新互聯(lián)公司-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價(jià)比巴林右旗網(wǎng)站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫(kù),直接使用。一站式巴林右旗網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋巴林右旗地區(qū)。費(fèi)用合理售后完善,十年實(shí)體公司更值得信賴。
#include stdio.h
#include stdlib.h
#include time.h
double rnd(void)
{
static int fg=1;
int rd;
if (fg) {
srand(time(NULL));
fg=0;
}
return (double)(rand()%900+100)/100;
}
int main(void)
{
int i;
for (i = 0; i 10; i++) //輸出10個(gè)[1.00,10.00]區(qū)間內(nèi)的小數(shù)
printf("%.2f\n",rnd());
return 0;
}
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
它的返回值就是求取隨機(jī)的值,所以如果沒有對(duì)數(shù)有要求,直接這樣定:
printf("%d", rand());就能輸出一個(gè)隨機(jī)數(shù).但如果對(duì)數(shù)有要求,如小數(shù)或在一定值以內(nèi):
小數(shù):rand()+rand()/100.0 //100.0后面的.0必須寫,100是說明求兩位小數(shù),你可以自己加大.
一定范圍:rand()%10+0 //10是頂和底的差,0是底,就是說求10到20之間的數(shù)就是:rand()%10+10
但是調(diào)用它必須先調(diào)用srand()來生成隨機(jī)種子,如果你沒調(diào)用它,系統(tǒng)會(huì)自動(dòng)調(diào)用.但是srand是有個(gè)參數(shù)的,種子就是根據(jù)這個(gè)參數(shù)來定的,所以這個(gè)參數(shù)決定著生成的隨機(jī)數(shù).如果你在代碼里寫死了它:srand(10);那這樣rand生成的隨機(jī)數(shù)就也被定格在了一定量,所以不要這樣用.要這樣寫:
srand(time(NULL));time的返回值是當(dāng)前系統(tǒng)時(shí)間.因?yàn)闀r(shí)間不同,所取的數(shù)值也就不同.這樣隨機(jī)數(shù)就真正的隨機(jī)了.
time在time.h中聲明
rand,srand在stdilb.h中聲明.
VC環(huán)境下要比TC麻煩一些
格式如下:
#include "time.h"
#include "stdlib.h"
#include "stdio.h"
void main()
{
double x;
srand((unsigned)time(0)); //根據(jù)時(shí)間來產(chǎn)生隨機(jī)數(shù)種子
x=(double)rand()/RAND_MAX*49+1.0;//(double)rand()/RAND_MAX產(chǎn)生0到1之間的隨機(jī)數(shù),乘以49,加上1.0就是1到50的隨機(jī)數(shù)。
printf("%lf",x);
}
float
b=rand()/(RAND_MAX+1.0);
printf("%f\n",b);
注釋:
stdlib.h
頭文件
中有宏#define
RAND_MAX
0x7fff
rand()產(chǎn)生一個(gè)0到0x7ffff即0到32767之間的
隨機(jī)數(shù)
rand()/(RAND_MAX+1.0)就等于一個(gè)0到1之間的
小數(shù)
了,因?yàn)閞and()最大是32767最小是0,再除以32768就是一個(gè)0到1之間的小數(shù)(不能等于1),再乘以10就是一個(gè)0到10之間的數(shù)了(不等于10).最后再加1,就成了一個(gè)求1到10之間隨機(jī)數(shù)的
式子
了.
可以寫一個(gè)函數(shù),利用math.h中的rand來產(chǎn)生隨機(jī)浮點(diǎn)數(shù)。
#include
#include
#include
//
精度0.001的隨機(jī)浮點(diǎn)數(shù)
float
randf()
{
return
(float)(rand()
%
1001)
*
0.001f;
}
main()
{
int
i;
for
(i=0;
i100;
++i)
printf("%.3f\n",
randf());
system("pause");
}
VC里rand()的范圍是從0到某個(gè)內(nèi)部指定的極大數(shù),但是以前似乎有些書上說用rand得到的可能是負(fù)數(shù)。如果有出現(xiàn)負(fù)數(shù)的話,對(duì)rand得到的數(shù)取絕對(duì)值就可以了。
C語言中生成1個(gè)0到1的隨機(jī)數(shù)可以執(zhí)行語句:float b=rand()/(RAND_MAX+1.0);
解析:
標(biāo)準(zhǔn)C庫(kù)中函數(shù)rand()可以生成0~RAND_MAX之間的一個(gè)隨機(jī)數(shù),其中RAND_MAX 是stdlib.h 中定義的一個(gè)整數(shù),它與系統(tǒng)有關(guān)。rand()函數(shù)沒有輸入?yún)?shù),直接通過表達(dá)式rand()來引用;
用函數(shù)rand取得的隨機(jī)數(shù)除以(RAND_MAX+1.0),即可確保得到的結(jié)果在0到1之間。ISO IEC 9899 2011 (C11)標(biāo)準(zhǔn)中未規(guī)定 RAND_MAX 的具體數(shù)值。但該標(biāo)準(zhǔn)規(guī)定了RAND_MAX 的值應(yīng)至少為32767。編程的時(shí)候,不應(yīng)該對(duì) RAND_MAX 的具體數(shù)值做任何假設(shè)。
擴(kuò)展資料:
相關(guān)說明:
1、因?yàn)閞and()函數(shù)是按指定的順序來產(chǎn)生整數(shù),因此每次執(zhí)行上面的語句都打印相同的兩個(gè)值,所以說C語言的隨機(jī)并不是真正意義上的隨機(jī)。
2、為了使程序在每次執(zhí)行時(shí)都能生成一個(gè)新序列的隨機(jī)值,我們通常通過為隨機(jī)數(shù)生成器提供一粒新的隨機(jī)種子。函數(shù) srand()(來自stdlib.h)可以為隨機(jī)數(shù)生成器播散種子。只要種子不同rand()函數(shù)就會(huì)產(chǎn)生不同的隨機(jī)數(shù)序列。srand()稱為隨機(jī)數(shù)生成器的初始化器。
3、隨機(jī)種子(Random Seed)是計(jì)算機(jī)專業(yè)術(shù)語,一種以隨機(jī)數(shù)作為對(duì)象的以真隨機(jī)數(shù)(種子)為初始條件的隨機(jī)數(shù)。一般計(jì)算機(jī)的隨機(jī)數(shù)都是偽隨機(jī)數(shù),以一個(gè)真隨機(jī)數(shù)(種子)作為初始條件,然后用一定的算法不停迭代產(chǎn)生隨機(jī)數(shù)。
參考資料來源:百度百科-隨機(jī)函數(shù)
參考資料來源:百度百科-RAND_MAX
網(wǎng)站題目:c語言隨機(jī)小數(shù)函數(shù) c語言生成小數(shù)隨機(jī)數(shù)
轉(zhuǎn)載源于:http://chinadenli.net/article22/hgdhcc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供響應(yīng)式網(wǎng)站、電子商務(wù)、外貿(mào)建站、定制開發(fā)、Google、做網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)