c語言隨機數生成器
❶ 如何用c語言產生一定范圍內的隨機數
利用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()的輸出結果。
下面是0~32767之間的隨機數程序:
#include <stdlib.h>
#include <stdio.h>
#include <time.h> // 使用當前時鍾做種子
void main(void)
{int i;
srand((unsigned)time( NULL ) ); // 初始化隨機數
for(i = 0; i < 10;i++) // 列印出 10 個隨機數
printf("%d ", rand() );
}
根據上面的程序可以很容易得到0~1之間的隨機數:
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
int main( )
{int i;
srand((unsigned)time( NULL ) );
for(i = 0; i < 10;i++)
printf("%5.2f ", rand()/32767.0);
}
而產生1~100之間的隨機數可以這樣寫:
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
int main( )
{int i;
srand((unsigned)time( NULL ) );
for(i = 0; i < 10;i++)
printf("%d ", rand()%100+1);
}
(1)c語言隨機數生成器擴展閱讀:
C語言高效編程技巧:
一:以空間換時間
計算機程序中最大的矛盾是空間和時間的矛盾,那麼,從這個角度出發逆向思維來考慮程序的效率問題
二:數學方法解決問題
數學是計算機之母,沒有數學的依據和基礎,就沒有計算機發展,所以在編寫程序的時候,採用一些數學方法會對程序的執行效率有數量級的提高。
三:使用位操作
實現高效的C語言編寫的第三招----使用位操作,減少除法和取模的運算。
在計算機程序中,數據的位是可以操作的最小數據單位,理論上可以用「位運算」來完成所有的運算和操作。一般的位操作是用來控制硬體的,或者做數據變換使用,但是,靈活的位操作可以有效提高程序運行的效率。
❷ C語言怎樣產生一定范圍的隨機數
在C語言中,rand()函數可以用來產生隨機數,但是這不是真真意義上的隨機數,是一個偽隨機數,是根據一個數,可以稱它為種子。
為基準以某個遞推公式推算出來的一系數,當這系列數很大的時候,就符合正態公布,從而相當於產生了隨機數。
C語言產生一定范圍的隨機數的源代碼如下:
#include<stdio.h>
#include<stdlib.h>
int main()
{
int i;
for(i=0; i<10; i++) //隨機產生10個數。
{
printf("%d ", rand());
}
return 0;
}
(2)c語言隨機數生成器擴展閱讀
1、如果要隨機生成一個在一定范圍的數,你可以在宏定義中定義一個random(int number)函數,然後在main()裡面直接調用random()函數。
2、在對rand()的前三次調用中,並且此後得到的返回值仍然是在對rand()的第一批調用中所得到的其餘的返回值。因此,只有再次給srand()提供一個隨機的「種子」值,才能再次得到一個隨機數。
❸ 如何製作隨機數 C語言……
首先使用srand(unsigned
int)
函數
設置種子,然後使用rand()返回一個
隨機數
。
使用這兩個函數時需要包含頭文件
#include <stdlib.h>
1、在標準的C庫中函數rand()可以生成0~RAND_MAX之間的一個隨機數,其中RAND_MAX
是stdlib.h
中定義的一個
整數
,它與系統有關;
2、因為rand()函數是按指定的
順序
來產生整數,因此每次執行上面的
語句
都列印相同的兩個值,所以說C語言的隨機並不是真正意義上的隨機,有時候也叫偽隨機數;
3、通常通過為隨機數
生成器
提供一個新的
隨機種子
來達到使
程序
在每次執行時都能生成一個新
序列
的隨機值的效果。函數
srand()(來自stdlib.h)可以為隨機數生成器播散種子。只要種子不同rand()函數就會產生不同的隨機數序列。srand()稱為隨機數生成器的初始化器;
示例代碼:
#include <time.h> //用到了time函數
#include <stdlib.h>
#include <stdio.h>
int main()
{
int i, number;
srand((unsigned int) time(NULL)); //用時間做種,每次產生隨機數不一樣
for (i=0; i<10; i++)//產生10個隨機數
{
number = rand() % 12 + 1;//產生1-13的隨機數
printf("%d\n", number);
}
return 0;
}
❹ c語言中如何生成1個0到1的隨機數
C語言中生成1個0到1的隨機數可以執行語句:float b=rand()/(RAND_MAX+1.0);
解析:
標准C庫中函數rand()可以生成0~RAND_MAX之間的一個隨機數,其中RAND_MAX 是stdlib.h 中定義的一個整數,它與系統有關。rand()函數沒有輸入參數,直接通過表達式rand()來引用;
用函數rand取得的隨機數除以(RAND_MAX+1.0),即可確保得到的結果在0到1之間。ISO IEC 9899 2011 (C11)標准中未規定 RAND_MAX 的具體數值。但該標准規定了RAND_MAX 的值應至少為32767。編程的時候,不應該對 RAND_MAX 的具體數值做任何假設。
(4)c語言隨機數生成器擴展閱讀:
相關說明:
1、因為rand()函數是按指定的順序來產生整數,因此每次執行上面的語句都列印相同的兩個值,所以說C語言的隨機並不是真正意義上的隨機。
2、為了使程序在每次執行時都能生成一個新序列的隨機值,我們通常通過為隨機數生成器提供一粒新的隨機種子。函數 srand()(來自stdlib.h)可以為隨機數生成器播散種子。只要種子不同rand()函數就會產生不同的隨機數序列。srand()稱為隨機數生成器的初始化器。
3、隨機種子(Random Seed)是計算機專業術語,一種以隨機數作為對象的以真隨機數(種子)為初始條件的隨機數。一般計算機的隨機數都是偽隨機數,以一個真隨機數(種子)作為初始條件,然後用一定的演算法不停迭代產生隨機數。
❺ c語言如何實現隨機數字的產生
數學意義上的隨機數在計算機上已被證明不可能實現。通常的隨機數是使用隨機數發生器在一個有限大的線性空間里取一個數。「隨機」甚至不能保證數字的出現是無規律的。
我覺得你的程序邏輯似乎不對,看程序a的值應該來自數組num[],假如在第一個for循環中生成的x值為1,第二次仍然生成1,程序將陷入死循環,又或者a是某個特定值,只是你應該給出說明。
使用系統時間作為隨機數發生器是常見的選擇,參考下面的隨機輸出1個1~99數字的程序:
#include
#include
#include
int
main(void)
{
int
i;
time_t
t;
srand((unsigned)
time(&t));
printf("ten
random
numbers
from
0
to
99\n\n");
for(i=0;
i<10;
i++)
printf("%d\n",
rand()
%
100);
return
0;
}
❻ 如何用C語言 寫一個隨機數生成器的程序
#include
<stdio.h>
#include
<time.h>
void
main()
{
int
iNum
=
0;
srand((unsigned)time(0));
iNum
=
rand()
%
100
+
1;
//隨機生成一個數,並對100取余,使它小於100(0~99)。再加1(1~100)
printf("%d\n",
iNum);
\\列印出來這個數
return;
}
如果想多生成幾個隨機數,可以有一個數組存儲,並用for循環實現隨機生成
int
aiNum[10]
=
{0};
int
iLoop
=
0;
//隨機生成10個數
for
(
iLoop
=
0;
iLoop
<
10;
iLoop++
)
{
aiNum[iLoop]
=
rand()
%
100
+
1;
}
❼ 怎麼用C語言生成隨機數
假設要生成的隨機數是大於等於20且小於等於100的整數
#include<stdio.h>
#include<time.h>
#include<stdlib.h>
voidmain(){inta,b,x;
a=20;b=100;
srand((unsignedint)time(NULL));//用當前時間生成一個隨機數種子
x=rand()%(b-a+1)+a;
printf("得到一個隨機數:%d ",x);
}
❽ 怎麼在vc++6.0中用C語言產生隨機數
1、rand返回0-RAND_MAX之間均勻分布的偽隨機整數。RAND_MAX必須至少為32767。rand()函數不接受參數,默認以1為種子(即起始值)。隨機數生成器總是以相同的種子開始,所以形成的偽隨機數列也相同,失去了隨機意義。
2、比較理想的是用變化的數,比如時間來作為隨機數生成器的種子。time的值每時每刻都不同。所以種子不同,所以,產生的隨機數也不同。
//C++隨機函數(VCprogram)
#include<stdio.h>
#include<iostream>
#include<time.h>
usingnamespacestd;
#defineMAX100
intmain(intargc,char*argv[])
{
srand((unsigned)time(NULL));//srand()函數產生一個以當前時間開始的隨機種子
for(inti=0;i<10;i++)
cout<<rand()%MAX<<endl;//MAX為最大值,其隨機域為0~MAX-1
return0;
}
❾ 跪求C語言的隨機數生成器的頭文件代碼
這題不是讓自己根據給出的演算法實現么?
給你兩篇參考文獻吧:
C語言產生隨機數:
http://blog.csdn.net/ammana_babi/article/details/1437498
rand ( ) 和 srand ( )【C語言庫函數源代碼】:
http://blog.csdn.net/ammana_babi/article/details/1437498
❿ c語言隨機數生成器
inti=2,j=5;
inta=rand()%(j+1)+i;//a就是i到j的隨機數