为什么这里不能产生随机数01?

发表于:2007-05-25来源:作者:点击数: 标签:这里产生不能#include随机数
#include stdio.h #include stdlib.h int main( void ) { int num,i; scanf(%d,num); if( num%16 !=0) num -= num%16; srand(2); for( i = 0; i num ; i++ ) { printf( %d, rand() ); if( i%16 ==0) printf(,); if( i%(16*5) == 0) printf(\n); } printf(\n)
#include <stdio.h>
#include <stdlib.h>
int main( void )
  {
    int num,i;
    scanf("%d",&num);
    if( num%16 !=0) num -= num%16;
    srand(2);
    for( i = 0; i <num ; i++ ) {
      printf( "%d", rand() );
      if( i%16 ==0)         printf(",");
      if( i%(16*5) == 0)    printf("\n");
    }
    printf("\n");
    return EXIT_SUCCESS;
 }
# ./a.out
23
1505335290,
173876671919068678826087457574798306190615649815028208641425592771261608745138075962721273043426350501795826911491495850932039335037820715049
#
请帮忙!!

srand()是用来初始化随机种子数的,因为rand的内部实现是用线性同余法
做的,他不是真的随机数,只不过是因为其周期特别长,所以有一定的范围
里可看成是随机的,式子如下 rand = rand*const_1 + c_var; srand函数
就是给它的第一个rand值。用int x = rand() % 100; 来生成 0 到 100 之
间的随机数这种方法是不或取的,比较好的做法是:
j=(int)(n*rand()/(RAND_MAX+1.0))  // 产生一个0到n之间的随机数
把这一句改成srand(time(0));
但我看不懂,我是想仿造这个perl程序写个C版本的。
#!/usr/bin/perl -w
chomp($IN=<>);
$IN -= $IN%16 if($IN%16 !=0);
srand;
for($count=1;$count< $IN; $count++) {
$a=int(rand(2));
print $a ;
print "\," if( $count%16 == 0 );
print "\n" if($count%(16*5) == 0 );
}
print "\n";
# perl one_zero
36
1100011110101101,001100100110101

并不是要取的rand()%10,........??
devel :这样就行了:
srand(2);
j=rand(time(0));
printf("%d",j);

原文转自:http://www.ltesting.net

评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)