#include#includevoidmain(){inti;srand((unsigned)time(NULL));i=rand()%100;}這樣產生的隨機數就是0-99之間的,這二個函數的工作過程如下:1)首先給srand" />

日韩久久久精品,亚洲精品久久久久久久久久久,亚洲欧美一区二区三区国产精品 ,一区二区福利

C語言中產生隨機數

系統 1994 0

問:

C語言中產生隨機數的函數是什么?

C語言中產生隨機數的函數是什么?(好象有兩個)以及這兩個函數的頭文件是什么?

問題補充: rand和srand有什么區別沒?

答:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void main()
{
int i;
srand((unsigned)time(NULL));
i = rand() % 100;
}
這樣產生的隨機數就是0-99之間的,
這二個函數的工作過程如下:
1) 首先給srand()提供一個種子,它是一個unsigned int類型,其取值范圍從0~65535;
2) 然后調用rand(),它會根據提供給srand()的種子值返回一個隨機數(在0到32767之間)
3) 根據需要多次調用rand(),從而不間斷地得到新的隨機數;
4) 無論什么時候,都可以給srand()提供一個新的種子,從而進一步“隨機化”rand()的輸出結果。

------------------------------------------------------------------------------------------------

#include <stdlib.h>
#include <stdio.h>
#include <time.h>
int i=0;
float n;
int n1;
while(i<1)
{
n=rand();
if(n>0&&n<10.0)
i++;
}
n1=(int) n;
------------------------------------------------------------------------------------------------
調用rand()函數需要的頭文件是 <stdlib.h>

#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( " %6d/n", rand() );
}
------------------------------------------------------------------------------------------------
算法2:線性同余法
1)將種子設為X0,
2)用一個算法X(n+1)=(a*X(n)+b) mod c產生X(n+1)
一般將c取得很大,可產生0到c-1之間的偽隨機數
該算法的一個缺點是會出現循環。
給個C的程序
unsigned int seed = 0; //seed 為種子,要設為全局變量
void mysrand(int i) //初始化種子
{
seed = i;
}

int myrand() //產生0--32767之間的隨機數
{
seed = (1000*seed+2008) % 32768;
return seed;
}

調用實例
#include <time.h>
main()
{
int a;
mysrand(time(0));
a = myrand();
return 0;
}
------------------------------------------------------------------------------------------------
下面關于一個另問題的解答:
C語言庫函數中的rand()的用法??
#include <stdlib.h>
#include <stdio.h>
#include<conio.h>

int main(void)
{
int i;

printf("Ten random numbers from 0 to 99/n/n");
for(i=0; i<10; i++)
printf("%d/n", rand()%100);
getch();
return 0;
}
為什么每次運行的結果都是一樣的??關了重啟結果還是一樣!!
這結果哪像是隨機啊?!!
求高手幫忙解釋一下這個庫函數的用法?如果能解釋一下上面結果不隨機問題最好.謝謝!
答:
函數rand所產生的隨機數實際上是偽隨機數,即反復調用函數rand所產生的一系列數似乎是隨機的,但每次執行程序所產生的序列則是重復的。要產生真正的隨機數序列,必須在每一次運行前為rand函數提供不同的種子,這是由srand函數提供的。
所以加上srand(time(NULL))就可以產生真正的隨機數了。

#include <stdlib.h>
#include <stdio.h>
#include<conio.h>
#include <time.h>

int main(void)
{
int i;
srand(time(NULL));

printf("Ten random numbers from 0 to 99/n/n");
for(i=0; i<10; i++)
printf("%d/n", rand()%100);
getch();
return 0;
}
------------------------------------------------------------------------------------------------
在C51下的隨機數生成
/* --------------------------------------------
*描述: 在Windowsserver2003,vs.net2003下調試通過
*
*作者:e.Studio·zhzkl
*參考:rfc4122
*-------------------------------------------
*/

#i nclude
< stdio.h >
#i nclude
< stdlib.h >
#i nclude
< conio.h >

#define A3

int AdvancedLinearCongrutial( int x, int a, int b, int c, int m, int max);


int main( int argc, char *
argv[])
{
char * nums = argv[ 1 ]; // 取得參數

char mynums[ 10 ]; // 預定義10位長度的字符數組,單片機為8位應該不會超過這個范圍了
int res = 0 ,pos = 0 ,length = 0 ;

//
將字符流轉換為Int
//
while (nums[pos] != ' /0 '
)
{
length
= length + 1
;
pos
= pos + 1
;
}

pos
= 0 ;
length
= length - 1
;

while (nums[pos] != ' /0 '
)
{
mynums[length
- pos] =
nums[pos];
pos
++
;
}


pos
= 0 ;
while (nums[pos] != ' /0 '
)
{
int m = 1
;
for ( int k = 0 ;k < pos;k ++
)
{
m
= m * 10
;
}


res
= res + (mynums[pos] - 48 ) * m;
pos
= pos + 1
;
}


// 定義隨機種子
//
srand(res);
int x = rand(),a = 2 ,b = 3 ,c = 5 ,m = 65536
;

// 改進的線性同余算法

int i = AdvancedLinearCongrutial(x,a,b,c, 65536 ,rand() % 100 );
printf(
" i=%d "
,i);
printf(
" /tres=%d "
,res);
return
i;
}


// 改進的線性同余算法
int AdvancedLinearCongrutial( int x, int a, int b, int c, int m, int max)
{
for ( int i = 0 ;i < max;i ++
)
{
a
=
A;
for ( int j = 0 ;j < i;j ++
)
{
a
*=
A;
}

x
= (a * x + (a - 1 ) * c / b) % m;
}


return x;
}

C語言中產生隨機數


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 民勤县| 都昌县| 吐鲁番市| 青岛市| 犍为县| 克山县| 莆田市| 获嘉县| 镇雄县| 阿图什市| 凯里市| 广东省| 屯留县| 万山特区| 兴山县| 九龙城区| 治县。| 祥云县| 宁河县| 内江市| 六盘水市| 阿荣旗| 临武县| 洛隆县| 乌鲁木齐县| 延边| 东台市| 惠安县| 铜鼓县| 大悟县| 莱阳市| 台江县| 广德县| 平顶山市| 尼勒克县| 昂仁县| 原阳县| 张家川| 屏南县| 察隅县| 南京市|