生成伪随机整数rand()
2015-09-22 21:50
225 查看
rand()这个函数对于一个新手来说第一次出现就是在猜字数游戏当中,可是第一次看根本不懂,只是照着套用,直到上周选修课又编程猜字数游戏用到时,觉得是应该好好弄懂了!(废话好多(^__^)
猜字数想让程序生成,就用stdilb.h头文件中的rand()函数,每次调用都会返回一个随机整数,叫伪随机数,范围是0~RAND-MAX
但rand()函数生成序列需要一个初始种子数字,对于特定的种子,生成的序列相同。(即每次猜数游戏调用它猜的都是同一个数字,那还有什么意思?)这个时候就需要srand(),也属于stdlib.h中,调用它可以传递给它的参数作为种子初始化序列,就是这样我们每次猜的数字都会不同,着才是一个正常的游戏,you know?
但这样还不够,time.h头文件中声明的time()函数,返回的是1970年1月1日到现在经过的秒数,所以每次返回值double不同,time()函数的参数值是NULL
这样我们就可以每次得到一个不同的整数了,但是还有一个问题:那就是你猜数字总该有个范围是吧,要不然太大了,猜一辈子吗?也不能这样虐单身dog是吧。上限RAND-MAX相当大,通常为int最大值,但可以缩小范围:
比如猜的数字 x~y
就是 x+rand()%(y-x+1) 【公式】
或者:
float a;
a=rand()%y+x;
这样就是产生[x,x+y)之间的数字,也就是[x,x+y-1]
两种表达方式都是一样的
OK啦,我特别去找了些资料,尽量白话文,这样大家都懂了吧,恩,不错,继续加油吧
猜字数想让程序生成,就用stdilb.h头文件中的rand()函数,每次调用都会返回一个随机整数,叫伪随机数,范围是0~RAND-MAX
int chosen=0; chosen=rand();
但rand()函数生成序列需要一个初始种子数字,对于特定的种子,生成的序列相同。(即每次猜数游戏调用它猜的都是同一个数字,那还有什么意思?)这个时候就需要srand(),也属于stdlib.h中,调用它可以传递给它的参数作为种子初始化序列,就是这样我们每次猜的数字都会不同,着才是一个正常的游戏,you know?
但这样还不够,time.h头文件中声明的time()函数,返回的是1970年1月1日到现在经过的秒数,所以每次返回值double不同,time()函数的参数值是NULL
srand(time(NULL));
int chosen=0; chosen=rand();
这样我们就可以每次得到一个不同的整数了,但是还有一个问题:那就是你猜数字总该有个范围是吧,要不然太大了,猜一辈子吗?也不能这样虐单身dog是吧。上限RAND-MAX相当大,通常为int最大值,但可以缩小范围:
比如猜的数字 x~y
就是 x+rand()%(y-x+1) 【公式】
或者:
float a;
a=rand()%y+x;
这样就是产生[x,x+y)之间的数字,也就是[x,x+y-1]
两种表达方式都是一样的
srand(time(NULL)); int chosen=0; chosen=1+rand()%100; //范围是1~100
OK啦,我特别去找了些资料,尽量白话文,这样大家都懂了吧,恩,不错,继续加油吧
相关文章推荐
- swift--枚举
- Vijos1313 金明的预算方案
- Android Studio 插件--postfix
- SQlite常用语句
- 移动IM开发学习<4>
- 第4周-点是否在圆内
- 网络3层相关的几个问题
- Android基于位置的服务开发,百度地图的使用
- espcms列表页ajax无限加载
- ios textfied文本框设置代码
- [转载]Matlab fmincon函数用法
- spark core源码分析17 RDD相关API
- 轻松搞定面试中的二叉树题目
- 关于js中的闭包
- 解决键盘老是不消失实现delegate委托实例化过程
- 深度学习Matlab工具箱代码注释——cnnapplygrads.m
- Html 嵌入 swf
- 数独设计(1)
- hadoop2.7.1单机版安装部署
- hdu 1028 整数划分 (母函数)