正文

随机数(Random Number)的问题2005-12-15 19:08:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/smile/8287.html

分享到:

#include <stdio.h>
#include <time.h>
#include <stdlib.h>
main()
{
  int i;
  randomize();      /*这样就行了*/
  i=random(35);
  printf("%d",i);
  getch();
}

--------------------------------------------------------------------------/

程序的关键就是伪随机数的(pseudo-random number)(因为计算机对随机的结果有可能重复,所以叫伪随机数)产生。仅仅rand()函数是不能确保随机的结果序列不同(这点可以从printf("%d",rand());打印看结果,每次都一样),还需要所谓的种子(seed)产生器函数void srand(unsigned int seed);使用参数做种子来使rand()函数的结果序列不同。参数最好每次都能变化,那么运行rand()函数的使用,由于srand函数的种子参数不同,rand()函数随机的结果就不同了。<time.h>里面time函数返回的就是自1970/01/01日开始的时间(用滴答数来表示:ticks)...原型是time_t time(time_t *timer);别被time_t吓倒。time.h里有typedef long time_t原来time_t也就是个long int.而time_t *指针也就是long *.而指针不就是存放地址的嘛。比如cpu32根地址线那么有32位。表示成16进制也就是8个16进制位。比如0X315A45B3.把指针就看普通的整形内存单元放整形数一样。没什么大不了。另外time函数的参数是把它指向的单元用来存放流逝的时间(自从1970/01/01开始).如果是NULL。那么表示不用存放。但返回值还是可以表示流逝的时间。显然每一秒过后,结果都不一样。拿来做种子是最合适的。
那么:
#include<time.h>

#include<stdlib.h>

//rand and srand fuctions are included in stdlib.h

srand((usigned int)NULL);
rand();
另外:int rand(void);返回的是0-RAND_MAX之间的值(RAND_MAX至少是32767,你可以printf打印出来试试,我的compiler打印出来是32767.).
然后想随机比如0-24的数值,那该怎么办呢?0-24我们联想到了求余。比如任何一个数对25求余数。那么余数必然是比该数25小的,必然是0-24里面的一个。所以
假设任何数叫 someNumber,那么someNumber%25(求余数)必然是0-24里面的一个数。哈哈。那么rand()函数反正也是随机的,把它看成这个someNumber,那么rand()%25必然是0-24里面的一个数(因为rand()函数至少可以随机出来数字(0-24)),哈哈,既然rand()是随机的,那么结果就是0-24的随机数了。
好了。 如果要随机N-M的怎么办。办法就是写成0-x的形式那么:(N-M)=(0-(M-N))+N。娃哈哈。比如11-33,那么可以看成(0-22)+11.rand()%23+11.这就是11-33的随机数。

阅读(3298) | 评论(0)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

暂无评论
您需要登录后才能评论,请 登录 或者 注册