随机数产生

上传人:ba****u 文档编号:132270881 上传时间:2022-08-08 格式:DOCX 页数:8 大小:18.46KB
收藏 版权申诉 举报 下载
随机数产生_第1页
第1页 / 共8页
随机数产生_第2页
第2页 / 共8页
随机数产生_第3页
第3页 / 共8页
资源描述:

《随机数产生》由会员分享,可在线阅读,更多相关《随机数产生(8页珍藏版)》请在装配图网上搜索。

1、用 c 语言产生随机数2007-11-29 21:51:21|分类:c learning |标签:|字号大中小 订阅在C语言中,rand()函数可以用来产生随机数,但是这不是真真意义上的随机数,是一个伪随机数,是根据一个数,我们可以称它为种子,为基准以某个递推公式推算出来的一系数,当这系列 数很大的时候,就符合正态公布,从而相当于产生了随机数,但这不是真正的随机数,当计算机正常开机后,这个种子的值是定了的,除非你破坏了系统,为了改变这个种子的值,C提供了sra nd ()函数,它的原形是 void sra nd( int a)。可能大家都知道C语言中的随机函数random,可是random函数

2、并不是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(

3、NULL)是一种方法,因为每一次运行程序的时间是不同的。在C语言里所提供的随机数发生器的用法:现在的C编译器都提供了一个基于ANSI标准的伪随机数发生器函数,用来生成随机数。它们就是rand()和srand()函数。这二个函数的工作过程如下:1)首先给srand()提供一个种子,它是一个unsigned int类型,其取值范围从065535;2)然后调用rand(),它会根据提供给srand()的种子值返回一个随机数(在0到32767之间)3)根据需要多次调用rand(),从而不间断地得到新的随机数;4)无论什么时候,都可以给srand()提供一个新的种子,从而进一步随机化rand()的输出结

4、果。下面是 032767之间的随机数程序:#include #include #include /使用当前时钟做种子void main( void )int i;srand( (unsigned)time( NULL ) ); /初始化随机数for( i = 0; i 10;i+ ) /打印出10个随机数printf( %dn, rand() );根据上面的程序可以很容易得到01 之间的随机数:#include #include #include main( )int i;srand( (unsigned)time( NULL ) );for( i = 0; i 10;i+ )printf(

5、%5.2fn, rand()/32767.0);而产生1100之间的随机数可以这样写:#include #include #include main( )int i;srand( (unsigned)time( NULL ) );for( i = 0; i 10;i+ )printf( %dn, rand()%100+1);come from 二,三个通用的随机数发生器,推荐用第三个函数名: rand功 能 : 随机数发生器用 法: void rand(void);程序例:#include #include int main(void)int i;printf(Ten random numbe

6、rs from 0 to 99nn);for(i=0; i10; i+)printf(%dn, 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: %dn, random (100);return 0;函数名: ran

7、domize 这个比较好!功 能 : 初始化随机数发生器用 法 : void randomize(void);程序例:#include #include #include int main(void)int i;randomize();printf(Ten random numbers from 0 to 99nn);for(i=0; i10; i+)printf(%dn, rand() % 100);return 0;在计算机常用算法中有介绍随机数的生成算法三 如何产生设定范围内的随机数由于rand产生的随机数从0到rand_max,而rand_max是一个很大的数,那么如何产生从XY的数呢

8、?从X到丫,有YX +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,a513;/*int *pa,*pb;*/srand( (unsigned)time( NULL ) ); /*定义这个可以产生不同的随机数*/for(i=1; i=1

9、; i-)/* pa=&ai; pb=&arand()%i+1;*/swap(&ai, &arand()%i+1); /*加一是从一到 i 的随机,就不会包含 0*/*不用再定义指针,这样结论是一样的*/printf(n) ;for(i=1; i=64; i+)printf(%4d,ai );getch(); /*wintc 的输出*/2)#include #include #includeint main(void)int a100=0; int i,m;for(i=1; i=99; +i)printf(%4d,ai );srand( (unsigned)time( NULL ) );for

10、(i=1; i=99; i+)while(am=rand()%100+1);am = i;for(i=1; i=99; +i)printf(%4d,ai );getch();用 c 语言产生随机数2007-11-29 21:51:21| 分类: c learning | 标签: |字号大中小 订阅在C语言中,rand ()函数可以用来产生随机数,但是这不是真真意义上的随机数,是一个伪随机数,是根据一个数,我们可以称它为种子,为基准以某个递推公式推算出来的一系数,当这系列数很大的时候,就符合正态公布,从而相当于产生了随机数,但这不是真正的随机数,当计算机正常开机后,这个种子的值是定了的,除非你破

11、坏了系统,为了改变这个种子的值,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

12、()在调用时会自动设随机数种子为1。一般用for语句来设置种子的个数。具体见下面的例子。一 如何产生不可预见的随机序列呢利用srand(unsigned int)(time(NULL)是一种方法,因为每一次运行程序的时间是不同的。1)首先给srand()提供一个种子,它是一个unsigned int类型,其取值范围从065535;2)然后调用rand(),它会根据提供给srand()的种子值返回一个随机数(在 0到32767之间)3)根据需要多次调用rand(),从而不间断地得到新的随机数;4)无论什么时候,都可以给srand()提供一个新的种子,从而进一步“随机化”rand的输出结果。下面是

13、 032767 之间的随机数程序:#include #include #include /使用当前时钟做种子void main( void )int i;srand( (unsigned)time( NULL ) ); /初始化随机数for( i = 0; i 10;i+ ) /打印出 10个随机数printf( %dn, rand() );根据上面的程序可以很容易得到 01 之间的随机数:#include #include #include main( )int i;srand( (unsigned)time( NULL ) );for( i = 0; i 10;i+ )printf( %5

14、.2fn, rand()/32767.0);而产生1100之间的随机数可以这样写:#include #include #include main( )int i;srand( (unsigned)time( NULL ) );for( i = 0; i 10;i+ )printf( %dn, rand()%100+1);come from 二,三个通用的随机数发生器,推荐用第三个函数名: rand功 能: 随机数发生器用 法: void rand(void);程序例:#include #include int main(void)int i;printf(Ten random numbers

15、from 0 to 99nn);for(i=0; i10; i+)printf(%dn, 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: %dn, random (100);return 0;函数名: rando

16、mize 这个比较好!功 能 : 初始化随机数发生器用 法 : void randomize(void);程序例:#include #include #include int main(void)int i;randomize();printf(Ten random numbers from 0 to 99nn);for(i=0; i10; i+)printf(%dn, rand() % 100);return 0;在计算机常用算法中有介绍随机数的生成算法三 如何产生设定范围内的随机数由于 rand 产生的随机数从 0 到 rand_max ,而 rand_max 是一个很大的数,那么如何产生

17、从 XY 的数呢?从X到Y,有YX+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,a513;/*int *pa,*pb;*/srand( (unsigned)time( NULL ) ); /*定义这个可以产生不同的随机数*/for(

18、i=1; i=1; i-)/* pa=&ai; pb=&arand()%i+1;*/swap(&ai, &arand()%i+1); /*加一是从一到i的随机,就不会包含0*/*不用再定义指针,这样结论是一样的 */printf(n) ;for(i=1; i=64; i+)printf(%4d,ai );getch(); /*wintc 的输出*/2)#include #include #includeint main(void)int a100=0; int i,m;for(i=1; i=99; +i)printf(%4d,ai );srand( (unsigned)time( NULL ) );for(i=1; i=99; i+)while(am=rand()%100+1);am = i;for(i=1; i=99; +i)printf(%4d,ai );getch();

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!