c語言random函數
① c中隨機數怎麼生成
//需要的頭文件stdlib.h, time.h
//初始化隨機種子,不用的話每次運行是一樣的數
srand((unsigned int)time(NULL));
//生成0-n,不包括n
num = round()%n;
在c語言中,rand()函數可以用來產生隨機數,但是這不是真真意義上的隨機數,是一個偽隨機數,是根據一個數,我們可以稱它為種子,為基準以某個遞推公式推算出來的一系數,當這系列數很大的時候,就符合正態公布,從而相當於產生了隨機數,但這不是真正的隨機數,當計算機正常開機後,這個種子的值是定了的,除非你破壞了系統,為了改變這個種子的值,C提供了srand()函數,它的原形是void srand( int a)。
可能大家都知道C語言中的隨機函數random,可是random函數並不是ANSI C標准,所以說,random函數不能在gcc,vc等編譯器下編譯通過。
rand()會返回一隨機數值,范圍在0至RAND_MAX 間。返回0至RAND_MAX之間的隨機數值,RAND_MAX定義在stdlib.h,(其值至少為32767)我運算的結果是一個不定的數,要看你定義的變數類型,int整形的話就是32767。 在調用此函數產生隨機數前,必須先利用srand()設好隨機數種子,如果未設隨機數種子,rand()在調用時會自動設隨機數種子為1。一般用for語句來設置種子的個數。具體見下面的例子。
一 如何產生不可預見的隨機序列呢利用srand((unsigned int)(time(NULL))是一種方法,因為每一次運行程序的時間是不同的。
在C語言里所提供的隨機數發生器的用法:現在的C編譯器都提供了一個基於ANSI標準的偽隨機數發生器函數,用來生成隨機數。它們就是rand()和srand()函數。這二個函數的工作過程如下:
1) 首先給srand()提供一個種子,它是一個unsigned int類型,其取值范圍從0~65535;
2) 然後調用rand(),它會根據提供給srand()的種子值返回一個隨機數(在0到32767之間)
3) 根據需要多次調用rand(),從而不間斷地得到新的隨機數;
4) 無論什麼時候,都可以給srand()提供一個新的種子,從而進一步「隨機化」rand()的輸出結果。
② C語言random函數
s_addr是一個long型的變數,當然可以用random的返回值進行賦值。結構體如下:
typedef struct in_addr {
union {
struct {
u_char s_b1,s_b2,s_b3,s_b4;
} S_un_b;
struct {
u_short s_w1,s_w2;
} S_un_w;
u_long S_addr;////////////////////////////////////////這里
} S_un;
} in_addr;
IP地址本來就是一個32位整數,只不過為了方便記憶和查看,將8位作為一組,每組用10進制數字表示,並且用'.'隔開。比如:0.0.0.3,對應的32位二進制數為:0000000000.....111(前面有29個0),s_addr就是記錄這個二進制數的。
struct {u_char s_b1,s_b2,s_b3,s_b4;} S_un_b;
這個是用4個10進制數表示的IP地址,
s_un_b.s_b1=0
s_un_b.s_b2=0
s_un_b.s_b3=0
s_un_b.s_b4=3
就是IP地址"0.0.0.3"了,系統負責將它轉換為32位二進制數。
struct {u_short s_w1,s_w2;} S_un_w;
這個是指前16位作為一部分,後面16位作為一個部分。".0.0.0.3"前面16位作為一個部分值為0,後面的部分值為3,所以:
s_un_w.s_w1=0;
s_un_w.s_w2=3;
③ 詳細介紹一下C語言裡面的隨機數產生函數random怎麼用
rand()函數可以用來產生隨機數,但是這不是真真意義上的隨機數,是一個偽隨機數,是根據一個數,我們可以稱它為種了,為基準以某個遞推公式推算出來的一系數,當這系列數很大的時候,就符合正態公布,從而相當於產生了隨機數,但這不是真正的隨機數,當計算機正常開機後,這個種子的值是定了的,除非你破壞了系統,為了改變這個種子的值,C提供了 srand()函數,它的原形是void srand( int a).
初始化隨機產生器既rand()函數的初始值,即使把種子的值改成a; 從這你可以看到通過sand()函數,我們是可以產生可以預見的隨機序列,那我們如何才能產生不可預見的隨機序列呢?我們可能常常需要這樣的隨機序列,是吧。利用srand((unsign)(time(NULL))是一種方法,因為每一次運行程序的時間是不同的.
下面講一講在C語言里所提供的隨機數發生器的用法。現在的C編譯器都提供了一個基於ANSI標準的偽隨機數發生器函數,用來生成隨機數。它們就是rand()和srand()函數。這二個函數的工作過程如下:
1) 首先給srand()提供一個種子,它是一個unsigned int類型,其取值范圍從0~65535;
2) 然後調用rand(),它會根據提供給srand()的種子值返回一個隨機數(在0到32767之間)
3) 根據需要多次調用rand(),從而不間斷地得到新的隨機數;
4) 無論什麼時候,都可以給srand()提供一個新的種子,從而進一步「隨機化」rand()的輸出結果。
以下是一個產生隨機數的例子:
需要首先使用隨機數「種子」初始化,srand函數:
#include<stdlib.h>
#include<stdio.h>
#include<time.h>//使用當前時鍾做種子
voidmain(void)
{
inti;
srand((unsigned)time(NULL));//初始化隨機數
/*列印10個隨機數.*/
for(i=0;i<10;i++)
printf("%d ",rand());
}
#include<stdlib.h>
#include<time.h>
main
{
inti;
srand(time(0));//初始化隨機種子
i=rand();//產生隨機數
}
首先,加一個"#include<stdlib.h>
然後設一個變數,如j,j=rand(),就可以給j賦一個1~32767的隨機數,如果要獲得一個隨機函數的十位(其它類似),只需令j=j%10就行.
添加頭文件 #include<time.h>
然後在文件中添加 srand((unsigned)time(NULL));
srand()是用來初始化隨機種子數的,因為rand的內部實現是用線性同餘法做的,它不是真的隨機數,只不過是因為其周期特別長,所以有一定的范圍里可看成是隨機的.
上面是有個隨機種子的說明及方法,為了避免重復.然後再 用 隨機函數,rand() 就行了.
頭文件是 stdlib.h
random() 產生隨機數為 0或1
random(n) 產生隨機數為 0到n之間的一個隨機數
rand() 產生 0到32768之間的一個隨機數
函數名: randomize
功 能: 初始化隨機數發生器
用 法: void randomize(void);
程序例:
#include<stdlib.h>
#include<stdio.h>
#include<time.h>
intmain(void)
{
inti;
randomize();
printf("Tenrandomnumbersfrom0to99 ");
for(i=0;i<10;i++)
printf("%d ",rand()%100);
return0;
}
④ c語言里 random函數怎麼實現的
1.
rand函數是根據一個數(我們可以稱它為種子)為基準,以某個遞推公式推算出來的一系數,當這系列數很大的時候,就符合正態公布,從而相當於產生了隨機數,
2.
但這產生的並不是真意正義上的隨機數,是一個偽隨機數,當計算機正常開機後,這個種子的值是定了的,除非你破壞了系統,為了改變這個種子的值。
3.
種子相同,產生的隨機序列相同。這樣做的好處是,方便我們產生一組固定的隨機序列,用來調試程序。
4.
C提供了srand()函數,用來設置種子,它的原形是void
srand(
int
a)。
5.
在調用rand函數產生隨機數前,應該先利用srand()設好隨機數種子,如果未設隨機數種子,默認種子為1。