栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

【随机数生成详解】--- C语言

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【随机数生成详解】--- C语言

对于初学者而言,自己写想一些小程序了,比如猜数字,三子棋,扫雷游戏等,但是里面有个必须得学会的点,那就是随机数该如何生成,这篇文章带你搞定它。 (当然,欢迎大佬指点!)

相关函数 1、rand()
  • 介绍

函数功能:rand()函数是产生随机数的一个随机函数。
函数返回:返回的随机数是 0 ~ RAND_MAX (32767)之间的随机整数
使用时需包含头文件 #include

但严格意义上来说它不是真正的随机值,在它里面有一个算法,调用它时就会通过种子算出一个数,但是因为该函数的默认种子是 1,就算用它得到了一个数,看似是随机的,其实再次执行程序会发现还是那个数,这就没什么意义了,于是它就被称为伪随机数

因此我们就需要srand()函数来提供随机的种子,rand就会返回随机值了。

  • 用法

获得范围为 0 ~ m-1 之间的整数:

int x = rand() % m 

获得范围为 n ~ m 之间的整数:

 int x = (rand() % m) + n;
  • 示例

2、srand()
  • 介绍

srand函数是随机数发生器的初始化函数。
通俗来说:srand()函数为rand()函数提供随机数种子,rand()就能根据其种子算出伪随机值。

  • 函数原型:
void srand(unsigned int seed)

rand()函数调用前会查看是否有srand()函数给定了种子,有则调用srand(seed)一次来初始化它的起始值。,若没有,那么就默认种子为 1 。

seed值就是我们自己给定的种子,但是这个种子也是不变的,导致仍然是伪随机数,如果我们想让这个种子变化该怎么办?这时候就需要=time()函数了;

  • time()函数

函数功能:获取当前的系统时间
函数返回:返回结果是一个time_t类型

函数原型:

time_t time(time_t * timer)

time_t * timer是一个指针,在这用不到,直接给NULL就行。
返回类型 time_t 是一个时间戳可以将其看作long long int,也就是一个很大的整数。时间在不断的发生变化,时间戳也就跟着变化。

  • 用法
#include 

包含头文件!

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

将time函数返回值转为无符号整型作为随机数种子,此时rand函数所产生的值就是真正的随机值了。

  • 示例

  • 注意

千万不能将srand函数写在循环里,只需要初始化一次即可。

否则不会改变,或者说如果我们两次调用srand函数设置随机数种子之间的时间间隔不超过1s,这会导致我们重置随机数种子,从而等价于使用了一个固定的随机数种子。那么这两次调用最后生成的随机数就是相同的。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/870301.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号