您的位置:首页 > 其它

生成伪随机整数rand()

2015-09-22 21:50 225 查看
rand()这个函数对于一个新手来说第一次出现就是在猜字数游戏当中,可是第一次看根本不懂,只是照着套用,直到上周选修课又编程猜字数游戏用到时,觉得是应该好好弄懂了!(废话好多(^__^)

猜字数想让程序生成,就用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啦,我特别去找了些资料,尽量白话文,这样大家都懂了吧,恩,不错,继续加油吧
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: