文档库 最新最全的文档下载
当前位置:文档库 › 用c语言产生随机数

用c语言产生随机数

用c语言产生随机数
用c语言产生随机数

用c语言产生随机数

在C语言中,rand()函数可以用来产生随机数,但是这不是真真意义上的随机数,是一个伪随机数,是根据一个数,我们可以称它为种子,为基准以某个递推公式推算出来的一系数,当这系列数很大的时候,就符合正态公布,从而相当于产生了随机数,但这不是真正的随机数,当计算机正常开机后,这个种子的值是定了的,除非你破坏了系统,为了改变这个种子的值,C提供了srand()函数,它的原形是void srand( int a)。

可能大家都知道C语言中的随机函数random,可是random函数并不是ANSI C标准,所以说,random函数不能在gcc,vc等编译器下编译通过。

rand()会返回一随机数值,范围在0至RAND_MAX 间。返回0至RAND_MAX之间的随机数值,RAND_MAX定义在stdlib.h,(其值至少为32767)我运算的结果是一个不定的数,要看你定义的变量类型,int整形的话就是32767。在调用此函数产生随机数前,必须先利用srand()设好随机数种子,如果未设随机数种子,rand()在调用时会自动设随机数种子为1。一般用for语句来设置种子的个数。具体见下面的例子。

一如何产生不可预见的随机序列呢

利用srand((unsigned int)(time(NULL))是一种方法,因为每一次运行程序的时间是不同的。

在C语言里所提供的随机数发生器的用法:现在的C编译器

都提供了一个基于ANSI标准的伪随机数发生器函数,用来生成随机数。它们就是rand()和srand()函数。这二个函数的工作过程如下:1) 首先给srand()提供一个种子,它是一个unsigned int类型,其取值范围从0~65535;

2) 然后调用rand(),它会根据提供给srand()的种子值返回一个随机数(在0到32767之间)

3) 根据需要多次调用rand(),从而不间断地得到新的随机数;

4) 无论什么时候,都可以给srand()提供一个新的种子,从而进一步“随机化”rand()的输出结果。

下面是0~32767之间的随机数程序:

#include

#include

#include //使用当前时钟做种子

void main( void )

{int i;

srand( (unsigned)time( NULL ) ); //初始化随机数

for( i = 0; i < 10;i++ ) //打印出10个随机数

printf( " %d\n", rand() );

}

根据上面的程序可以很容易得到0~1之间的随机数:

#include

#include

#include

main( )

{int i;

srand( (unsigned)time( NULL ) );

for( i = 0; i < 10;i++ )

printf( "%5.2f\n", rand()/32767.0); }

而产生1~100之间的随机数可以这样写:

#include

#include

#include

main( )

{int i;

srand( (unsigned)time( NULL ) );

for( i = 0; i < 10;i++ )

printf( "%d\n", rand()%100+1);

}

二,三个通用的随机数发生器,推荐用第三个

函数名: rand

功能: 随机数发生器

用法: void rand(void);

程序例:

#include

#include

int main(void)

{

int i;

printf("Ten random numbers from 0 to 99\n\n"); for(i=0; i<10; i++)

printf("%d\n", rand() % 100);

return 0;

}

函数名: random

功能: 随机数发生器

用法: int random(int num);

程序例:

#include

#include

#include

/* prints a random number in the range 0 to 99 */ int main(void)

{

randomize();

printf("Random number in the 0-99 range: %d\n", random (100));

return 0;

}

函数名: randomize 这个比较好!

功能: 初始化随机数发生器

用法: void randomize(void);

程序例:

#include

#include

#include

int main(void)

{

int i;

randomize();

printf("Ten random numbers from 0 to 99\n\n");

for(i=0; i<10; i++)

printf("%d\n", rand() % 100);

return 0;

}

在《计算机常用算法》中有介绍随机数的生成算法

三如何产生设定范围内的随机数

由于rand产生的随机数从0到rand_max,而rand_max是一个很大的数,那么如何产生从X~Y的数呢?

从X到Y,有Y-X+1个数,所以要产生从X到Y的数,只需要这样写:

k=rand()%(Y-X+1)+X;

这样,就可以产生你想要的任何范围内的随机数了。

四,产生不重复的随机数

1) #include

#include

#include

#include

swap(int *pm,int *pn) /*必须用指针进行交换*/

{

int temp;

temp=*pm;

*pm=*pn;

*pn=temp;

}

int main(void)

{

int i,a[513];

/*int *pa,*pb;*/

srand( (unsigned)time( NULL ) ); /*定义这个可以产生不同的随机数*/

for(i=1; i<=512; i++){a[i]=i;printf("%4d",a[i]);}

for(i=512; i>=1; i--)

{

/* pa=&a[i]; pb=&a[rand()%i+1];*/

swap(&a[i], &a[rand()%i+1]); /*加一是从一到i的随机,就不会包含0*/

/*不用再定义指针,这样结论是一样的*/

}

printf("\n") ;

for(i=1; i<=64; i++)

printf("%4d",a[i] );

getch(); /*wintc的输出*/

}

2)

#include

#include

#include

int main(void)

{

int a[100]={0}; int i,m;

for(i=1; i<=99; ++i)

printf("%4d",a[i] );

srand( (unsigned)time( NULL ) ); or(i=1; i<=99; i++)

{

while(a[m=rand()%100+1]); a[m] = i;

}

for(i=1; i<=99; ++i) printf("%4d",a[i] );

getch();

}

C语言中产生随机数的方法

C语言中产生随机数的方法 引例:产生10个[100-200]区间内的随机整数。 #include #include //rand函数的头文件 #include //时间函数的头文件 int main() { int i; //循环变量 srand((unsigned) time(NULL)); //产生随机数的起始数据(以时间为种子) for (i=0; i<10; i++) //printf("%d\n", rand()); //产生[0,0x7fff)即[0,32767)以内的随机整数 //printf("%d\n", rand()%100); //产生0-99的随机整数 printf("%d\n", rand()%(200-100+1) + 100); //产生[100,200]内的随机整数return 0; } 在C语言中产生随机数需要以下几个函数的配合使用。 (1)rand函数——产生伪随机数 原型:int rand(void) 头文件:stdlib.h 功能:产生从0到RAND_MAX之间的随机数。RAND_MAX的值通常是0x7fff(十六进制数7FFF,也就是十进制数32767)。 例: #include #include int main() { int k; k = rand(); printf("%d\n", k); return 0; } 编译运行,发现每次运行程序产生的随机数都是一样的。 计算机中产生随机数,实际是采用一个固定的数作为“种子”,在一个给定的复杂算法中计算结果,所以叫“伪随机数”。 C语言中由于采用固定的序列作为种子,所以每次执行所取的是同一个数。 为上面的例子增加一个循环结构: #include #include int main() { int k,i;

用C语言产生随机数

用c语言产生随机数 在C语言中,rand()函数可以用来产生随机数,但是这不是真真意义上的随机数,是一个伪随机数,是根据一个数,我们可以称它为种子,为基准以某个递推公式推算出来的一系数,当这系列数很大的时候,就符合正态公布,从而相当于产生了随机数,但这不是真正的随机数,当计算机正常开机后,这个种子的值是定了的,除非你破坏了系统,为了改变这个种子的值,C提供了srand()函数,它的原形是void srand( int a)。 可能大家都知道C语言中的随机函数random,可是random函数并不是ANSI C标准,所以说,random函数不能在gcc,vc等编译器下编译通过。 rand()会返回一随机数值,围在0至RAND_MAX 间。返回0至RAND_MAX之间的随机数值,RAND_MAX定义在stdlib.h,(其值至少为32767),运算的结果是一个不定的数,要看你定义的变量类型,int整形的话就是32767。在调用此函数产生随机数前,必须先利用srand()设好随机数种子,如果未设随机数种子,rand()在调用时会自动设随机数种子为1。一般用for语句来设置种子的个数。具体见下面的例子。 一如何产生不可预见的随机序列呢 利用srand((unsigned int)(time(NULL))是一种方法,因为每一次运行程序的时间是不同的。

在C语言里所提供的随机数发生器的用法:现在的C编译器都提供了一个基于ANSI标准的伪随机数发生器函数,用来生成随机数。它们就是rand()和srand()函数。这二个函数的工作过程如下:1) 首先给srand()提供一个种子,它是一个unsigned int类型,其取值围从0~65535; 2) 然后调用rand(),它会根据提供给srand()的种子值返回一个随机数(在0到32767之间) 3) 根据需要多次调用rand(),从而不间断地得到新的随机数; 4) 无论什么时候,都可以给srand()提供一个新的种子,从而进一步“随机化”rand()的输出结果。 下面是0~32767之间的随机数程序: #include #include #include //使用当前时钟做种子 void main( void ) {int i; srand( (unsigned)time( NULL ) ); //初始化随机数for( i = 0; i < 10;i++ ) //打印出10个随机数 printf( " %d\n", rand() ); } 根据上面的程序可以很容易得到0~1之间的随机数:

C语言随机函数

编程时有时需要随机输入一些数,这是调用随机函数可以完成此相命令. # include “stdio.h” # include “stdlib.h” # include “time.h” /*需引用的头文件*/ srand((unsigned)time(NULL)); /*随机种子*/ n=rand()%(Y-X+1)+X; /*n为X~Y之间的随机数*/ int rand(void) 函数int rand( void );返回的是一个界于0~32767(0x7FFF)之间的伪随机数,包括0和32767。C预先生成一组随机数,每次调用随机函数时从指针所指向的位置开始取值,因此使用rand()重复运行程序产生的随机数都是相同的,可以通过srand()函数来改变指针位置。 void srand( unsigned int seed ) 改变随机数表的指针位置(用seed变量控制)。一般配合time(NULL)使用,因为时间每时每刻都在改变,产生的seed值都不同。 一直被这个东西弄得模糊不清,终于又去整理了一下.弥补一些细节 主要是对rand()函数的使用//#include 原型int rand(void); 例如:void myrand(int imax) { assert(imax>0); int num = rand(); if(num<=imax) { return num; } else { return (num%imax); }

} 功能产生0到RAND_MAX之间的随机整数.至于RAND_MAX有多大,可以自己编程的时候输出.这是库里自带的宏定义. 像这样的一个函数,就产生了一个0到imax的随机整数.但是,当你多次运行你会发现,每一次产生的值都是一样的.并不是说没有随机,而是随机数发生器(程序产生的随机数是依靠时钟钟断来产生的.因此并不是真正意义上的随机.但对于我们来说,已经够用了)没有被重置.导致结果相同.那下面就看一下几种初始化随机数发生器的办法. srand()函数: 原型: void srand(unsigned seed) 功能: 产生随机数的起始发生数据,和rand函数配合使用 头文件: stdlib.h time.h 例: #include #include #include int main(void) { int i; time_t t;

C语言编程题精选

1. 有函数F(x)=(x+1)2和G(x)=2x+1,输入X值计算F(G(x))的值。 2. 任意输入三个字符,要求首先按逆序输出,然后同行原序输出。 3. 在屏幕上输出如下图案(考虑能否将输出的行数由输入的值来控制): ****** ****** ****** ****** 4. 在屏幕上输出如下图案(考虑将输出的行数由输入的值来控制): * ** *** **** ***** 5. 编程输出如下格式图形(考虑将输出的行数由输入的值来控制): * *** ***** ******* 6. 编程输出如下格式图形(考虑将输出的行数由输入的值来控制): **** *** ** * 7. 编程输出如下格式图形(考虑将输出的行数由输入的值来控制): ******* ***** *** * 8. 编程输出如下格式图形(考虑将输出的行数由输入的值来控制): * *** ***** ******* ***** *** * 9. 编程输出如下格式图形(考虑将输出的行数由输入的值来控制): * *** ***** ******* 10. 编程输出如下格式图形(考虑将输出的行数由输入的值来控制): * ***

***** ******* ***** *** * 11. 编写打印如下图形的程序(考虑将输出的行数由输入的值来控制): * * * * * * * * * * * * * * * * * * * * 12. 编制程序打印如下图形(考虑将输出的行数由输入的值来控制): A BBB CCCCC DDDDDDD EEEEEEEEE FFFFFFFFFFF GGGGGGGGGGGGG 13. 编程打印图形(考虑将输出的行数由输入的值来控制): 1 1 2 1 1 2 3 2 1 1 2 3 4 3 2 1 1 2 3 4 5 4 3 2 1 1 2 3 4 5 6 5 4 3 2 1 14. 编程打印图形(考虑将输出的行数由输入的值来控制): 1 1 2 1 1 2 3 2 1 1 2 3 4 3 2 1 1 2 3 4 5 4 3 2 1 1 2 3 4 5 6 5 4 3 2 1 15. 编程打印图形(考虑将输出的行数由输入的值来控制): 1 2 3 4 5 6 5 4 3 2 1 1 2 3 4 5 4 3 2 1 1 2 3 4 3 2 1 1 2 3 2 1 1 2 1 1 16. 编程打印图形(考虑将输出的行数由输入的值来控制): 1 1 1 1 2 1 1 3 3 1

C语言生成随机函数

程序有一个参数,表示生成的密码的长度 运行的时候要加上,比如./password 8 我写的很简单,参数没做检查,你应该自己去完善一下。 #include #include #include void generate(int len,char* buffer) { /*产生密码用的字符串*/ static const char string[]= "0123456789abcdefghiljklnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"; int i = 0; for(; i < len; i++) { buffer[i] = string[rand()%strlen(string)]; /*产生随机数*/ } } int main(int argc, char* argv[]) { int len = atoi(argv[1]); /*指定生成的密码长度*/ srand(time(0)); /*设定随机数种子*/ char *buffer = (char*)malloc(len + 1); /*分配内存*/ generate(len,buffer); /*生成密码*/ puts(buffer); /*输出到屏幕*/ FILE* fp = fopen("pass","w"); /*打开输出文件*/ if(fp == NULL) return -1; fwrite(buffer, sizeof(char), len, fp); /*写文件*/ fclose(fp); /*关闭文件*/ free(buffer); /*释放动态分配的内存*/ return 0; /*程序结束*/ } 自己可以写一个函数。 IT生活系列群: 50337593 IT-live(软件开发) 计算机软件技术群,技术是相通的,大家取长补短,共同进步吧!--软件不仅仅是一种思想。他是一门艺术 30633141 IT-live(网站建设)

浅谈C语言中如何取随机数

浅谈C语言中如何取随机数 级别:初级 1. 基本函数 在C语言中取随机数所需要的函数是: int rand(void); void srand (unsigned int n); rand()函数和srand()函数被声明在头文件stdlib.h中,所以要使用这两个函数必须包含该头文件: #include 2. 使用方法 rand()函数返回0到RAND_MAX之间的伪随机数(pseudorandom)。RAND_MAX常量被定义在stdlib.h头文件中。其值等于32767,或者更大。 srand()函数使用自变量n作为种子,用来初始化随机数产生器。只要把相同的种子传入srand(),然后调用rand()时,就会产生相同的随机数序列。因此,我们可以把时间作为srand()函数的种子,就可以避免重复的发生。如果,调用rand()之前没有先调用srand(),就和事先调用srand(1)所产生的结果一样。 举个例子,假设我们要取得0~10之间的随机整数(不含10本身): /* 例1:不指定种子的值*/ for (int i=0; i<10; i++) { printf("%d ", rand()%10); } 每次运行都将输出:1 7 4 0 9 4 8 8 2 4 /* 例2:指定种子的值为1 */ srand(1); for (int i=0; i<10; i++) { printf("%d ", rand()%10); } 每次运行都将输出:1 7 4 0 9 4 8 8 2 4 例2的输出结果与例1是完全一样的。 /* 例3:指定种子的值为8 */ srand(8); for (int i=0; i<10; i++) { printf("%d ", rand()%10); } 每次运行都将输出:4 0 1 3 5 3 7 7 1 5 该程序取得的随机值也是在[0,10)之间,与srand(1)所取得的值不同,但是每次运行程序的结果都相同。 /* 例4:指定种子值为现在的时间*/ srand((unsigned)time(NULL)); for (int i=0; i<10; i++) { printf("%d ", rand()%10); } 该程序每次运行结果都不一样,因为每次启动程序的时间都不同。另外需要注意的是,使用time()函数前必须包含头文件time.h。

C语言产生随机整数的方法

产生随机整数的方法: #include #include …… srand((unsigned long)time(0)); /*产生随机数种子*/ a=rand()*limit/RAND_MAX; /*rand()在C语言中称为随机函数,它的功能是产生一个不超过RAND_MAX的随机非负整数,RAND_MAX是符号常量,代表整型最大值,即随机数的最大值 32767。limit变量表示随机数的范围。例如产生一个100以内的随机数rand()*100.00/ RAND_MAX */ b=rand()*limit/RAND_MAX; a=rand()*limit/RAND_MAX; 计算机产生随机数,后一个是根据前一个产生的,这样第一个随机数称为种子。如果没有种子,计算机按默认计算,每次产生的数都一样。种子通常是利用系统时钟设定的:srand((unsigned long)time(0)) 产生随机整数的模板: #include "time.h" #include “stdlib.h” …… srand((unsigned long)time(0)); /*产生随机数种子*/ a=rand()*limit/RAND_MAX; //limit表示随机数范围0~limit。

b=rand()*limit/RAND_MAX; a=rand()*limit/RAND_MAX; 【例题】两个随机数的加减法 #include "time.h" #include "stdlib.h" #include "stdio.h" int main() { int a,b,z,limit; /* limit随机数的最大值——范围*/ printf("please input the limit\n"); scanf("%d",&limit); while(1) { srand((unsigned long)time(0)); /*产生随机数种子*/ a=rand()*limit/RAND_MAX; b=rand()*limit/RAND_MAX; a=rand()*limit/RAND_MAX; printf("%d+%d=",a,b); scanf("%d",&z); if((a+b)==z) printf("good!\n"); else printf("error!\n"); } while(1); return 0; }

用C语言的rand()和srand()产生伪随机数的方法总结

标准库(被包含于中)提供两个帮助生成伪随机数的函数: 函数一:int rand(void); 从srand (seed)中指定的seed开始,返回一个[seed, RAND_MAX(0x7fff))间的随机整数。 函数二:void srand(unsigned seed); 参数seed是rand()的种子,用来初始化rand()的起始值。 可以认为rand()在每次被调用的时候,它会查看: 1)如果用户在此之前调用过srand(seed),给seed指定了一个值,那么它会自动调用srand(seed)一次来初始化它的起始值。 2)如果用户在此之前没有调用过srand(seed),它会自动调用srand(1)一次。 根据上面的第一点我们可以得出: 1)如果希望rand()在每次程序运行时产生的值都不一样,必须给srand(seed)中的seed一个变值,这个变值必须在每次程序运行时都不一样(比如到目前为止流逝的时间)。 2)否则,如果给seed指定的是一个定值,那么每次程序运行时rand()产生的值都会一样,虽然这个值会是[seed, RAND_MAX(0x7fff))之间的一个随机取得的值。 3)如果在调用rand()之前没有调用过srand(seed),效果将和调用了srand(1)再调用rand()一样(1也是一个定值)。 举几个例子,假设我们要取得0~6之间的随机整数(不含6本身): 例一,不指定seed: for(int i=0;i<10;i++){ ran_num=rand() % 6; cout<

C和C随机数或字符串生成源码图文稿

C和C随机数或字符串 生成源码 文件管理序列号:[K8UY-K9IO69-O6M243-OL889-F88688]

1. 基本函数 在C语言中取随机数所需要的函数是: rand()函数和srand()函数被声明在头文件stdlib.h中,所以要使用这两个函数必须包含该头文件: 2. 使用方法 rand()函数返回0到RAND_MAX之间的伪随机数(pseudorandom)。RAND_MAX常量被定义在stdlib.h头文件中。其值等于32767,或者更大。 srand()函数使用自变量n作为种子,用来初始化随机数产生器。只要把相同的种子传入srand(),然后调用rand()时,就会产生相同的随机数序列。因此,我们可以把时间作为srand()函数的种子,就可以避免重复的发生。如果,调用rand()之前没有先调用srand(),就和事先调用srand(1)所产生的结果一样。 每次运行都将输出:1 7 4 0 9 4 8 8 2 4

每次运行都将输出:1 7 4 0 9 4 8 8 2 4 例2的输出结果与例1是完全一样的。 每次运行都将输出:4 0 1 3 5 3 7 7 1 5 该程序取得的随机值也是在[0,10)之间,与srand(1)所取得的值不同,但是每次运行程序的结果都相同。

该程序每次运行结果都不一样,因为每次启动程序的时间都不同。另外需要注意的是,使用time()函数前必须包含头文件time.h。 3. 注意事项 求一定范围内的随机数。 如要取[0,10)之间的随机整数,需将rand()的返回值与10求模。randnumber =rand()% 10; 那么,如果取的值不是从0开始呢你只需要记住一个通用的公式。 要取[a,b)之间的随机整数(包括a,但不包括b),使用: (rand() % (b - a)) + a 伪随机浮点数。 要取得0~1之间的浮点数,可以用: rand() / (double)(RAND_MAX) 如果想取更大范围的随机浮点数,比如0~100,可以采用如下方法: rand() /((double)(RAND_MAX)/100) 其他情况,以此类推,这里不作详细说明。 当然,本文取伪随机浮点数的方法只是用来说明函数的使用办法,你可以采用更好的方法来实现。 举个例子,假设我们要取得0~10之间的随机整数(不含10本身):

实用C语言中有关随机函数的使用详解

c语言中有关随机函数的使用详解 在C语言中,rand()函数可以用来产生随机数,但是这不是真真意义上的随机数,是一个伪随机数,是根据一个数,我们可以称它为种子,为基准以某个递推公式推算出来的一系数,当这系列数很大的时候,就符合正态公布,从而相当于产生了随机数,但这不是真正的随机数,当计算机正常开机后,这个种子的值是定了的,除非你破坏了系统,为了改变这个种子的值,C提供了srand()函数,它的原形是void srand( int a)。 可能大家都知道C语言中的随机函数random,可是random 函数并不是ANSI C标准,所以说,random函数不能在gcc,vc 等编译器下编译通过。 rand()会返回一随机数值,范围在0至RAND_MAX 间。返回0至RAND_MAX之间的随机数值,RAND_MAX定义在stdlib.h,(其值至少为32767)我运算的结果是一个不定的数,要看你定义的变量类型,int整形的话就是32767。在调用此函数产生随机数前,必须先利用srand()设好随机数种子,如果未设随机数种子,rand()在调用时会自动设随机数种子为1。一般用for 语句来设置种子的个数。具体见下面的例子。 一如何产生不可预见的随机序列呢 利用srand((unsigned int)(time(NULL))是一种方法,因为每一次运行程序的时间是不同的。 在C语言里所提供的随机数发生器的用法:现在的C编译

器都提供了一个基于ANSI标准的伪随机数发生器函数,用来生成随机数。它们就是rand()和srand()函数。这二个函数的工作过程如下: 1) 首先给srand()提供一个种子,它是一个unsigned int类型,其取值范围从0~65535; 2) 然后调用rand(),它会根据提供给srand()的种子值返回一个随机数(在0到32767之间) 3) 根据需要多次调用rand(),从而不间断地得到新的随机数; 4) 无论什么时候,都可以给srand()提供一个新的种子,从而进一步“随机化”rand()的输出结果。 下面是0~32767之间的随机数程序: 复制代码代码如下: #include #inl #include #include #include main( ) { int i; srand( (unsigned)time( NULL ) ); for( i = 0; i 10;i++ )

随机数生成函数C

随机数生成函数srand() rand() 2007年12月11日星期二01:42 如果srand每次输入的数值是一样的,那么每次运行产生的随机数也是一样的,srand(n) for(10) rand() 也就是说,以一个固定的数值作为种子是一个缺点。通常的做法是以这样一句代码srand((unsigned) time(NULL));来取代,这样将使得种子为一个不固定的数,这样产生的随机数就不会每次执行都一样了。 1,先看一个例子 #include #include #include using namespace std; 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() ); } 2.关于time.h time.h中包含很多有趣的函数,譬如 char *ctime(long *clock) 本函数把clock所指的时间(如由函数time返回的时间)转换成下列格式的 字符串:Mon Nov 21 11:31:54 1983\n\0 #i nclude #i nclude #i nclude using namespace std; void main() {

用c语言产生随机数rand()

用c语言产生随机数rand() 在C语言中,rand()函数可以用来产生随机数,但是这不是真真意义上的随机数,是一个伪随机数,是根据一个数,我们可以称它为种子,为基准以某个递推公式推算出来的一系数,当这系列数很大的时候,就符合正态公布,从而相当于产生了随机数,但这不是真正的随机数,当计算机正常开机后,这个种子的值是定了的,除非你破坏了系统,为了改变这个种子的值,C提供了srand()函数,它的原形是void srand( int a)。 可能大家都知道C语言中的随机函数random,可是random函数并不是ANSI C标准,所以说,random函数不能在gcc,vc等编译器下编译通过。 rand()会返回一随机数值,范围在0至RAND_MAX 间。返回0至RAND_MAX之间的随机数值,RAND_MAX定义在stdlib.h,(其值至少为32767)我运算的结果是一个不定的数,要看你定义的变量类型,int整形的话就是32767。在调用此函数产生随机数前,必须先利用srand()设好随机数种子,如果未设随机数种子,rand()在调用时会自动设随机数种子为1。一般用for语句来设置种子的个数。具体见下面的例子。

一如何产生不可预见的随机序列呢 利用srand((unsigned int)(time(NULL))是一种方法,因为每一次运行程序的时间是不同的。 在C语言里所提供的随机数发生器的用法:现在的C编译器都提供了一个基于ANSI标准的伪随机数发生器函数,用来生成随机数。它们就是rand()和srand()函数。这二个函数的工作过程如下: 1) 首先给srand()提供一个种子,它是一个unsigned int类型,其取值范围从0~65535; 2) 然后调用rand(),它会根据提供给srand()的种子值返回一个随机数(在0到32767之间) 3) 根据需要多次调用rand(),从而不间断地得到新的随机数; 4) 无论什么时候,都可以给srand()提供一个新的种子,从而进一步“随机化”rand()的输出结果。 下面是0~32767之间的随机数程序: #include #include #include //使用当前时钟做种子 void main( void ) {int i; srand( (unsigned)time( NULL ) ); //初始化随机数 for( i = 0; i < 10;i++ ) //打印出10个随机数

实用C语言编程中生成随机数的初级教程

C语言编程中生成随机数的初级教程 几个概念 随机数:数学上产生的都是伪随机数,真正的随机数使用物理方法产生的。 随机数种子:随机数的产生是由算术规则产生的,srand(seed)的随机数种子不同,rand()的随机数值就不同,倘若每次的随机数种子一样,则rand()的值就一样。所以要产生随机数,则srand(seed)的随机数种子必须也要随机的。 用srand()产生随机数种子 原型:void srand ( unsigned int seed ); 作用是设置好随机数种子,为了让随机数种子是随机的,通常用time(NULL)的值来当seed。 time()用于随机数种子 函数原型:time_t time ( time_t * timer ); time()函数表示返回1970-1-1 00:00:00 到当前时间的秒数。 用的时候这样:srand(unsigned(time(NULL)));例如产生1~10之间的随机整数 #include#includeint main(){ srand(time(NULL)); for(int i=0;i 10;i++) { int randValue=rand()%10; }} 上面的程序中要注意srand是在for循环外面的,如果把srand 放到for循环里面,则每次产生的随机数都相同。 用rand()产生随机数

原型:int rand ( void ); 作用是产生一个随机数,当然随机数是有范围的,为0~RAND_MAX之间,随机数与随机数种子有关。具体来说是,在产生随机数rand()被调用的时候,它会这样执行: 如果用户之前调用过srand(seed)的话,他会重新调用一遍srand(seed)以产生随机数种子; 如果发现没有调用过srand(seed)的话,会自动调用srand(1)一次。 如果调用srand(seed)产生的随机数种子是一样的话(即seed 的值相同),rand()产生的随机数也相同。 所以,如果希望rand()每次调用产生的值都不一样,就需要每次调用srand(seed)一次,而且seed不能相同。这里就是经常采用time(NULL)产生随机数种子的原因。 C语言中可以使用rand()函数来生成一个从0到RAND_MAX的uniform分布。基于这个函数,我们可以构造出一些特定的随机数生成器来满足我们的需求。 (一)0到1的uniform分布: //generate a random number in the range of [0,1]double uniform_zero_to_one(){ return (double)rand()/RAND_MAX;} (二)任意实数区间的uniform分布: //generate a random real number in [start,end]double uniform_real(double start,double end){ double

C语言中的随机数

C语言中的随机数 作者:王璐 随机数,顾名思义就是随机产生的、无规则的数。在编程中,有时我们不想手动从键盘输入数据,而想让电脑自动产生一些数据供我们使用(例如生成100个两位数),就要用到随机数。 随机数的生成方法很简单,在C语言中,我们通过调用随机函数rand()来产生随机数。rand函数是C语言的标准库函数,和我们常用的输入输出函数(scanf和printf)一样可以在程序中直接调用。 rand函数的用法如下: 首先在程序开头预处理命令部分加上#include,其中是C中的标准库头文件,我们在用rand函数时需要用到这个头文件 [注1]。它的作用是为了对rand()函数进行引用性声明,以便在下面的程序中使用它。这和我们在用到scanf和printf函数时需要在程序开头写上#include(标准输入/输出头文件)是一样的。 随机函数rand使用的格式为: A=rand()%x+y; 这条语句的意思是,自动产生一个以y为下限,以x+y为上限的随机数,并把值赋给A。即A为y到x+y之间的随机数。 例如,有语句: int a; a=rand()%89+10; 执行该语句后,a即可得到一个10~100之间的整数赋值。 注意区别于: a=rand()%100; 执行这条语句,a可能取值的上限同样为100,但下限为0,a可以取到10以下的数。相当于:a=rand()%100+0; 下面我们来看一个完整的例子: [eg.1]输入10个两位数,并把他们的和打印出来。 1.从键盘输入数据: #include void main() { int a[10],sum=0; int i; printf("请输入10个2位数:\n"); for(i=0;i<10;i++) { scanf("%d",&a[i]); sum=sum+a[i]; } printf("\n"); printf("这10个数的和是:%d \n",sum); }

用c语言产生随机数

用c语言产生随机数 c learning 2007-11-29 21:51:21 阅读4755 评论7 字号:大中小 在C语言中,rand()函数可以用来产生随机数,但是这不是真真意义上的随机数,是一个伪随机数,是根据一个数,我们可以称它为种子,为基准以某个递推公式推算出来的一系数,当这系列数很大的时候,就符合正态公布,从而相当于产生了随机数,但这不是真正的随机数,当计算机正常开机后,这个种子的值是定了的,除非你破坏了系统,为了改变这个种子的值,C提供了srand()函数, 它的原形是void srand( int a)。 可能大家都知道C语言中的随机函数random,可是random函数并不是ANSI C 标准,所以说,random函数不能在gcc,vc等编译器下编译通过。 rand()会返回一随机数值,范围在0至RAND_MAX 间。返回0至RAND_MAX 之间的随机数值,RAND_MAX定义在stdlib.h,(其值至少为32767)我运算的结果是一个不定的数,要看你定义的变量类型,int整形的话就是32767。在调用此函数产生随机数前,必须先利用srand()设好随机数种子,如果未设随机数种子,rand()在调用时会自动设随机数种子为1。一般用for语句来设置种子的个 数。具体见下面的例子。 一如何产生不可预见的随机序列呢 利用srand((unsigned int)(time(NULL))是一种方法,因为每一次运行程序的时间 是不同的。 在C语言里所提供的随机数发生器的用法:现在的C编译器都提供了一个基于ANSI标准的伪随机数发生器函数,用来生成随机数。它们就是rand()和srand()函数。这二个函数的工作过程如下: 1) 首先给srand()提供一个种子,它是一个unsigned int类型,其取值范围从 0~65535; 2) 然后调用rand(),它会根据提供给srand()的种子值返回一个随机数(在0到 32767之间) 3) 根据需要多次调用rand(),从而不间断地得到新的随机数; 4) 无论什么时候,都可以给srand()提供一个新的种子,从而进一步“随机 化”rand()的输出结果。 下面是0~32767之间的随机数程序:

C语言程序设计 伪随机数的产生

4.3.1伪随机数的产生 产生伪随机数的函数是rand(),该函数可随机生成0~RAND_MAX之间的一个整数。RAND_MAX是头文件中定义的一个符号常量。ANSI规定RAND_MAX的值不小于32767。 在编写程序时经常需要各种范围的随机数,如投骰子时需要的随机数是1~6,投一枚硬币会有正反面,需要的随机数是0~1。根据公式: n=a+rand()%b 可以得到所需范围内的随机数。其中,a为位移,是所需连续整数范围的第一个数,b是比例因子,是所需连续整数范围的宽度,则希望产生1~6之间随机数的公式为:face=1+rand()%6 【例4-3】编写一个模拟投掷硬币的程序,模拟20次,统计出正面出现的次数。 问题分析:每调用一次rand()函数会产生一个随机数,循环20次可以产生20个随机数。硬币有正反两面,用1代表正面,0代表反面,产生伪随机数的公式为rand()%2。 参考程序如下: /*程序名:4_3.c*/ /*功能:模拟投掷硬币20次,打印投掷结果并统计出正面出现的次数*/ #include #include int main() { int i,face,iCount=0; for(i=1;i<=20;i++) { face=rand()%2; printf("%5d",face); if(i%10==0)printf("\n"); if(face)iCount++; } printf("正面出现次数:%d次\n",iCount); return0; } 运行程序,结果为: 1100100000 1111111010 正面出现次数:11次 如果再次运行该程序,会发现结果与上面的相同。这怎么称得上是随机数呢?实际上,每次调用rand函数产生的一系列数似乎是随机的,但每次执行程序所产生的序列则是重复的。程序调试完成后,可以使用函数srand(),通过提供不同的种子产生不同的随机数序列。

C语言随机数产生原理即用法

产生随机数原理: 在计算机中并没有一个真正的随机数发生器,但是可以做到使产生的数字重复率很低,这样看起来好象是真正的随机数,实现这一功能的程序叫伪随机数发生器。有关如何产生随机数的理论有许多,如果要详细地讨论,需要厚厚的一本书的篇幅。不管用什么方法实现随机数发生器,都必须给它提供一个名为种子的初始值。而且这个值最好是随机的,或者至少这个值是伪随机的。种子的值通常是用快速计数寄存器或移位寄存器来生成的。 下面讲一讲在C语言里所提供的随机数发生器的用法。现在编译器都提供了一个基于标准的伪随机数发生器函数,用来生成随机数。它们就是rand()和srand()函数。这二个函数的工作过程如下: 1.首先给srand()提供一个种子,它是一个unsigned int类型,其取 值范围从0~65535; 2.然后调用rand(),它会根据提供给srand()的种子值返回一个随机数0 到32767之间) 3.根据需要多次调用rand(),从而不间断地得到新的随机数; 4.无论什么时候,都可以给srand()提供一个新的种子,从而进一步随机 化”rad() 的输出结果。 这个过程看起来很简单,问题是如果你每次调用srand()时都提供相同的种子值,那么,你将会得到相同的随机数序列,这时看到的现象是没有随机数,而每一次的数都是一样的了。例如,在以17为种子值调用srand()之后,在首次调用rand()时,得到随机数94。在第二次和第三次调用rand()时将分别得到26602和30017,这些数看上去是很随机的(尽管这只是一个很小的数据点集合),但是,在你再次以17为种子值调用srand()后,在对于rand()的前三次调用中,所得的返回值仍然是在对94,26602,30017,并且此后得到的返回值仍然是在对rand()的第一批调用中所得到的其余的返回值。因此只有再次给srand()提供一个随机的种子值,才能再次得到一个随机数。 rand()通常的使用方法: rand()不需要参数,它会返回一个从0到最大随机数的任意整数,最大随机数的大小通常是固定的一个大整数。 这样,如果你要产生0~10的10个整数,可以表达为: int N=rand()%11; 这样,N的值就是一个0~10的随机数,如果要产生1~10,则是这样: int N=1+rand()%11; 总结来说,可以表示为: a+rand()%n 其中的a是起始值,n是整数的范围。 若要0~1的小数,则可以先取得0~10的整数,然后均除以10即可得到随机到十 分位的10个随机小数,若要得到随机到百分位的随机小数,则需要先得到

c语言随机函数的使用

原文地址:C语言:随机函数rand()、srand()、random()和randomized()的区别和用法作者:猎空 声明一点:在VC++中,没有random()和randomize()函数,只有rand()和srand()函数。 其中,random()和randomize()函数的使用的方法分别与rand()和srand()函数的使用方法对应类似。 下面就开始讲rand()和srand()函数的使用: 首先,让我们从宏观的角度,来理解它们的使用机理: 1、这两个函数都在头文件是stdlib.h中 2、rand()函数和srand()函数必须配套使用。 其中,rand()是用来产生随机数的发生器,而srand()函数是用来给rand()函数提供变量(或者称种子)。 因为“种瓜得瓜,种豆得豆”,如果你不通过srand()函数来提供不同的种子,那么rand()函数产生的数就只能是固定的瓜或者豆(其实,如果你的程序中没有使用srand()函数,rand()在产生随机数时,会默认调用srand(1),即种子永远是1)。达不到我们预期的要求。所以 rand()函数总是和srand()函数一起使用。 接下来,让我们看看具体如何调用rand()和srand()函数 1、srand()函数 在VC++中,它的声明是:void srand(unsigned seed) 是一个无返回值、单无符型形参的函数。 根据上面的分析,我们知道产生随机数的一个关键是:在程序每次运行中,让这个seed(种子)都不一样,即是一个可变常数。通常情况下,我们会使用时间来作为seed,即令srand((unsigned)time(NULL))。其中,time()函数在头文件time.h中。time()的声明是:long time(long *locatime),它返回的是一个以秒为单位的当地时间,例如:2010年4月19日17:57:02,则它的返回值是:N(年)*365*24*60*60(这是年部分,还要加月、日、时、分、秒才完整。因为不知道是初始年是哪一年,所以用N表示)我现在这个时刻运行的结果是:1271673894(挺大的一个整数) 2.、rand()函数 在VC++中,它的声明是:int rand(void) ,它返回一个[seed, RAND_MAX (0x7fff))间的随机整数,其中,RAND_MAX是个定值,我用VC++查看是:32767。

C语言如何产生随机数

C语言如何产生随机数 1. 基本函数 2. 使用方法 rand()函数返回0到RAND_MAX之间的伪随机数(pseudorandom)。RAND_MAX常量被定义在stdlib.h头文件中。其值等于32767,或者更大。 srand()函数使用自变量n作为种子,用来初始化随机数产生器。只要把相同的种子传入srand(),然后调用rand()时,就会产生相同的随机数序列。因此,我们可以把时间作为srand()函数的种子,就可以避免重复的发生。如果,调用rand()之前没有先调用srand(),就和事先调用srand(1)所产生的结果一样。 每次运行都将输出:1 7 4 0 9 4 8 8 2 4 每次运行都将输出:1 7 4 0 9 4 8 8 2 4 例2的输出结果与例1是完全一样的。

每次运行都将输出:4 0 1 3 5 3 7 7 1 5 该程序取得的随机值也是在[0,10)之间,与srand(1)所取得的值不同,但是每次运行程序的结果都相同。 该程序每次运行结果都不一样,因为每次启动程序的时间都不同。另外需要注意的是,使用time()函数前必须包含头文件time.h。 3. 注意事项 求一定范围内的随机数。 如要取[0,10)之间的随机整数,需将rand()的返回值与10求模。 那么,如果取的值不是从0开始呢?你只需要记住一个通用的公式。 要取[a,b)之间的随机整数(包括a,但不包括b),使用: (rand() % (b - a)) + a 伪随机浮点数。 要取得0~1之间的浮点数,可以用: rand() / (double)(RAND_MAX) 如果想取更大范围的随机浮点数,比如0~100,可以采用如下方法: rand() /((double)(RAND_MAX)/100) 其他情况,以此类推,这里不作详细说明。 当然,本文取伪随机浮点数的方法只是用来说明函数的使用办法,你可以采用更好的方法来实现。 举个例子,假设我们要取得0~10之间的随机整数(不含10本身): 大家可能很多次讨论过随机数在计算机中怎样产生的问题,在这篇文章中,我会对这个问题进行更深入的探讨,阐述我对这个问题的理解。 首先需要声明的是,计算机不会产生绝对随机的随机数,计算机只能产生“伪

相关文档
相关文档 最新文档