//---------------------------------------------------------------------------
創(chuàng)新互聯(lián)公司-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價比巴林右旗網(wǎng)站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫,直接使用。一站式巴林右旗網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋巴林右旗地區(qū)。費用合理售后完善,十年實體公司更值得信賴。
#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個[1.00,10.00]區(qū)間內(nèi)的小數(shù)
printf("%.2f\n",rnd());
return 0;
}
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
它的返回值就是求取隨機的值,所以如果沒有對數(shù)有要求,直接這樣定:
printf("%d", rand());就能輸出一個隨機數(shù).但如果對數(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()來生成隨機種子,如果你沒調(diào)用它,系統(tǒng)會自動調(diào)用.但是srand是有個參數(shù)的,種子就是根據(jù)這個參數(shù)來定的,所以這個參數(shù)決定著生成的隨機數(shù).如果你在代碼里寫死了它:srand(10);那這樣rand生成的隨機數(shù)就也被定格在了一定量,所以不要這樣用.要這樣寫:
srand(time(NULL));time的返回值是當(dāng)前系統(tǒng)時間.因為時間不同,所取的數(shù)值也就不同.這樣隨機數(shù)就真正的隨機了.
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ù)時間來產(chǎn)生隨機數(shù)種子
x=(double)rand()/RAND_MAX*49+1.0;//(double)rand()/RAND_MAX產(chǎn)生0到1之間的隨機數(shù),乘以49,加上1.0就是1到50的隨機數(shù)。
printf("%lf",x);
}
float
b=rand()/(RAND_MAX+1.0);
printf("%f\n",b);
注釋:
stdlib.h
頭文件
中有宏#define
RAND_MAX
0x7fff
rand()產(chǎn)生一個0到0x7ffff即0到32767之間的
隨機數(shù)
rand()/(RAND_MAX+1.0)就等于一個0到1之間的
小數(shù)
了,因為rand()最大是32767最小是0,再除以32768就是一個0到1之間的小數(shù)(不能等于1),再乘以10就是一個0到10之間的數(shù)了(不等于10).最后再加1,就成了一個求1到10之間隨機數(shù)的
式子
了.
可以寫一個函數(shù),利用math.h中的rand來產(chǎn)生隨機浮點數(shù)。
#include
#include
#include
//
精度0.001的隨機浮點數(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到某個內(nèi)部指定的極大數(shù),但是以前似乎有些書上說用rand得到的可能是負(fù)數(shù)。如果有出現(xiàn)負(fù)數(shù)的話,對rand得到的數(shù)取絕對值就可以了。
C語言中生成1個0到1的隨機數(shù)可以執(zhí)行語句:float b=rand()/(RAND_MAX+1.0);
解析:
標(biāo)準(zhǔn)C庫中函數(shù)rand()可以生成0~RAND_MAX之間的一個隨機數(shù),其中RAND_MAX 是stdlib.h 中定義的一個整數(shù),它與系統(tǒng)有關(guān)。rand()函數(shù)沒有輸入?yún)?shù),直接通過表達(dá)式rand()來引用;
用函數(shù)rand取得的隨機數(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。編程的時候,不應(yīng)該對 RAND_MAX 的具體數(shù)值做任何假設(shè)。
擴展資料:
相關(guān)說明:
1、因為rand()函數(shù)是按指定的順序來產(chǎn)生整數(shù),因此每次執(zhí)行上面的語句都打印相同的兩個值,所以說C語言的隨機并不是真正意義上的隨機。
2、為了使程序在每次執(zhí)行時都能生成一個新序列的隨機值,我們通常通過為隨機數(shù)生成器提供一粒新的隨機種子。函數(shù) srand()(來自stdlib.h)可以為隨機數(shù)生成器播散種子。只要種子不同rand()函數(shù)就會產(chǎn)生不同的隨機數(shù)序列。srand()稱為隨機數(shù)生成器的初始化器。
3、隨機種子(Random Seed)是計算機專業(yè)術(shù)語,一種以隨機數(shù)作為對象的以真隨機數(shù)(種子)為初始條件的隨機數(shù)。一般計算機的隨機數(shù)都是偽隨機數(shù),以一個真隨機數(shù)(種子)作為初始條件,然后用一定的算法不停迭代產(chǎn)生隨機數(shù)。
參考資料來源:百度百科-隨機函數(shù)
參考資料來源:百度百科-RAND_MAX