#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條評論
主站蜘蛛池模板: 国内外成人免费视频 | 亚洲免费福利 | 久久欧美 | 久久久视频在线 | 免费午夜在线视频 | 日本免费成人网 | 日日插夜夜操 | 一级特黄特黄毛片欧美的 | 男人私人影院 | 亚洲免费视频一区二区三区 | 久久国产精品视频 | 久久久久亚洲精品一区二区三区 | 精品热99| 日日摸夜夜摸人人嗷嗷叫 | 香蕉九九| 大学生一一级毛片在线播放 | 亚洲国产一区二区a毛片日本 | 夜间福利在线观看 | 欧美特级毛片a够爽 | 国产精品免费精品自在线观看 | 国产一级淫片a视频免费观看 | 天天干夜夜撸 | free性欧美极度另类超级大 | 欧美午夜伦y4480私人影院 | 国产老熟 | 久草青青在线视频 | 麻豆成人久久精品二区三区小说 | 中文字幕亚洲无线码在线一区 | 美女叫春 | 亚洲国产一 | 在线亚洲 欧美 日本专区 | 香蕉成人网 | 一区二区三区高清 | 国产亚洲精品线观看77 | 国产亚洲精品色一区 | 99精品这里只有精品高清视频 | 在线观看麻豆精品国产不卡 | 99国产精品免费视频 | 男人草女人视频 | 99爱色| 久久 在线 |