在实际编程中,我们经常需要生成随机数。因此rand()与srand()出现了,本文详解随机数相关内容

一、rand()函数相关

函数头文件:stdlib.h

函数定义:int rand(void)

函数功能:产生一个随机数

返回值:返回0至RAND_MAX之间的随机整数值

下面我们来进行编写,看下结果

#include

#include

int main(){

int a = rand();

printf("%d\n",a);

return 0;

}

当我们多次运行上面程序后发现,每次生成的数字都是一样的!所以我们来探索下rand()函数的本质:

二、rand()函数的本质——产生一个种子(一个随机数)

实际上,rand() 函数产生的随机数是伪随机数,是根据一个数值按照某个公式推算出来的,这个数值我们称之为“种子”

当我们定义了一个rand()函数,产生的虽然是随机数,但这个随机数在开始就已经产生了且不在变化

也可以说,程序运行时最开始时产生随机数,但后续就相当于一个固定值

既然只能产生一个种子(随机数),那么怎么样才能重新播种(产生新随机数)呢?

三、srand()函数——进行重新播种

函数头文件:stdlib.h

函数定义:void srand(unsinged int seed)

函数功能:设置随机数种子

函数说明:通常可以用getpid()(获取当前进程的进程识别码)或者time(NULL)(获取当前系统的时间信息)来充当种子,保持每次运行时的种子是不一样的

#include

#include

#include

int main() {

int a;

srand(time(NULL));

a = rand();

printf("%d\n", a);

return 0;

}

多次运行后,发现每次运行结果不同,随机数产生成功!

四、生成一定范围内的随机数

在实际开发中,我们往往需要一定范围内的随机数,过大或者过小都不符合要求,那么,如何产生一定范围的随机数呢?我们可以利用取余的方法:

int a = rand() % 10; //产生0~9的随机数,注意10会被整除

int a = rand() % 9+1; //产生1-9的随机数

五、连续生成随机数

利用for循环 来试一下

#include

#include

#include

int main() {

int a, i;

for (i = 0; i < 10; i++) {

srand((unsigned)time(NULL));

a = rand();

printf("%d ", a);

}

return 0;

}

运行结果.png

为什么每次运行结果都相同呢?因为某一小段时间的种子是一样的,利用for循环运行时间很短暂,time()函数只能精确到秒,但for太快,导致种子一样,那么随机数也就一样了

利用unsigned int seed = time(NULL); 定义一个时间种子seed,并在循环中每次将seed进行加减变化,srand(seed+=300)这样就表示播种时间不同了。我们将其写入程序:

#include

#include

#include

int main() {

unsigned int seed = time(NULL);

int a, i;

for (i = 0; i < 10; i++) {

seed+=300; //让播种时间不同

srand(seed);

a = rand();

printf("%d ", a);

}

return 0;

}

修改后运行结果.png

我们可以看到每次循环的结果不同,问题得到解决!

六、for循环与随机数生成函数——记数字

小游戏:最强大脑

1 2 3 4

2s后消失

输入:刚才产生的数字 1 2 3 4

输入正确后,产生多一位元素的 随机数集合 重复游戏

导入头文件

#include

#include //利用 system("cls") 当数字展示一定时间后进行清屏

#include

#include //srand(time(NULL)) time 导入头文件

#include

#include

#include

#include

int main(){

int count = 3; //记录每次生成多少个随机数

while(1)

{

unsigned int seed = time(NULL); //1000

count++; //每次多增加一个数字

//设置随机数的种子

srand(seed);

for(int i = 0; i < count; i++){

//生成一个随机数

int temp2 = rand() % 9 + 1;

printf("%d ",temp2);

}

printf("\n");

// 延时2s

Sleep(2000);

//for(int i = 0; i < 10000000000/15*2; i++);

//刷新屏幕

system("cls");

int temp;

printf("请输入:");

//重新设种子和之前生成时的种子一样

srand(seed);

//接收用户输入 一个一个接收

for(int i = 0; i < count; i++)

{

scanf("%d", &temp);

//获取对应的生成的随机数

int old = rand() % 9 + 1;

//比较输入的和随机数是否相同

printf("old:%d\n", old);

if (temp != old)

{

printf("错误 退出!\n");

exit(EXIT_SUCCESS);

}

}

printf("正确!\n");

}

return 0;

}

思路:首先产生一组随机数存储在缓冲区,再一个一个输入数字,一个一个与对应位置数字进行比对,因此利用到循环,来接受用户一个一个输入。

如何进行比对?这就需要两次生成的随机数完全一致,

感悟:要对随机数的产生有自己的理解,学会利用随机数;编写代码要有逻辑性。

c语言随机变量seed,如何产生随机数?C语言rand()和srand()用法详解相关推荐

  1. 784-C语言rand和srand用法详解

    C语言rand和srand用法详解 在实际编程中,我们经常需要生成随机数,例如,贪吃蛇游戏中在随机的位置出现食物,扑克牌游戏中随机发牌. 在C语言中,我们一般使用 <stdlib.h> 头 ...

  2. c语言连续生成不同随机数_C语言随机数生成教程,C语言rand和srand用法详解

    在实际编程中,我们经常需要生成随机数,例如,贪吃蛇游戏中在随机的位置出现食物,扑克牌游戏中随机发牌. 在C语言中,我们一般使用 头文件中的 rand() 函数来生成随机数,它的用法为: int ran ...

  3. 第十章 结构体_C语言随机数生成教程,C语言rand和srand用法详解

    在实际编程中,我们经常需要生成随机数,例如,贪吃蛇游戏中在随机的位置出现食物,扑克牌游戏中随机发牌. 在C语言中,我们一般使用 <stdlib.h> 头文件中的 rand() 函数来生成随 ...

  4. C语言随机数生成教程,C语言rand和srand用法详解

    在实际编程中,我们经常需要生成随机数,例如,贪吃蛇游戏中在随机的位置出现食物,扑克牌游戏中随机发牌. 在C语言中,我们一般使用 <stdlib.h> 头文件中的 rand() 函数来生成随 ...

  5. 【C语言】C语言随机数生成教程,C语言rand和srand用法详解

    在实际编程中,我们经常需要生成随机数,例如,贪吃蛇游戏中在随机的位置出现食物,扑克牌游戏中随机发牌. 在C语言中,我们一般使用 <stdlib.h> 头文件中的 rand() 函数来生成随 ...

  6. 【知识】C语言随机数生成,C语言rand和srand用法详解

    在实际编程中,我们经常需要生成随机数.例如,贪吃蛇游戏中在随机的位置出现食物,扑克牌游戏中随机发牌. 在C语言中,我们一般使用 <stdlib.h> 头文件中的 rand() 函数来生成随 ...

  7. html语言中注释标记,html注释代码<!--......--> 标签的用法详解

    别小看了简单的html注释代码标签,它的作用还是挺大的,对于复杂而庞大的代码量,有必要在需要说明,备注,解释的地方插入一些注释内容,方便以后编辑.修改.查询代码,还可以对某些不需要显示或执行的代码进行 ...

  8. R语言使用survminer包生存分析及可视化(ggsurvplot)实战详解:从数据集导入、生存对象生成、ggsurvplot可视化参数配置、设置、可视化对比

    R语言使用survminer包生存分析及可视化(ggsurvplot)实战详解:从数据集导入.生存对象生成.ggsurvplot可视化参数配置.设置.可视化对比 目录 R语言使用survminer包生 ...

  9. php函数find的用法,c语言find函数的用法详解

    c语言find函数的用法详解 C语言之find()函数 find函数用于查找数组中的某一个指定元素的位置. 比如:有一个数组[0, 0, 5, 4, 4]: 问:元素5的在什么位置,find函数 返回 ...

最新文章

  1. 图片html代码查看器,360度全景商品图片查看器
  2. python中深浅复制教程
  3. [转]基于ROS平台的移动机器人-4-通过ROS利用键盘控制小车移动
  4. 变换上三角矩阵_关于马尔可夫矩阵的一些个人研究成果、思考过程及相关解释...
  5. HTML5标签用法及描述
  6. Linux arm 下载程序,arm-linux—gcc如何下载安装
  7. 远程通信(RPC,Webservice,RMI,JMS、EJB、JNDI的区别)对比
  8. TokenInsight:反映区块链行业整体表现的TI指数较昨日同期下跌0.25%
  9. 接口自动化测试中的用例编写问题总结
  10. 【图像分割】基于matlab GUI FCMKFCM MRI图像分割【含Matlab源码 582期】
  11. 软件测试主要流程分享
  12. linux 网络问题 ipv4 forwarding
  13. C语言32位系统下基本类型数据所占字节数
  14. 如何从“固定型”思维模式转化为“成长型”思维模式
  15. 微信小程序【渲染层网络层错误】解决方法
  16. Unity程序框架总结归置系列(1)——单例基类
  17. sip 180 183区别
  18. Java代码评审歪诗!让你写出更加优秀的代码!
  19. 测试工作规范及岗位职责
  20. Docker学习(3)-Docker镜像构建和使用

热门文章

  1. python中几种读取文件的方法_科学网—python中几类文件的读写 - 郗强的博文
  2. CNN全连接层怎么转化成一维向量?
  3. Excel2007 小常识
  4. 基于mini2440简单计算器的实现(裸机代码)
  5. BUUCTF [PASECA2019] honey_shop
  6. MySQL: 容器化方式启动
  7. 数据结构(C语言版)严蔚敏---图的操作的相关代码
  8. 在视频背景前加字html,如何在一个视频前加封面(片头) 以及配音乐, 视频如何同时加片头和背景音乐...
  9. 阿里云轻量级服务器远程连接数据库
  10. 什么是真正的用户画像