8

コードは次のとおりです。

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

int main(void)
{
    int r;
    int i;
    for (i = 0; i < 100; i++)
    {
        r = rand() % 100 + 1;
        printf("%d\n", r);
    }
    return 0;
}

乱数を試していましたが、ある日、入力するのを忘れましたsrand()が、rand()関数はそれでも乱数をランダム化できます(同じシーケンス)。

問題は、指定しない場合、どのシードを使用するかということです。

4

5 に答える 5

7

srandが呼び出されない場合、randはsrand(1)が呼び出されたかのように動作します。

http://www.acm.uiuc.edu/webmonkeys/book/c_guide/2.13.html#rand

于 2013-01-10T05:39:10.340 に答える
4

C標準は、実際には他の回答に記載されている動作を規定しています。

ISO / IEC 9899:2011§7.22.2.2srand機能

¶2[...]rand呼び出しが行われる前にが呼び出された場合、シード値1で最初に呼び出さsrandれたときと同じシーケンスが生成されます。srand

于 2013-01-10T05:57:38.067 に答える
2

manページには次のように記載されています

srand()関数は、その引数をrand()によって返される疑似乱数整数の新しいシーケンスのシードとして設定します。これらのシーケンスは、同じシード値でsrand()を呼び出すことで繰り返すことができます。

シード値が指定されていない場合、rand()関数には値1が自動的にシードされます。

于 2013-01-10T05:39:10.377 に答える
2
If rand() is called before any calls to srand() are made, the same sequence shall 
be generated as when srand() is first called with a seed value of 1.

参照:

http://pubs.opengroup.org/onlinepubs/009695399/functions/rand.html

于 2013-01-10T06:06:04.263 に答える
1

srand()関数は、その引数をrand()によって返される疑似乱数整数の新しいシーケンスのシードとして設定します。これらのシーケンスは、同じシード値でsrand()を呼び出すことで繰り返すことができます。

シード値が指定されていない場合、rand()関数には値1が自動的にシードされます。

于 2013-01-10T09:02:42.063 に答える