#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); |