1、首先打開Visual
創(chuàng)新新互聯(lián),憑借十余年的網(wǎng)站制作、成都網(wǎng)站建設經(jīng)驗,本著真心·誠心服務的企業(yè)理念服務于成都中小企業(yè)設計網(wǎng)站有成百上千家案例。做網(wǎng)站建設,選創(chuàng)新互聯(lián)建站。
stdio
2019,依次點擊文件,新建,項目新建以一個空白的項目:
2、新建新項目以后,右鍵點擊左邊的源文件,選擇添加,點擊添加項:
3、選擇cpp,并將下方的擴展名改為.c,然后點擊確定:
4、接下來就可以用編譯器編譯,使用rand()函數(shù)產(chǎn)生C語言的隨機數(shù),需要加入stdlib.h和time.h在表頭,rand()函數(shù)需要給srand()函數(shù)提供一個參數(shù),不然系統(tǒng)會給定一個默認的參數(shù),如果參數(shù)為一任意的常量的話,得到的也是偽隨機數(shù):
4、按ctrl+F5就可以運行程序了,在彈出的窗口中就會看到得到的所有隨機數(shù)了:
1. 基本函數(shù)
在C語言中取隨機數(shù)所需要的函數(shù)是:
int rand(void); void srand (unsigned int n);
rand()函數(shù)和srand()函數(shù)被聲明在頭文件stdlib.h中,所以要使用這兩個函數(shù)必須包含該頭文件:
#include stdlib.h
2. 使用方法
rand()函數(shù)返回0到RAND_MAX之間的偽隨機數(shù)(pseudorandom)。RAND_MAX常量被定義在stdlib.h頭文件中。其值等于32767,或者更大。
srand()函數(shù)使用自變量n作為種子,用來初始化隨機數(shù)產(chǎn)生器。只要把相同的種子傳入srand(),然后調用rand()時,就會產(chǎn)生相同的隨機數(shù)序列。因此,我們可以把時間作為srand()函數(shù)的種子,就可以避免重復的發(fā)生。如果,調用rand()之前沒有先調用srand(),就和事先調用srand(1)所產(chǎn)生的結果一樣。
舉個例子,假設我們要取得0~10之間的隨機整數(shù)(不含10本身):
/* 例1:不指定種子的值 */
for (int i=0; i10; i++) { printf("%d ", rand()%10); }
每次運行都將輸出:1 7 4 0 9 4 8 8 2 4
/* 例2:指定種子的值為1 */
srand(1); for (int i=0; i10; 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; i10; i++) { printf("%d ", rand()%10); }
每次運行都將輸出:4 0 1 3 5 3 7 7 1 5
該程序取得的隨機值也是在[0,10)之間,與srand(1)所取得的值不同,但是每次運行程序的結果都相同。
/* 例4:指定種子值為現(xiàn)在的時間 */ srand((unsigned)time(NULL)); for (int i=0; i10; i++) { printf("%d ", rand()%10); }
該程序每次運行結果都不一樣,因為每次啟動程序的時間都不同。另外需要注意的是,使用time()函數(shù)前必須包含頭文件time.h。
3. 注意事項
求一定范圍內的隨機數(shù)。
如要取[0,10)之間的隨機整數(shù),需將rand()的返回值與10求模。
randnumber = rand() % 10;
那么,如果取的值不是從0開始呢?你只需要記住一個通用的公式。
要取[a,b)之間的隨機整數(shù)(包括a,但不包括b),使用:
(rand() % (b - a)) + a
偽隨機浮點數(shù)。
要取得0~1之間的浮點數(shù),可以用:
rand() / (double)(RAND_MAX)
如果想取更大范圍的隨機浮點數(shù),比如0~100,可以采用如下方法:
rand() /((double)(RAND_MAX)/100) 其他情況,以此類推,這里不作詳細說明。
C語言隨機函數(shù)主要用于實現(xiàn)一組隨機數(shù)的生成。
代碼示例如下:
#includestdio.h
#includestdlib.h
int main ()
{
int a;
a=rand()%4;
printf("%d\n",a);
return 0;
}
C預先生成一組隨機數(shù),每次調用隨機函數(shù)時從指針所指向的位置開始取值,因此使用rand()重復運行程序產(chǎn)生的隨機數(shù)都是相同的,可以通過srand()函數(shù)來改變指針位置。
擴展資料:
C語言隨機函數(shù)指針位置
void srand( unsigned int seed )
改變隨機數(shù)表的指針位置(用seed變量控制)。一般配合time(NULL)使用,因為時間每時每刻都在改變,產(chǎn)生的seed值都不同。
基于毫秒級隨機數(shù)產(chǎn)生方法:
#includewindows.h
種子設為:srand(unsigned int seed);
srand(GetTickCount());
參考資料:百度百科-C語言隨機函數(shù)
c語言中的rand隨機數(shù)函數(shù),是按指定順序來產(chǎn)生的,在生成隨機數(shù)之前,在stdlib.h頭文件中,會初始化函數(shù)srand,根據(jù)隨機種子seed,來獲取隨機數(shù),如果seed不變,每次運行得到的隨機數(shù)會是一樣的,因此,rand函數(shù)也被大家叫做偽隨機數(shù)。下面就來介紹下rand函數(shù)的使用
01
打開代碼編譯器,輸入如下所示的代碼片段
02
運行該代碼片段,得到10個隨機數(shù),但是我們發(fā)現(xiàn),不論運行幾次,生成的隨機數(shù)都是這10個,也就是說,在種子seed不變的情況下,生成的隨機數(shù)是偽隨機數(shù)
03
我們引入頭文件time.h,取時間戳作為seed的取值來源,改代碼片段如下,將srand(1)改成srand(time(NULL))
04
運行代碼,得到10個隨機數(shù)如下,定義非常量的srand參數(shù),可以避免偽隨機數(shù)的產(chǎn)生
c語言中產(chǎn)生隨機數(shù)的相關函數(shù)主要包括srand和rand函數(shù),兩者配合生成隨機數(shù)據(jù),測試代碼如下,
#includestdio.h
#include stdlib.h
#include time.h
void main()
{
int i=0,j=0;
int p[5][5]={0};
srand(time(NULL));
for(i=0;i5;i++)
for(j=0;j5;j++)
p[i][j]=rand()%100+1;//產(chǎn)生1-100的隨機數(shù)存入數(shù)組p中
printf("二維數(shù)組p為:\n");
for(i=0;i5;i++)
{
for(j=0;j5;j++)
printf("%d\t",p[i][j]);
printf("\n");
}
}
一般srand和rand配合使用產(chǎn)生偽隨機數(shù)序列。rand函數(shù)在產(chǎn)生隨機數(shù)前,需要系統(tǒng)提供的生成偽隨機數(shù)序列的種子,rand根據(jù)這個種子的值產(chǎn)生一系列隨機數(shù)。如果系統(tǒng)提供的種子沒有變化,每次調用rand函數(shù)生成的偽隨機數(shù)序列都是一樣的。srand(unsigned seed)通過參數(shù)seed改變系統(tǒng)提供的種子值,從而可以使得每次調用rand函數(shù)生成的偽隨機數(shù)序列不同,從而實現(xiàn)真正意義上的“隨機”。通??梢岳孟到y(tǒng)時間來改變系統(tǒng)的種子值,即srand(time(NULL)),可以為rand函數(shù)提供不同的種子值,進而產(chǎn)生不同的隨機數(shù)序列。