精品伊人久久大香线蕉,开心久久婷婷综合中文字幕,杏田冲梨,人妻无码aⅴ不卡中文字幕

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
rand和srand產生隨機數
userphoto

2010.11.29

關注

randsrand的用法

首先我們要對randsrand有個總體的看法:srand初始化隨機種子,rand產生隨機數,下面將詳細說明。

 

rand(產生隨機數)

表頭文件: #include<stdlib.h>

 

定義函數 :int rand(void)

 

函數說明 :

因為rand的內部實現是用線性同余法做的,他不是真的隨機數,只不過是因為其周期特別長,所以有一定的范圍里可看成是隨機的,rand()會返回一隨機數值,范圍在0RAND_MAX 間。在調用此函數產生隨機數前,必須先利用srand()設好隨機數種子,如果未設隨機數種子,rand()在調用時會自動設隨機數種子為1rand ()產生的是假隨機數字,每次執行時是相同的。若要不同,以不同的值來初始化它.初始化的函數就是srand()

 

返回值:

返回0RAND_MAX之間的隨機整數值,RAND_MAX的范圍最少是在32767之間(int),即雙字節(16位數)。若用unsigned int 雙字節是65535,四字節是4294967295的整數范圍。

0~RAND_MAX每個數字被選中的機率是相同的。

 

范例:

/* 產生介于1 10 間的隨機數值,此范例未設隨機數種子,完整的隨機數產生請參考

srand()*/

#include<stdlib.h>

main()

{

int i,j;

for(i=0;i<10;i++)

{

j=1+(int)(10.0*rand()/(RAND_MAX+1.0));

printf("%d ",j);

}

}

   執行:

 

9 4 8 8 10 2 4 8 3 6

9 4 8 8 10 2 4 8 3 6 //再次執行仍然產生相同的隨機數

 

 

srand(設置隨機數種子)

表頭文件:#include<stdlib.h>

 

定義函數:void srand (unsigned int seed);

 

函數說明:

srand()用來設置rand()產生隨機數時的隨機數種子。參數seed必須是個整數,通常可以利用geypid()time(0)的返回值來當做seed。如果每次seed都設相同值,rand()所產生的隨機數值每次就會一樣。

 

范例

/* 產生介于1 10 間的隨機數值,此范例與執行結果可與rand()參照*/

#include<time.h>

#include<stdlib.h>

main()

{

int i,j;

srand((int)time(0));

for(i=0;i<10;i++)

{

j=1+(int)(10.0*rand()/(RAND_MAX+1.0));

printf(" %d ",j);

}

}

     執行:與rand范例比較

5 8 8 8 10 2 10 8 9 9

2 9 7 4 10 3 2 10 8 7

又或:

"int x = rand() % 100;"來生成 0 100 之間的隨機數這種方法是不或取的,比較好的做法是: j=(int)(n*rand()/(RAND_MAX+1.0))產生一個0n之間的隨機數

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;

}

除以上所說的之外,補充一點就是srand這個函數一定要放在循環外面或者是循環調用的外面,否則的話得到的是相同的數字。

 

MSDN中的例子。

// crt_rand.c

// This program seeds the random-number generator

// with the time, then displays 10 random integers.

//

#include <stdlib.h>

#include <stdio.h>

#include <time.h>

int main( void )

{

   int i;

  

   // Seed the random-number generator with current time so that

   // the numbers will be different every time we run.

   //

   srand( (unsigned)time( NULL ) );

   // Display 10 numbers.

   for( i = 0;   i < 10;i++ )

      printf( "  %6d\n", rand() );

  printf("\n");

  // Usually, you will want to generate a number in a specific range,

  // such as 0 to 100, like this:

  {

     int RANGE_MIN = 0;

     int RANGE_MAX = 100;

     for (i = 0;    i < 10; i++ )

      {

         int rand100 = (((double) rand() /

                        (double) RAND_MAX) * RANGE_MAX + RANGE_MIN);

         printf( "  %6d\n", rand100);

      }

  }

總結:

我們知道rand()函數可以用來產生隨機數,但是這不是真真意義上的隨機數,是一個偽隨機數,是根據一個數,我們可以稱它為種了,為基準以某個遞推公式推算出來的一系數,當這系列數很大的時候,就符合正態公布,從而相當于產生了隨機數,但這不是真正的隨機數,當計算機正常開機后,這個種子的值是定了的,除非你破壞了系統,為了改變這個種子的值,C提供了 srand()函數,它的原形是void srand( int a) 功能是

初始化隨機產生器既rand()函數的初始值,即使把種子的值改成a; 從這你可以看到通過sand()函數,我們是可以產生可以預見的隨機序列,

那我們如何才能產生不可預見的隨機序列呢?我們可能常常需要這樣的隨機序列,是吧。利用srand((unsign)(time(NULL))是一種方法,因為每一次運行程序的時間是不同的,對了,你知道time() 函數的功能是返回從1970/01/01到現在的秒數的吧,可能這個起始時間不正確,你查一下對不對吧,C還提供了另一個更方便的函數, randomize()

原形是void randomize(),功能是用來始初rand() 的種子的初始值,而且該值是不確定的,它相當于srand((unsign)(time(NULL)) 不過應注意的是randomize()的功能要通過time來實現所以在調用它時頭文件要包含time.h罷了

 

 

本站僅提供存儲服務,所有內容均由用戶發布,如發現有害或侵權內容,請點擊舉報
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
問題詳情
隨機數產生srand和rand 的使用
C中的隨機數(媽的, 搞了我3個小時)
用c語言產生隨機數 - meizhe143的日志 - 網易博客
[049]?仿骰子程序-隨機數的產生 -- 一步一腳印 -- 編程愛好者博客
C語言中獲得隨機數的方法(讀書筆記:->)
更多類似文章 >>
生活服務
分享 收藏 導長圖 關注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點擊這里聯系客服!

聯系客服

主站蜘蛛池模板: 大埔区| 呼图壁县| 宝坻区| 张家口市| 开平市| 农安县| 湖北省| 漠河县| 霍城县| 简阳市| 合水县| 修武县| 疏勒县| 胶南市| 贡觉县| 桦甸市| 鸡东县| 惠来县| 商洛市| 东乌珠穆沁旗| 泰州市| 六盘水市| 沁水县| 温州市| 大新县| 碌曲县| 彭水| 铜山县| 长顺县| 仙桃市| 剑阁县| 万山特区| 神农架林区| 吉林省| 潜山县| 天祝| 介休市| 麟游县| 贡嘎县| 岐山县| 社旗县|