c語言中隨機函數
① c語言中取隨機數的函數
1. 基本函數
在C語言中取隨機數所需要的函數是:
int rand(void); void srand (unsigned int n);
rand()函數和srand()函數被聲明在頭文件stdlib.h中,所以要使用這兩個函數必須包含該頭文件:
#include <stdlib.h>
2. 使用方法
rand()函數返回0到RAND_MAX之間的偽隨機數(pseudorandom)。RAND_MAX常量被定義在stdlib.h頭文件中。其值等於32767,或者更大。
srand()函數使用自變數n作為種子,用來初始化隨機數產生器。只要把相同的種子傳入srand(),然後調用rand()時,就會產生相同的隨機數序列。因此,我們可以把時間作為srand()函數的種子,就可以避免重復的發生。如果,調用rand()之前沒有先調用srand(),就和事先調用srand(1)所產生的結果一樣。
舉個例子,假設我們要取得0~10之間的隨機整數(不含10本身):
/* 例1:不指定種子的值 */
for (int i=0; i<10; i++) { printf("%d ", rand()%10); }
每次運行都將輸出:1 7 4 0 9 4 8 8 2 4
/* 例2:指定種子的值為1 */
srand(1); for (int i=0; i<10; i++) { printf("%d ", rand()%10); }
每次運行都將輸出:1 7 4 0 9 4 8 8 2 4
例2的輸出結果與例1是完全一樣的。
/* 例3:指定種子的值為8 */ srand(8); for (int i=0; i<10; i++) { printf("%d ", rand()%10); }
每次運行都將輸出:4 0 1 3 5 3 7 7 1 5
該程序取得的隨機值也是在[0,10)之間,與srand(1)所取得的值不同,但是每次運行程序的結果都相同。
/* 例4:指定種子值為現在的時間 */ srand((unsigned)time(NULL)); for (int i=0; i<10; i++) { printf("%d ", rand()%10); }
該程序每次運行結果都不一樣,因為每次啟動程序的時間都不同。另外需要注意的是,使用time()函數前必須包含頭文件time.h。
3. 注意事項
求一定范圍內的隨機數。
如要取[0,10)之間的隨機整數,需將rand()的返回值與10求模。
randnumber = rand() % 10;
那麼,如果取的值不是從0開始呢?你只需要記住一個通用的公式。
要取[a,b)之間的隨機整數(包括a,但不包括b),使用:
(rand() % (b - a)) + a
偽隨機浮點數。
要取得0~1之間的浮點數,可以用:
rand() / (double)(RAND_MAX)
如果想取更大范圍的隨機浮點數,比如0~100,可以採用如下方法:
rand() /((double)(RAND_MAX)/100) 其他情況,以此類推,這里不作詳細說明。
② c語言隨機函數rand()怎麼使用
它的返回值就是求取隨機的值,所以如果沒有對數有要求,直接這樣定:
printf("%d", rand());就能輸出一個隨機數.但如果對數有要求,如小數或在一定值以內:
小數:rand()+rand()/100.0 //100.0後面的.0必須寫,100是說明求兩位小數,你可以自己加大.
一定范圍:rand()%10+0 //10是頂和底的差,0是底,就是說求10到20之間的數就是:rand()%10+10
但是調用它必須先調用srand()來生成隨機種子,如果你沒調用它,系統會自動調用.但是srand是有個參數的,種子就是根據這個參數來定的,所以這個參數決定著生成的隨機數.如果你在代碼里寫死了它:srand(10);那這樣rand生成的隨機數就也被定格在了一定量,所以不要這樣用.要這樣寫:
srand(time(NULL));time的返回值是當前系統時間.因為時間不同,所取的數值也就不同.這樣隨機數就真正的隨機了.
time在<time.h>中聲明
rand,srand在<stdilb.h>中聲明.
③ 關於C語言隨機函數
把 srand( time(0) ); 放在循環外每次產生隨機數的種子也是一樣的啊,為什麼產生的隨機數就不一樣了?
因為隨機函數只需要一個種子就能產生一系列的隨機數,並不是每個隨機數都需要一個種子。
你把 srand(time(0)) 放到循環前面就可以了。
原因: time(0)返回的是系統的時間(從1970.1.1午夜算起),單位:秒,而那個循環運行起來耗時連0.000001秒都不到! 也就是說,srand(time(0)) 連著4次的種子是一樣的,種子一樣,生產的隨機數當然是一樣了。
如果你在把srand()放循環裡面,在中間加個sleep函數,消耗一點時間(間隔大於1秒),那麼生成的rand 就不一樣了.但是這樣做很不好,連著兩次用srand生成的種子,間隔一樣,生產的隨機數間隔有會有規律性。
另:因為兩次運行同一程序的時間肯定是不一樣的,所以把srand放在循環前面可以得不同的種子,這樣才能得到你想要的。
④ C語言生成隨機數的函數,為什麼循環後隨機數都一樣
srand()函數是初始化隨機數產生器,它產生隨機數種子,說白了就是初始化隨機數。
srand((unsigned)time(0));取的是系統時間,也就是距離1970.1.1午夜有多少秒。而for循環每循環一次時間遠遠小於1秒,這就導致了srand((unsigned)time(0))產生的種子並沒有改變。 那麼,相同的隨機數種子所產生的隨機數肯定是一樣的了。
(4)c語言中隨機函數擴展閱讀:
C語言產生隨機數的方法:
1,在C語言中,rand()函數可以用來產生隨機數,但是這不是真真意義上的隨機數,是一個偽隨機數,是根據一個數,可以稱它為種子,為基準以某個遞推公式推算出來的一系數,當這系列數很大的時候,就符合正態公布,從而相當於產生了隨機數。
2,C語言中的隨機函數random,可是random函數並不是ANSI C標准,所以說,random函數不能在gcc,vc等編譯器下編譯通過。
3,rand()會返回一隨機數值,范圍在0至RAND_MAX 間。返回0至RAND_MAX之間的隨機數值,RAND_MAX定義在stdlib.h,(其值至少為32767)我運算的結果是一個不定的數,要看你定義的變數類型,int整形的話就是32767。
4,在調用此函數產生隨機數前,必須先利用srand()設好隨機數種子,如果未設隨機數種子,rand()在調用時會自動設隨機數種子為1。一般用for語句來設置種子的個數。
⑤ c語言隨機數函數是什麼
C語言隨機函數主要用於實現一組隨機數的生成。
代碼示例如下:
#include<stdio.h>
#include<stdlib.h>
int main ()
{
int a;
a=rand()%4;
printf("%d ",a);
return 0;
}
C預先生成一組隨機數,每次調用隨機函數時從指針所指向的位置開始取值,因此使用rand()重復運行程序產生的隨機數都是相同的,可以通過srand()函數來改變指針位置。
(5)c語言中隨機函數擴展閱讀:
C語言隨機函數指針位置
void srand( unsigned int seed )
改變隨機數表的指針位置(用seed變數控制)。一般配合time(NULL)使用,因為時間每時每刻都在改變,產生的seed值都不同。
基於毫秒級隨機數產生方法:
#include<windows.h>
種子設為:srand(unsigned int seed);
srand(GetTickCount());
參考資料:網路-C語言隨機函數
⑥ C語言隨機函數怎麼弄
C++的隨機函數
C++/c語言里,是沒有辦法得到一個真正的隨機數序列的.想要等到一個真正的隨機數序列,必須使用特定的隨機數硬體發生器.也就是說,軟體是沒有辦法產生真正的隨機數.因為軟體必須按照一定的邏輯來編寫.既然是按照特定的邏輯(也就是說演算法)來編寫 ,那麼產生的運算結果就是一定的.這一點,就是軟體天生的特性.想想看,如果一個軟體,同樣的代碼喝條件下,每次運行的結果不一樣,那還有誰會用?
所以,在C++/C語言中,就有了"偽隨機數"的概念.意思也就是說,通過一個特定的演算法,產生一個假的隨機數序列.那麼,程序員又希望這個隨機數序列跟接近真正的隨機數序列,也就是希望得到的序列的不一樣,所以有了一個"播種"的概念.
srand(unsgined int seed);
這個函數就是用來"播種"的.通過一個"種子"(SEED),來控制隨機數的序列不一樣.只要種子不一樣,那麼通過rand()得到的隨機數序列就不一樣.反過來說,如果種子一樣,那麼通過srand()得到的隨機數就是一樣的.
srand(0);
for( int i = 0; i < 10; i++)
{
cout<<rand()<<' ';
}
你試著將這個程序執行兩次,你會發現兩次的結果一樣。那是因為,一旦「種子」確定了,那麼這個隨機數序列就確定了。軟體天生的「行為可重復性」決定了這一點。
所以,一般在播種的時候,喜歡用一個隨機的種子.在絕大多數的情況下,會使用當前的系統時間.這個數字在每次程序運行的時候都不一樣.除非你手動的改系統時間.
編程時有時需要隨機輸入一些數,這是調用隨機函數可以完成此相命令.
# include 「stdio.h」
# include 「stdlib.h」
# include 「time.h」 /*需引用的頭文件*/
srand((unsigned)time(NULL)); /*隨機種子*/
n=rand()%(Y-X+1)+X; /*n為X~Y之間的隨機數*/
進一步解釋
有
srand()設置隨機數種子,rand()得到隨機數
random()的函數原型為int random(int num)
它的作用是Returns an integer between 0 and (num-1)
而randomize的函數原型為void randomize(void)
它的作用是Initializes the random number generator with a random value.
它們的區別是前者限定隨機數的產生范圍,而後者這完全是隨機的,另外使用這兩個函數時
應含入
#include <stdlib.h>
#include <time.h>
頭文件。
一個例子:
用法如下:
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
void main( void )
{
int i,k;
srand( (unsigned)time( NULL ) ); //用系統時間當種子,對隨機函數進行初始化
for( i = 0; i < 10;i++ )
{
k=rand()%100; //產生各個隨機數
printf( " k=%d\n", k );
}
}
再抄個~
在VC中設計到隨機數有兩個函數
srand() and rand()
srand() 的作用是是一個種子,提供每次獲得隨機數的基數而已,rand()根據種子而產生隨機數
注意
1:srand() 里的值必須是動態變化的,否則得到的隨機數就是一個固定數
2:其實可以不用寫srand() ,只用rand()就可以了,省事,簡單,例子如下
如果我們想得到一個 0-60的隨機數那麼可以寫成
int i;
i=rand()%60;
就可以了。
當然最好有個統一的標注如下:
int i;
srand((unsigned)time( NULL ));
i=rand()%60;
這樣就OK了
例題隨機取數,取1到99之間
1、#include <iostream.h>
#include <stdlib.h>
#include <time.h>
int main()
{
int n;//n為隨機數
srand(time(NULL));
n=1+rand()%99;
cout<<n;
return 0;
}
2、#include<iostream.h>
#include<stdlib.h>
#include<time.h>
void main()
{
int a;
srand((unsigned) time(NULL));
a=rand()%99+1;
cout<<a;
}
3、#include <iostream.h>
#include <stdlib.h>
#include <time.h>
void main()
{
int j;
srand((unsigned)time(NULL));
loop:
j=rand()%100;
if(j==0)
{
cout<<"error"<<endl;
goto loop;
}
else cout<<j<<endl;
}
4、如果象樓上的你的那種做法做下去
那應該是100%而不是98%
你一定是少了
srand(...........);
其實這個程序也不錯
#include <iostream>
#include <cstdlib>
using namespace std;
int main()
{
int counter;
for(counter=0;counter<10;counter++)
{
srand(counter+1);
cout<<"Random number"<<counter+1<<":"<<rand()<<endl;
}
system("pause");
return 0;
}
5、#include <iostream.h>
#include <stdlib.h>
int main()
{
int shu =100;
int n;//n為隨機數
srand(shu);
n=rand() % shu;
cout<<n;
return 0;
}
不拿時間作隨機數,可以設一個種子數不清100這樣就產生0~99間的隨機數。
不過我沒有測試從復率,誰測了告訴我一下。
⑦ 隨機函數rand怎麼用c語言
一、首先包含必要的頭文件
#include<stdio.h>
這個包含用於輸入輸出的函數。
#include<stdlib.h>
這個包含初始化隨機數種子、產生隨機數的函數。
#include<time.h>
這個包含與時間有關的函數,初始化隨機數種子時可以用到。
二、使用如下公式產生在區間[min,max]之間的隨機數
int r=rand()%(max-min+1)+min;
三、一個例子,產生10個[1,100]的隨機整數
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
const int min=1,max=100;
int i,r;
//用當前時間初始化隨機數種子
srand(time(NULL));
printf("隨機產生的10個1-100的整數是:");
for(i=0;i<10;i++)
{
r=rand()%(max-min+1)+min;
printf("%d,",r);
}
return 0;
}
四、運行結果的截圖
截圖2
⑧ C語言中怎樣寫一個生成隨機數的函數
rand函數也是調用dos的時鍾,進行的偽隨機函數.
你也可以使用時鍾來模擬隨機函數.
可以試用gettime這個函數:
long int MyRand(int x)
{
struct time t1,t2,t3;
gettime(&t1);
int y1=t1.ti_hund;//取1/100s作為基數
gettime(&t2);
int y2=t2.ti_hund;//取1/100s作為基數
gettime(&t3);
int y3=t3.ti_hund;//取1/100s作為基數
return y1*y2*y3;//產生的隨機數0~99*99*99
}
⑨ c語言產生隨機數的函數
在c語言中要產生隨機數可以用rand函數。
默認情況下這個函數產生的隨機整數的范圍是[0,RAND_MAX]。
RAND_MAX是一個預定義的宏,其值等於平台上int類型的最大值。
可以使用如下公式來產生一個[min,max]之間的隨機整數:
rand()%(max-min+1)+min
下面這個例子可以產生10個[1,100]的隨機數,並輸出了它們:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
int i;
//初始化隨機數種子
srand(time(NULL));
//printf("%d ",RAND_MAX);
for(i=0;i<10;i++)
printf("%d ",rand()%100+1);
return 0;
}
下面是運行結果的截圖:
⑩ C語言中產生隨機數的函數是什麼
rand函數也是調用dos的時鍾,進行的偽隨機函數.
你也可以使用時鍾來模擬隨機函數.
可以試用gettime這個函數:
long int MyRand(int x)
{
struct time t1,t2,t3;
gettime(&t1);
int y1=t1.ti_hund;//取1/100s作為基數
gettime(&t2);
int y2=t2.ti_hund;//取1/100s作為基數
gettime(&t3);
int y3=t3.ti_hund;//取1/100s作為基數
return y1*y2*y3;//產生的隨機數0~99*99*99
}