100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > c语言随机数猜字 玩猜字游戏顺便理解c语言的伪随机数(rand srand)

c语言随机数猜字 玩猜字游戏顺便理解c语言的伪随机数(rand srand)

时间:2021-12-31 13:12:34

相关推荐

c语言随机数猜字 玩猜字游戏顺便理解c语言的伪随机数(rand srand)

随机数

要想要产生真正的随机数,需要先来了解下面几个函数。

rand()函数

C 库函数 int rand(void) 返回一个范围在 0 到 RAND_MAX 之间的伪随机数。

RAND_MAX 是一个常量,它的默认值在不同的实现中会有所不同,但是值至少是 32767。

srand()函数

C 库函数 void srand(unsigned int seed) 播种由函数 rand 使用的随机数发生器。

seed --这是一个无符号整型值,用于伪随机数生成算法播种。

这里有一个新的概念,也就是“种子”,我们可以简单的理解为产生随机数的起点。

伪随机数生成器会以种子作为起点,产生上述范围内的伪随机数,如果没有设置种子的话,系统会默认seed为1,那么就会产生这样的后果:产生的数是随机的,但每次运行程序,得到的结果都还是上次的随机值,因为随机数产生的起点没变,伪随机数生成器还是按照原来方式进行周期的取值,而这就不是我们所期望的结果。

那么用什么作为种子,让这个起点不断变化呢?时间,就是一个很好的选择!于是我们会用到一个概念——时间戳。

time()函数

C 库函数 ,time_t time(time_t *seconds) 返回自纪元 Epoch(1970-01-01 00:00:00UTC)起经过的时间,以秒为单位。如果 seconds 不为空,则返回值也存储在变量 seconds 中。

time_t这是一个适合存储日历时间类型,如果要作为种子,需要强制类型转换为无符号整型。

time(NULL)将返回计算机目前的时刻与1970年1月1日0时0分0秒之间的时间差,单位是秒。

理解了上述函数之后,再产生随机数就简单多了。

先利用动态的时间去设置一个随机种子:

srand((unsigned int)time(NULL));

1

因为时间戳返回的数值比较大,我们可以取余得到想要的范围,例如我想要的范围是1~100,可以这样做:

num = rand()%100;

1

猜字游戏

好了,知道如何产生随机数以后,我们利用这个随机数来写一个很简单的猜字游戏吧。

#include

#include //rand()和srand()函数的库

#include //time()函数的库

int main()

{

srand((unsigned int)time(NULL));//产生一个动态的随机种子

int input = 0;

int num = 0;

num = rand() % 100;

printf("猜猜我心里想的数,在1~100之间选择:\n");

while ((scanf("%d", &input)) != EOF)

{

if (input > num)

{

printf("你的数猜大了,再试试看。\n");

}

else if (input

{

printf("你的数猜小了,再试试看。\n");

}

else

{

printf("恭喜你猜对了,真是天才啊!\n");

}

}

return 0;

}

程序运行后

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。