在stdlib.h中,有两个函数与伪随机数的生成有关:srand和rand。C语言中,随机数表有很多列,srand函数是根据其参数(unsigned类型)来获得一个种子(seed),根据种子来设置从哪一列开始取随机数。rand无参数,返回一个相应的随机数。种子相同,则从同一列随机数中选取,rand每次选取之后会自动选取下一个随机数。以上的所说十分之抽象,但是一下程序可以清楚地解释其原理。

#include <stdio.h>
#include <stdlib.h> int main(void)
{
int seed, i; for (;;)
{
printf("Please input a number to set the seed:");
scanf("%d", &seed); if (seed == 0)
break;
for (i = 0; i < 5; i++)
printf ("%d\t", rand());
printf("\n\n");
} return 0;
}

一下是运行结果:

可见,如果srand设置的种子相同,则会从同一列随机数中选取。那么,究竟如何做到生成真正不同的随机数呢?

问题的关键在于种子的选取。我们的目的是要在不同的时间生成不同的随机数。因此,只要有一个只和时间有关的数,将其传递给srand,就可以达到目的了。这样的函数位于time.h头文件中。函数名即为time。调用time会返回一个和时间有关的整数,具体的用法如下:

/*
* rand2.c
* to create a list of random numbers.
*/ #include <stdio.h>
#include <stdlib.h>
#include <time.h> #define MAXNUM 100 int main(void)
{
int i;
srand((unsigned) time(NULL));
for (i = 0; i < 10; i++)
printf("%d\t", rand()%MAXNUM); printf("\n");
return 0;
}

运行效果如下:

最新文章

  1. Emgu.CV 播放视频
  2. HDU-1257 导弹拦截系统 http://acm.hdu.edu.cn/showproblem.php?pid=1257
  3. 在线音乐网站【04】Part two 功能实现
  4. Android自动化测试之Monkey Test(一)
  5. hql语句查询实体类采用list方法的返回结果集
  6. php时间函数整理
  7. Linux下网络编程学习杂记
  8. Mtom Encoding in WCF
  9. .classpath 和.project文件含义
  10. PropertyPlaceholderConfigurer的用法(使用spring提供的类读取数据库配置信息.properties)
  11. 使用css3属性,大部分浏览器要识别前缀
  12. 不同浏览器对URL最大长度的限制(转)
  13. c# delegate的invoke和bejinInvoke的区别
  14. C++模板杂谈
  15. Hiberante知识点梳理
  16. 指令汇B新闻客户端开发(二) 主页面布局
  17. Java面试题 OOAD &amp; UML+XML+SQL+JDBC &amp; Hibernate
  18. MongoDB导入导出以及数据库备份以及.dat数据
  19. React/VUE 脚手架2.0和3.0
  20. Repository(资源库)模式

热门文章

  1. CSS3:优雅地绘制不规则ICON
  2. 使用memcached加速web应用实例
  3. Linux进程实时监控 - htop
  4. poj 3181 Dollar Dayz (整数划分问题---递归+DP)
  5. WPF之Binding的使用
  6. .NET程序集签名
  7. winform 获取当前项目所在的路径
  8. 使用DataSet数据集插入记录
  9. QML学习心得
  10. VC++深入详解读书笔记-第六章菜单