江牧律师
首页
往期整理
  •   历史归档
  •   文章分类
  •   文章标签
关于我
江牧
文章
10
分类
2
标签
6
首页
往期整理
历史归档
文章分类
文章标签
关于我
技术学习
C语言中随机数的实现
发布于: 2024-8-26
最后更新: 2024-10-9
次查看
C语言
知识点
type
status
date
slug
summary
tags
category
icon
password
😀
c语言中关于随机数的浅谈

1.关于随机数的随机性问题

我们先来看这样一段代码:
notion image
notion image
查询MSDN手册可知:c语言中的rand()生成的是0~RAND_MAX之间的伪随机数。在调用rand()前需要先用srand()生成一个随机种子。且传入srand()中的参数须是无符号整型unsigned int
notion image
notion image
notion image
notion image
我们会发现,rand()生成的随机数仍是定值。
于是我们发现,想要rand()生成随机数,我们得先用srand()初始化,并在srand()中传入一个随机数。至此,形成了套娃。 如何解决这个问题?我们需要引入时间戳的概念。时间一分一秒地在流逝,时间戳也在随之变化。因此,我们需要用到time()函数。
notion image
time()函数的返回值类型是time_t。而srand()中的参数须是无符号整型unsigned int。
可见终于生成了随机的数字
可见终于生成了随机的数字
  • 需要注意的一点是srand()函数一定要放在主函数中,且只执行一次即可。 原因是:rand()生成随机数要设置种子值,然后按照特定算法生成一个数列,如果在程序中多次调用srand(),并且传入相同的种子值,那么rand()函数每次都会从相同的起点开始生成随机数,计算机就一直把数列第一个数给你,因为你一直都重新调用,导致得到的“随机”数实际上是重复的。

2.关于随机数的范围问题

解决随机数的随机性问题后,我们很快会发现,输出随机数的范围是0~RAND_MAX,而这并不一定是我们想要的范围。例如:只要1~100的随机数。而解决的方法很简单,也很容易想到——取模%。

3.练习

制作一个猜数字游戏: 当选择play时会生成1~100的数字给玩家猜测,猜测失败则继续猜;猜测成功则游戏结束。
 
  • 作者:江牧
  • 链接:https://lawyerjiang.top/article/key/c/1
  • 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。
相关文章
document.write()、textContent、innerText 与innerHTML的区别
计算输入的数字在二进制下包含1的个数
解引用“指向空间已被释放的指针”,会得到怎样的值?
序列中删除指定数字
C语言中将数字0~9与对应字符相互转换
C/C++不能在子函数中求主函数中的数组长度
快速理解C语言指针和数组的关系记一次个人服务器的搭建过程
Loading...
目录
0%
1.关于随机数的随机性问题2.关于随机数的范围问题3.练习
江牧
江牧
无限进步!
文章
10
分类
2
标签
6
最新发布
记一次个人服务器的搭建过程
记一次个人服务器的搭建过程
2025-4-28
document.write()、textContent、innerText 与innerHTML的区别
document.write()、textContent、innerText 与innerHTML的区别
2024-10-9
起点
起点
2024-10-9
解引用“指向空间已被释放的指针”,会得到怎样的值?
解引用“指向空间已被释放的指针”,会得到怎样的值?
2024-10-9
C语言中将数字0~9与对应字符相互转换
C语言中将数字0~9与对应字符相互转换
2024-10-9
C/C++不能在子函数中求主函数中的数组长度
C/C++不能在子函数中求主函数中的数组长度
2024-10-9
公告
-- 本网站正处于大规模装修建设中 --
目录
0%
1.关于随机数的随机性问题2.关于随机数的范围问题3.练习
2022-2025 江牧.

江牧律师 | 无限进步!

Powered by NotionNext 4.7.4.