C语言 实现模拟彩票的《C语言程序设计》:随机产生7个数字(用C语言随机函数产生,[1,33]区间,七个数互

请附带一定的解释……谢谢啦!... 請附带一定的解释……

在C语言里所提供的随机数发生器的用法:现在的C编译器都提供了一个基于ANSI标准的伪随机数发生器函数用来生成随機数。它们就是rand()和srand()函数这二个函数的工作过程如下:

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

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

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

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

rand()%100;产生0-99的随机数高级点的,假如要产生16-59之间的数你可以这样写:rand()%44+16(这里44由59-16+1得到)。其他情况如法炮制!

问题1: 怎样获得一个真囸的随机数要知道,rand()是不能产生真正的随机数的!即使不能产生真正的随机数也要大概接近呀!而rand()好象每次的随机都一样。

之所以rand()每次嘚随机数都一样是因为rand()函数使用不正确各种编程语言返回的随机数(确切地说是伪随机数)实际上都是根据递推公式计算的一组数值,當序列足够长这组数值近似满足均匀分布。如果计算伪随机序列的初始数值(称为种子)相同则计算出来的伪随机序列就是完全相同嘚。这个特性被有的软件利用于加密和解密加密时,可以用某个种子数生成一个伪随机序列并对数据进行处理;解密时再利用种子数苼成一个伪随机序列并对加密数据进行还原。这样对于不知道种子数的人要想解密就需要多费些事了。当然这种完全相同的序列对于伱来说是非常糟糕的。要解决这个问题需要在每次产生随机序列前,先指定不同的种子这样计算出来的随机序列就不会完全相同了。伱可以在调用rand()函数之前调用srand( (unsigned)time( NULL ) )这样以time函数值(即当前时间)作为种子数,因为两次调用rand函数的时间通常是不同的这样就可以保证随机性叻。你也可以使用srand函数来人为指定种子数Windows 9x/NT的游戏FreeCell就允许用户指定种子数,这样用户如果一次游戏没有成功下次还可以以同样的发牌结果再玩一次。

问题2: 我按照上述方法并不能产生随机数仅产生公差为3或4的等差数列:

借用楼上的程序说明一下,谢谢

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

randomize();/*初始化随机种子如果没有这句,就会一直生成相同的数*/

我要回帖

更多关于 《C语言程序设计》 的文章

 

随机推荐