ImageVerifierCode 换一换
格式:DOCX , 页数:8 ,大小:17.84KB ,
资源ID:10601349      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/10601349.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(用C语言产生随机数.docx)为本站会员(b****7)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

用C语言产生随机数.docx

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

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

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

4、而不间断地得到新的随机数;4)无论什么时候,都可以给 srand() 提供一个新的种子,从而进一 步“随机化” rand() 的输出结果。下面是 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

5、main( )int i;srand( (unsigned)time( NULL ) );for( i = 0; i 10;i+ )printf( %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); 二,三个通用的随机数发生器,推荐用第三个 函数名 : rand功 能 : 随机数发生器 用 法 : void rand(

6、void);程序例:#include #include int main(void)int i;printf(Ten random numbers 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();%

7、dn,printf(Random number in the 0-99 range: random (100);return 0;函数名 : randomize 这个比较好! 功 能 : 初始化随机数发生器 用 法 : 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;在计算机常用算法中有

8、介绍随机数的生成算法三 如何产生设定范围内的随机数由于 rand 产生的随机数从 0 到 rand_max ,而 rand_max 是一个 很大的数,那么如何产生从 XY 的数呢?从X到丫,有丫 X + 1个数,所以要产生从X到丫的数,只需 要这样写:k=ra nd()%( Y-X+1)+X;这样,就可以产生你想要的任何范围内的随机数了。 四,产生不重复的随机数1 ) #include #include #include#include swap(int *pm,int *pn) /* 必须用指针进行交换 */int temp;temp=*pm;*pm=*pn;*pn=temp;int mai

9、n(void) int i,a513;/*int *pa,*pb;*/srand( (unsigned)time( NULL ) ); /* 定义这个可以产生不同的随机数*/for(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 #include

10、int main(void)int a100=0; int i,m;for(i=1; i=99; +i) printf(%4d,ai );srand( (unsigned)time( NULL ) ); or(i=1; i=99; i+)while(am=rand()%100+1); am = i;for(i=1; i=99; +i) printf(%4d,ai );getch();srand ( int )time (NULL );设定随机数种子rand()%100 ;产生 0-99 的随机数。高级点的,假如要产生 16-59 之间的数, 你可以这样写: rand () %44+16 (这里

11、 44 由 59-16+1 得到)。其他情况如 法炮制!面是搜回来的:问题 1: 怎样获得一个真正的随机数?要知道, rand() 是不能产生真正的随机数 的 !即使不能产生真正的随机数,也要大概接近呀!而 rand() 好象每次的随机都一样。专家解答 :之所以 rand() 每次的随机数都一样是因为 rand() 函数使用不正确。各种编 程语言返回的随机数 (确切地说是伪随机数) 实际上都是根据递推公式计算的一 组数值,当序列足够长, 这组数值近似满足均匀分布。 如果计算伪随机序列的初 始数值(称为种子)相同,则计算出来的伪随机序列就是完全相同的。这个特性 被有的软件利用于加密和解密。 加密

12、时,可以用某个种子数生成一个伪随机序列 并对数据进行处理; 解密时,再利用种子数生成一个伪随机序列并对加密数据进 行还原。这样,对于不知道种子数的人要想解密就需要多费些事了。当然,这种 完全相同的序列对于你来说是非常糟糕的。 要解决这个问题, 需要在每次产生随 机序列前, 先指定不同的种子, 这样计算出来的随机序列就不会完全相同了。 你 可以在调用 rand() 函数之前调用 srand( (unsigned)time( NULL ) ) ,这样以 time 函数值(即当前时间)作为种子数,因为两次调用 rand 函数的时间通常 是不同的,这样就可以保证随机性了。你也可以使用 srand 函数

13、来人为指定种 子数。Windows 9x/NT 的游戏FreeCell就允许用户指定种子数,这样用户如果一次游戏没有成功,下次还可以以同样的发牌结果再玩一次。问题2: 我按照上述方法并不能产生随机数, 仅产生公差为 3或4 的等差数列:#include #include #include #include void main()for(int i=0;i100000;i+)srand( (unsigned)time( NULL ) );coutrand()endl;专家解答:你的程序是有问题的,你每产生一个随机数之前,都调用一次 srand ,而由 于计算机运行很快,所以你每次用 time 得到的时间都是一样的( time 的时间 精度较低,只有 55ms )。这样相当于使用同一个种子产生随机序列,所以产生 的随机数总是相同的。你应该把 srand 放在循环外:srand( (unsigned)time( NULL ) );for(int i=0;i100000;i+)相关语句感谢下载!欢迎您的下载,资料仅供参考

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1