sese在线视频|婷婷五月天 国产|丝袜在线一区第一页|精品国产污污网址|午夜无套内射视频|91视频亚洲第一|一区二区三区污污|毛片毛片毛片按摩按摩,摸毛片裸体|亚洲熟女av电影|在线观看欧美亚州

學習啦 > 學習英語 > 專業(yè)英語 > 計算機英語 > c語言rand的用法

c語言rand的用法

時間: 長思709 分享

c語言rand的用法

  C語言中rand用于產生隨機數,與他相關的是srand ,下面將詳細說明c語言rand的用法。
  rand(產生隨機數)
  表頭文件: #include
  定義函數 :int rand(void)
  函數說明 :
  因為rand的內部實現是用線性同余法做的,他不是真的隨機數,只不過是因為其周期特別長,所以有一定的范圍里可看成是隨機的,rand()會返回一隨機數值,范圍在0至RAND_MAX 間。在調用此函數產生隨機數前,必須先利用srand()設好隨機數種子,如果未設隨機數種子,rand()在調用時會自動設隨機數種子為1。rand ()產生的是假隨機數字,每次執(zhí)行時是相同的。若要不同,以不同的值來初始化它.初始化的函數就是srand()。
  返回值:
  返回0至RAND_MAX之間的隨機整數值,RAND_MAX的范圍最少是在32767之間(int),即雙字節(jié)(16位數)。若用unsigned int 雙字節(jié)是65535,四字節(jié)是4294967295的整數范圍。
  0~RAND_MAX每個數字被選中的機率是相同的。
  rand的用法范例1:
  /* 產生介于1 到10 間的隨機數值,此范例未設隨機數種子,完整的隨機數產生請參考
  srand()*/
  #include
  main()
  {
  int i,j;
  for(i=0;i<10;i++)
  {
  j=1+(int)(10.0*rand()/(RAND_MAX+1.0));
  printf("%d ",j);
  }
  }
  執(zhí)行:
  9 4 8 8 10 2 4 8 3 6
  9 4 8 8 10 2 4 8 3 6 //再次執(zhí)行仍然產生相同的隨機數
  srand(設置隨機數種子)
  表頭文件:#include
  定義函數:void srand (unsigned int seed);
  函數說明:
  srand()用來設置rand()產生隨機數時的隨機數種子。參數seed必須是個整數,通??梢岳胓eypid()或time(0)的返回值來當做seed。如果每次seed都設相同值,rand()所產生的隨機數值每次就會一樣。
  rand的用法范例2:
  /* 產生介于1 到10 間的隨機數值,此范例與執(zhí)行結果可與rand()參照*/
  #include
  #include
  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);
  }
  }
  執(zhí)行:與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))產生一個0到n之間的隨機數
  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這個函數一定要放在循環(huán)外面或者是循環(huán)調用的外面,否則的話得到的是相同的數字。
  MSDN中的例子。
  // crt_rand.c
  // This program seeds the random-number generator
  // with the time, then displays 10 random integers.
  //
  #include
  #include
  #include
  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的用法總結:
  我們知道rand()函數可以用來產生隨機數,但是這不是真真意義上的隨機數,是一個偽隨機數,是根據一個數,我們可以稱它為種了,為基準以某個遞推公式推算出來的一系數,當這系列數很大的時候,就符合正態(tài)公布,從而相當于產生了隨機數,但這不是真正的隨機數,當計算機正常開機后,這個種子的值是定了的,除非你破壞了系統(tǒng),為了改變這個種子的值,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罷了
512991