當前位置:首頁 » 編程語言 » c語言里的隨機函數
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

c語言里的隨機函數

發布時間: 2022-12-16 01:58:56

㈠ 關於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語言 隨機函數

首先一樓代碼是可以的,只是num
=
rand()%10的10後漏了個0;
詳細回答你的疑惑:
1、你要用的隨機函數rand是包含在庫文件stdib.h中,如果不引用#include當然出錯!:
error
C2065:
'rand'
:
undeclared
identifier
2、rand是個偽隨機函數,如果不用srand每一次運行程序產生的隨機數一樣的,
因此使用一個時間種子函數srand,它的參數是電腦的系統時間,該函數包含在庫文件time.h中,這樣由於每次運行程序的時間不同,種子不同,生成的隨機數也不同,更接近真正的隨機數。
希望能幫到你!

㈢ C語言隨機函數

rand
和random都是偽隨機函數,一般直接讀取時間來做種子(sand(time))的也是不怎能隨機的
我給你一個我以前寫的,真正的隨機:
int
myrand(void)
{
int
seed
;

asm
("rdtsc"
:
"=A"
(seed))
;

srand((unsigned
int)seed);

return
rand();
}

㈣ c語言隨機函數怎麼用,怎麼定義

隨機函數就是產生數的函數,c語言里有rand(),srand()等函數。
用法
#include
#include
#include
void main( void )
{
int i,k;
srand( (unsigned)time( NULL ) ); //用系統時間當種子,對隨機函數進行初始化
for( i = 0; i < 10;i++ )
{
k=rand()%100; //產生各個隨機數
printf( " k=%d/n", k );
}
}
詳述
rand() srand() 頭文件為#include
標准C庫中函數rand()可以生成0~RAND_MAX之間的一個隨機數,其中RAND_MAX 是stdlib.h 中定義的一個整數,它與系統有關。
rand()函數沒有輸入參數,直接通過表達式rand()來引用,rand()%n是產生的隨機數對n取余,起到了取0到n-1之間隨機數的作用;
例如可以用下面的語句來列印兩個隨機數: printf("Random numbers are: %i %i/n",rand(),rand());
因為rand()函數是按指定的順序來產生整數,而未指定運行的種子,所以rand()每次使用的都是同一個種子來產生隨機數序列,因此每次執行上面的語句都列印相同的兩個值,所以說C語言的隨機並不是正真意義上的隨機。
為了時程序在每次執行時都能生成一個新序列的隨機值,我們通常通過為隨機數生成器提供一粒新的隨機種子。函數 srand()(來自stdlib.h)可以為隨機數生成器播散種子。只要種子不同rand()函數就會產生不同的隨機數序列。srand()稱為隨機數生成器的初始化器。
srand( (unsigned)time( NULL ) ); 用系統時間當種子,對隨機函數進行初始化,每次的系統時間不同,所以種子也就不同,產生的隨機數序列也就不同。

㈤ 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語言生成隨機數的函數,為什麼循環後隨機數都一樣

srand()函數是初始化隨機數產生器,它產生隨機數種子,說白了就是初始化隨機數。

srand((unsigned)time(0));取的是系統時間,也就是距離1970.1.1午夜有多少秒。而for循環每循環一次時間遠遠小於1秒,這就導致了srand((unsigned)time(0))產生的種子並沒有改變。 那麼,相同的隨機數種子所產生的隨機數肯定是一樣的了。


(6)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++的隨機函數
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間的隨機數。
不過我沒有測試從復率,誰測了告訴我一下。

㈧ c語言隨機數函數是什麼

c語言隨機數函數是 rand()
若要輸出1~10之間的隨機數,
可用rand()%10+1。

㈨ 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函數也是調用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
}