为什么这段代码中的rand()总是生成相同的矩阵

时间:2015-06-18 03:40:52

标签: c matrix random

我想创建一个矩阵,其所有元素都是1或0.这就是我尝试过的,它会在我想要的随机位置生成1s和0s的矩阵。但是,它每次都会产生相同的矩阵。

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

int a[10][10];
int i = 0,j= 0,n=0;

int main(void)
{
 populate(5);
 print(5);

 return 0;
}

int populate(int n)
{
 for(i=0;i<n;i++)
 {
  for(j=0;j<n;j++)
  {
   a[i][j] = rand()%2;
  }
 }
}

int print(int n)
{
 for(i=0;i<n;i++)
 {
  for(j=0;j<n;j++)
  {
   printf("%d ",a[i][j]);
  }
  printf("\n");
 }
}

编辑:根据回复,我编辑了我的功能如下。但是我看到我的矩阵现在全部为零或全部。

int populate(int n)
{
 for(i=0;i<n;i++)
 {
  for(j=0;j<n;j++)
  {
   srand (time(NULL));
   a[i][j] = rand()%2;
  }
 }
}

2 个答案:

答案 0 :(得分:1)

  

但是,它每次都会产生相同的矩阵。

那是因为您没有添加代码来为随机数生成器播种。添加

srand(time(NULL));

main开始时,在对rand()进行任何调用之前。

答案 1 :(得分:0)

您需要添加srand ( time(NULL) );

使用作为种子传递的参数初始化伪随机数生成器。

对于srand调用中使用的每个不同种子值,伪随机数生成器可能会在后续调用rand时生成不同的连续结果。

使用相同种子的两个不同初始化将在随后的rand调用中生成相同的连续结果。

如果seed设置为1,则将生成器重新初始化为其初始值,并生成与调用rand或srand之前相同的值。

以下是您如何种子srand

的示例
/* srand example */
#include <stdio.h>      /* printf, NULL */
#include <stdlib.h>     /* srand, rand */
#include <time.h>       /* time */

int main ()
{
  printf ("First number: %d\n", rand()%100);
  srand (time(NULL));
  printf ("Random number: %d\n", rand()%100);
  srand (1);
  printf ("Again the first number: %d\n", rand()%100);

  return 0;
}

编辑:由于OP编辑了问题,以下是解决方案: 在方法的最开始使用srand(time(NULL));

int populate(int n) {
    srand(time(NULL));
    for (i = 0; i < n; i++) {
        for (j = 0; j < n; j++) {
            a[i][j] = rand() % 2;
        }
    }
    return 0;
}