用c语言产生随机数

上传人:宝路 文档编号:16839343 上传时间:2017-11-09 格式:DOC 页数:14 大小:97.75KB
返回 下载 相关 举报
用c语言产生随机数_第1页
第1页 / 共14页
用c语言产生随机数_第2页
第2页 / 共14页
用c语言产生随机数_第3页
第3页 / 共14页
用c语言产生随机数_第4页
第4页 / 共14页
用c语言产生随机数_第5页
第5页 / 共14页
点击查看更多>>
资源描述

《用c语言产生随机数》由会员分享,可在线阅读,更多相关《用c语言产生随机数(14页珍藏版)》请在金锄头文库上搜索。

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

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

3、机序列呢利用 srand(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 #include #include main( )int i;srand( (unsigned)time( NULL ) ); for( i = 0; i #include #include main( )in

5、t i;srand( (unsigned)time( NULL ) ); for( i = 0; i #include int main(void) int i; printf(Ten random numbers from 0 to 99nn); for(i=0; i #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;

6、 函数名: randomize 这个比较好!功 能: 初始化随机数发生器 用 法: void randomize(void); 程序例: #include #include #include int main(void) int i; randomize(); printf(Ten random numbers from 0 to 99nn); for(i=0; i #include #include#include swap(int *pm,int *pn) /*必须用指针进行交换*/int temp;temp=*pm;*pm=*pn;*pn=temp;int main(void)int i

7、,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 #include #includeint main(void)int a100=0; int i,m;for(i=1; i#include #include /使用当前时钟做种子v

8、oid main( void )int i;srand( (unsigned)time( NULL ) ); /初始化随机数for( i = 0; i #include #include main( )int i;srand( (unsigned)time( NULL ) );for( i = 0; i #include #include main( )int i;srand( (unsigned)time( NULL ) );for( i = 0; i #include #include void main() int i; srand(unsigned)time(NULL); i = ra

9、nd() % 100; 这样产生的随机数就是 0-99 之间的, 这二个函数的工作过程如下: 1) 首先给 srand()提供一个种子,它是一个 unsigned int 类型,其取值范围从 065535; 2) 然后调用 rand(),它会根据提供给 srand()的种子值返回一个随机数(在 0 到 32767 之间) 3) 根据需要多次调用 rand(),从而不间断地得到新的随机数; 4) 无论什么时候,都可以给 srand()提供一个新的种子,从而进一步“随机化”rand()的输出结果。#include #include main int i; srand(time(0); /初始化随机

10、种子 i = rand(); /产生随机数 首先,加一个#include 然后设一个变量,如 j,j=rand(),就可以给 j 赋一个 132767 的随机数,如果要获得一个随机函数的十位(其它类似 ),只需令 j=j%10 就行. 添加头文件 #include 然后在文件中添加 srand(unsigned)time(NULL); srand()是用来初始化随机种子数的,因为 rand 的内部实现是用线性同余法做的,它不是真的随机数,只不过是因为其周期特别长,所以有一定的范围里可看成是随机的. 上面是有个随机种子的说明及方法,为了避免重复.然后再 用 随机函数,rand() 就行了.头文件

11、是 stdlib.h random() 产生随机数为 0 或 1 random(n) 产生随机数为 0 到 n 之间的一个随机数 rand() 产生 0 到 32768 之间的一个随机数随机数,顾名思义就是随机产生的、无规则的数。在编程中,有时我们不想手动从键盘输入数据,而想让电脑自动产生一些数据供我们使用(例如生成 100 个两位数),就要用到随机数。随机数的生成方法很简单,在 C 语言中,我们通过调用随机函数 rand()来产生随机数。rand 函数是C 语言的标准库函数,和我们常用的输入输出函数(scanf 和 printf)一样可以在程序中直接调用。rand 函数的用法如下:首先在程序

12、开头预处理命令部分加上#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 即可得

13、到一个 10100 之间的整数赋值。注意区别于:a=rand()%100;执行这条语句,a 可能取值的上限同样为 100,但下限为 0,a 可以取到 10 以下的数。相当于:a=rand()%100+0;下面我们来看一个完整的例子:eg.1输入 10 个两位数,并把他们的和打印出来。1.从键盘输入数据:#includevoid main()int a10,sum=0;int i;printf(请输入 10 个 2 位数:n);for(i=0;i#includevoid main()int a10,sum=0;int i;printf(系统自动生成随机数:n);for(i=0;i。eg.2使用

14、srand 函数对例 1 进行改进:#include#includevoid main()int a10,sum=0;int i;unsigned seed;printf(please enter seed:n); /* 提示输入一个数,作为种子 */scanf(%u,&seed); /* 注意这里%u 用来表示无符号数 */srand(seed); /* 设置随机数生成器的种子 */printf(系统自动生成随机数:n);for(i=0;i,并把红色部分的语句改为:srand(unsigned)time(NULL);其中 time()为时间函数,包含在头文件中 注 2,NULL 是参数。这条

15、语句能够在很短的时间内返回计算机的当前时间,并将这个值转换为无符号整数,作为种子。相当于用 time(NULL)生成的值替换了例 2 中的 seed.写出完整的程序后,运行,就能够自动生成不重复的随机数了,并且省去了 enter seed 的过程。下面的图可以直观表示 srand 与 rand 的关系:srand(当前时间)指定种子rand(种子)使用 time 函数获得当前时间产生随机数 1将随机数 1 作为下次 rand 的种子rand(随机数 1)产生随机数 2继续作为下次的种子 练习题1.掷骰子游戏:每个骰子有 6 个面,分别为 1-6 点,每掷一次只有一个点数朝上。使用随机数模拟掷 6000 次骰子的过程,统计掷出每一面的次数。2.运气游戏:游戏的规则是:每个玩家每次一起掷两个骰子,计算面朝上的两个点数之和。如果第一次掷的结果是 7 或 11,那么玩家就获胜。如果第一次掷到 2,3 或 12,玩家就输了,即庄家获胜。如果第一次掷的结果是其他数(4,5,6,8,9,10)那么玩家需要再次掷骰子,直到掷出的点数与这个结果相同,玩家获胜。但是如果再次掷骰子的过程中掷到了7 点,玩家输,庄家获胜。编程序模拟游戏中玩家掷骰子的过程,要求包含各种不同的投掷情况,并判断玩家获胜/失败。程序结果举例:玩家投掷点数:5+6=11玩家获胜!玩家投掷点数

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号