@[TOC]
前言:
1.博主实力有限 ,博文有什么错误,请指出。万分感谢! |
---|
2.对像猜数字,三子棋,扫雷等小游戏我们都需要解决的问题:随机数的生成(其实是伪随机数的生成) |
一.随机数的生成需要的库函数:rand,srand,time
int rand(void ) |
---|
1.rand函数内部通过线性同余法实现,他并不是真的生成随机数,只不过因为其周期特别长,所以在一定范围内可看成随机的。 |
2..rand函数返回一个范围为0到RAND_MAX(0x7fff==32767)的伪随机整数()。在调用rand之前,使用srand()函数为伪随机数生成器设置种子即起点 |
3..头文件:#include <stdlib.h> |
void srand(unsigned int) |
---|
1.参数类型为无符号整形 |
2.用于初始化rand()函数的起点。 |
3.头文件:#include <stdlib.h> |
time_t time( time_t *timer ); |
---|
1.time_t 是long long型,只不过被typedef重新命名了。 |
2..time函数根据系统时钟返回自1970年1月1日午夜(00:00:00)以来经过的秒数。返回值存储在计时器给出的位置中。这个参数可以是NULL ,在这种情况下不存储返回值。 |
3.头文件:#include <time.h> |
二.rand与srand的关系(随机数的生成)
分析看到:
分析:
这样形式的设置种子,每次重新生成随机数仍是相同,因为其种子不变了(和默认1一样道理)。 |
---|
这就需要我们每次都能改变种子,而时间 可以满足我们的需求,对此我们通过时间戳的方法解决这个问题。 |
成功版
1.srand函数的参数类型为unsigned |
---|
2.srand()是以时间戳设置随机种子的,如果我们将其放再循环中,可能在每次循环的时间差很小(毕竟是ms 级的),导致我们设置了同一随机种子。 |