rand()与srand()
来源:互联网 发布:中学生机器人编程 编辑:程序博客网 时间:2024/05/17 20:22
由于最近各种做实验以及期末考试,一直没有更新博客。 今天找个时间总结一下。
最近在很多实验中都需要随机数,但是使用不熟练,浪费时间去debug。
主要就是rand与srand的区别与联系
根据>http://www.cplusplus.com/reference/cstdlib/rand/ 上对rand和srand的描述以及实际实验中产生的结果,理解如下:
int rand()是产生在一定范围内(0-- RAND_MAX(32767))的一个随机整数,产生这个随机数需要一个seed(种子)(注意相同的种子会导致在调用rand()后产生相同的结果),而这个种子则是由函数void srand(unsigned a)得出。而参数a可以是任意无符号数,例如 srand(1),也可以是系统当前的时间,如 srand( (unsigned)time( NULL ) )或者srand( (unsigned)time( &t ) ),t是 time_t 类型, time_t 被定义为长整型,它返回从1970年1月1日零时零分零秒到目前为止所经过的时间,单位为秒。(注意相同的a会产生相同的种子)。
由此可知,rand与srand是配合使用的。若调用rand()之前没有调用srand(), 则系统自动调用 srand(), 且将其参数a 设置为1,即 srand(1).下面程序可以很清晰的看出这一点。
#include <stdio.h> /* printf, NULL */#include <stdlib.h> /* srand, rand */#include <time.h> /* time */int main (){ printf ("First number: %d\n", rand()%100);// 之前没有调用srand(),则系统自动调用srand(1); srand (time(NULL)); printf ("Random number: %d\n", rand()%100); srand (1); printf ("Again the first number: %d\n", rand()%100); return 0;}
程序结果
First number: 41Random number: 13Again the first number: 41
头文件:
#include<stdlib.h> //srand(), rand(), RAND_MAX(32767);
#include<time.h> //time(), time_t ;
好了,梳理好上面的关系就可以看具体应用了。
//特别注意下面公式中的 % 与 /..
1.随机生成a--b 之间的整数
srand((unsigned)time(NULL));
int t=rand()%(b-a)+a; //注意 包括a而不包括b
( 若a为0,则写作 int t=rand()%b;)
例:
随机产生1--9之间的整数
srand((unsigned)time(NULL));
int t=rand()%8+1;
2.随机生成(0,1)之间的小数
srand((unsigned)time(NULL));
float t=(float)rand()/RAND_MAX; //产生的小数包含0不包含1
还有一点需要注意:
#include<stdio.h>#include<stdlib.h>#define N 10int main(){ for(int i=0;i<100; ++i) { srand((unsigned)time(null)); printf("%d ", rand()%N); } return 0;}
运行结果 是生成了100个相同的数。究其原因,因为函数 srand((unsigned)time(null)) 每次的初始值为系统当前的时间,因为程序执行的非常快,srand每次得到的系统时间之间相差特别小以至于 程序中srand()函数的初始值都相同,所以产生相同的种子数,因此rand()函数产生相同的随机数。
解决方法: 将 srand((unsigned)time(null)); 移到循环体外边,rand()再次调用时用到的种子是上一次rand() 函数产生的随机数(均不相同), 因此,可以得到100个随机数。
- rand()与srand()用法
- 函数rand()与srand()
- rand()与srand()
- rand()与srand()
- srand与rand
- rand() 与srand() 函数
- 随机数(rand与srand)
- rand 与srand 关系
- rand()与srand()的用法
- rand()与srand()函解析!
- rand与srand(转)
- rand 函数 与 srand 函数
- srand与rand随机数生成
- rand函数与srand函数
- srand函数与rand函数
- rand & srand
- rand()&&srand()
- srand rand
- Failed to initialize Monitor Thread: Unable to establish loopback connection
- 西部数码 linux主机 wordpress 重写规则httpd.conf
- 黑马程序员_正则表达式
- ASP.NET 2.0 回发或回调参数无效
- RakNet官方文档学习笔记
- rand()与srand()
- [Unity3D]事半功倍:界面插件NGUI的使用教程与实例
- JNI介绍及视频教程
- 怎样改变Dialog的大小
- 优缺点比较:JSP架构、JSP开发工具
- 哈希表
- matlab之GUI练习(一)
- 一步步实现基础IDE到大型平台
- 关于Apache2.4限制目录访问配置的问题