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

亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

C語言中產生隨機數(shù)

系統(tǒng) 1822 0

問:

C語言中產生隨機數(shù)的函數(shù)是什么?

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

問題補充: rand和srand有什么區(qū)別沒?

答:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void main()
{
int i;
srand((unsigned)time(NULL));
i = rand() % 100;
}
這樣產生的隨機數(shù)就是0-99之間的,
這二個函數(shù)的工作過程如下:
1) 首先給srand()提供一個種子,它是一個unsigned int類型,其取值范圍從0~65535;
2) 然后調用rand(),它會根據(jù)提供給srand()的種子值返回一個隨機數(shù)(在0到32767之間)
3) 根據(jù)需要多次調用rand(),從而不間斷地得到新的隨機數(shù);
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()函數(shù)需要的頭文件是 <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個隨機數(shù)
printf( " %6d/n", rand() );
}
------------------------------------------------------------------------------------------------
算法2:線性同余法
1)將種子設為X0,
2)用一個算法X(n+1)=(a*X(n)+b) mod c產生X(n+1)
一般將c取得很大,可產生0到c-1之間的偽隨機數(shù)
該算法的一個缺點是會出現(xiàn)循環(huán)。
給個C的程序
unsigned int seed = 0; //seed 為種子,要設為全局變量
void mysrand(int i) //初始化種子
{
seed = i;
}

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

調用實例
#include <time.h>
main()
{
int a;
mysrand(time(0));
a = myrand();
return 0;
}
------------------------------------------------------------------------------------------------
下面關于一個另問題的解答:
C語言庫函數(shù)中的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;
}
為什么每次運行的結果都是一樣的??關了重啟結果還是一樣!!
這結果哪像是隨機啊?!!
求高手幫忙解釋一下這個庫函數(shù)的用法?如果能解釋一下上面結果不隨機問題最好.謝謝!
答:
函數(shù)rand所產生的隨機數(shù)實際上是偽隨機數(shù),即反復調用函數(shù)rand所產生的一系列數(shù)似乎是隨機的,但每次執(zhí)行程序所產生的序列則是重復的。要產生真正的隨機數(shù)序列,必須在每一次運行前為rand函數(shù)提供不同的種子,這是由srand函數(shù)提供的。
所以加上srand(time(NULL))就可以產生真正的隨機數(shù)了。

#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下的隨機數(shù)生成
/* --------------------------------------------
*描述: 在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 ]; // 取得參數(shù)

char mynums[ 10 ]; // 預定義10位長度的字符數(shù)組,單片機為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語言中產生隨機數(shù)


更多文章、技術交流、商務合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

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

【本文對您有幫助就好】

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

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 亚洲精品乱码久久久久久中文字幕 | 精品久久久久久中文字幕 | 久草在线久草在线 | 日韩欧美精品有码在线观看 | 日韩视频精品 | 离线枕边人在线观看 | 996re免费热在线视频手机 | 青青青精品免费视频 | 模特精品视频一区 | 9984四虎永久免费网站 | 国产久热精品 | 四虎国产在线观看 | 亚洲+自拍+色综合图区一 | 情趣色视频网站 | 91精品啪国产在线观看免费牛牛 | 久久视频在线 | 日本一线一区二区三区免费视频 | 国产在线精品观看一区 | 亚洲精品国产国语 | 老子影院午夜伦不卡手机 | 国产精品福利影院 | 国产精品久久久久孕妇 | 国产综合亚洲专区在线 | 日本欧美一区二区三区在线 | 色老老精品偷偷鲁 | 日韩二区 | 香蕉在线精品一区二区 | 91精选国产 | 国产激情一区二区三区 | 精品国产精品国产 | 99精品在线播放 | 亚洲欧美在线中文字幕不卡 | 中文字幕日韩在线观看 | 日日干干| 91国内在线观看 | 狠狠色噜噜狠狠狠 | 亚洲成人福利在线 | 一级特黄性色生活片 | 四虎永久免费观看 | 中国jizz日本 | 国产精品久久毛片蜜月 |