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

c語言中如何指定隨機函數的值

發布時間: 2022-07-19 17:17:22

c語言中的rand()函數怎麼用

rand()

rand()函數用來產生隨機數,但是,rand()的內部實現是用線性同餘法實現的,是偽隨機數,由於周期較長,因此在一定范圍內可以看成是隨機的。

rand()會返回一個范圍在0到RAND_MAX(至少是32767)之間的偽隨機數(整數)。

在調用rand()函數之前,可以使用srand()函數設置隨機數種子,如果沒有設置隨機數種子,rand()函數在調用時,自動設計隨機數種子為1。隨機種子相同,每次產生的隨機數也會相同。

rand()函數需要的頭文件是:<stdlib.h>

rand()函數原型:int rand(void);

使用rand()函數產生1-100以內的隨機整數:int number1 = rand() % 100+1。

srand()

srand()函數需要的頭文件仍然是:<stdlib.h>

srand()函數原型:void srand (usigned int seed);

srand()用來設置rand()產生隨機數時的隨機數種子。參數seed是整數,通常可以利用time(0)或getpid(0)的返回值作為seed。

使用rand()和srand()產生1-100以內的隨機整數:

srand(time(0));

int number1 = rand() % 100+1。

⑵ 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語言中設置隨機數的方法

問題1: 怎樣獲得一個真正的隨機數?要知道,rand()是不能產生真正的隨機數的!即使不能產生真正的隨機數,也要大概接近呀!而rand()好象每次的隨機都一樣。

專家解答:

之所以rand()每次的隨機數都一樣是因為rand()函數使用不正確。各種編程語言返回的隨機數(確切地說是偽隨機數)實際上都是根據遞推公式計算的一組數值,當序列足夠長,這組數值近似滿足均勻分布。如果計算偽隨機序列的初始數值(稱為種子)相同,則計算出來的偽隨機序列就是完全相同的。這個特性被有的軟體利用於加密和解密。加密時,可以用某個種子數生成一個偽隨機序列並對數據進行處理;解密時,再利用種子數生成一個偽隨機序列並對加密數據進行還原。這樣,對於不知道種子數的人要想解密就需要多費些事了。當然,這種完全相同的序列對於你來說是非常糟糕的。要解決這個問題,需要在每次產生隨機序列前,先指定不同的種子,這樣計算出來的隨機序列就不會完全相同了。你可以在調用rand()函數之前調用srand( (unsigned)time( NULL ) ),這樣以time函數值(即當前時間)作為種子數,因為兩次調用rand函數的時間通常是不同的,這樣就可以保證隨機性了。你也可以使用srand函數來人為指定種子數。Windows 9x/NT的游戲FreeCell就允許用戶指定種子數,這樣用戶如果一次游戲沒有成功,下次還可以以同樣的發牌結果再玩一次。

問題2: 我按照上述方法並不能產生隨機數,僅產生公差為3或4的等差數列:
#include <stdlib.h>
#include <iostream.h>
#include <conio.h>
#include <time.h>
void main()
{
for(int i=0;i<100000;i++)
{
srand( (unsigned)time( NULL ) );
cout<<rand()<<endl;
}
}
專家解答:
你的程序是有問題的,你每產生一個隨機數之前,都調用一次srand,而由於計算機運行很快,所以你每次用time得到的時間都是一樣的(time的時間精度較低,只有55ms)。這樣相當於使用同一個種子產生隨機序列,所以產生的隨機數總是相同的。你應該把srand放在循環外:
srand( (unsigned)time( NULL ) );
for(int i=0;i<100000;i++)
{
//相關語句
}

⑷ 求c語言的隨機函數怎麼用

隨機函數就是產生數的函數,c語言里有rand(),srand()等函數。
用法
#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 );
}
}
詳述
rand() srand() 頭文件為#include <stdlib.h>
標准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語言中取隨機數的函數

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語言中 給數組賦隨機值

#include<stdio.h>
#include<stdlib.h> //准備使用隨機生成函數
#include<time.h> //為了給隨機函數指定每次不同的種子值,准備使用時間函數
#define N 100
void main() { int a[N],i;
srand((unsigned int)time(NULL)); //取當前時間當隨機數種子
for ( i=0;i<N;i++ ) a[i]=rand()%100+1; //生成隨機數范圍在[1,100]區間
for ( i=0;i<N;i++ ) printf("%d ",a[i]); printf("\n");
}
rand()函數生成隨機數區間為[0,65535]
如果要生成[a,b]之間的隨機數:rand()%(b-a+1)+a
rand()%100生成隨機數范圍[0,99]
rand()%100+1生成[1,100]

⑺ 如何在C語言中產生一定范圍的隨機數

c語言的獲取隨機數的函數為rand(),
可以獲得一個非負整數的隨機數。要調用rand需要引用頭文件stdlib.h。
要讓隨機數限定在一個范圍,可以採用模除加加法的方式。
要產生隨機數r,
其范圍為
m<=r<=n,可以使用如下公式:
rand()%(n-m+1)+m
其原理為,對於任意數,
0<=rand()%(n-m+1)<=n-m
於是
0+m<=rand()%(n-m+1)+m<=n-m+m

m<=rand()%(n-m+1)+m<=n

⑻ c語言的隨機函數怎樣用、

就像是樓上寫的
通常隨機函數rand()
帶有時間種子的隨機函數srand(time(0))在用rand()實現。
記住加相關頭文件

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