Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >【编程经验】C语言中如何使用随机数?

【编程经验】C语言中如何使用随机数?

作者头像
编程范 源代码公司
发布于 2018-04-18 03:18:55
发布于 2018-04-18 03:18:55
2.9K0
举报

C语言中如何使用随机数

随机数的使用,是不少在学C语言过程中进行一些小功能开发的同学的一个技术问题,今天我们就为大家讲解如何在C语言中使用随机数。

通常情况下,使用最多的方法的就是使用rand函数随机生成伪随机数来完成随机数的生成工作。注意这里的伪随机数并非是假的! 只不过是计算机按自己的一套理论生成,并不是”完全理想”状态下的随机数,所以是可以接受的。

函数原型为:int rand(void); 需要包含stdlib头文件,它可以生成一个0 ~RAND_MAX之间的数字,其中RAND_MAX是一个宏,VC6下笔者查看为0x7fff,建议大家亲自上机实验!

这个时候你可能会遇到下面几个问题:

Q1:为什么每次生成的数字都一样?

A1:rand函数每次生成的数字与所谓的”种子”有关,使用rand函数前需要使用srand函数进行种种子(请见后文)。如果没有调用,系统会默认给1,导致每次的随机数都一样。

Q2:为什么最大是0x7fff?

A2:这可能取决于编译器环境,笔者这里是VC6,在rand的函数中看到定义的最大值为0x7fff,如下图:

Q3:如果我想生成特定范围内的数字,该如何写呢?

A3:多多利用%求余运算符即可。如:

生成10以内的数字,可以参考rand()%10

生成1~10之间的数字,可以参考rand()%10+1

特定的,要生成a~b之间的数字,可以参考rand()%(b-a+1)+a

而更多时候,我们希望每次运行生成的数字都不相同,这个时候需要配合srand函数来解决这一问题。关于具体原因,大家可以参考rand函数与srand函数的实现细节来加以理解,代码如下:

/***

*rand.c - random number generator

*

* Copyright (c) Microsoft Corporation. All rights reserved.

*

*Purpose:

* defines rand(), srand() - random number generator

*

*******************************************************************************/

#include <cruntime.h>

#include <mtdll.h>

#include <stddef.h>

#include <stdlib.h>

/***

*void srand(seed) - seed the random number generator

*

*Purpose:

* Seeds the random number generator with the int given. Adapted from the

* BASIC random number generator.

*

*Entry:

* unsigned seed - seed to seed rand # generator with

*

*Exit:

* None.

*

*Exceptions:

*

*******************************************************************************/

void __cdecl srand (

unsigned int seed

)

{

_getptd()->_holdrand = (unsigned long)seed;

}

/***

*int rand() - returns a random number

*

*Purpose:

* returns a pseudo-random number 0 through 32767.

*

*Entry:

* None.

*

*Exit:

* Returns a pseudo-random number 0 through 32767.

*

*Exceptions:

*

*******************************************************************************/

int __cdecl rand (

void

)

{

_ptiddata ptd = _getptd();

return( ((ptd->_holdrand = ptd->_holdrand * 214013L

+ 2531011L) >> 16) & 0x7fff );

}

那么srand函数如何使用呢,先看函数原型:

void srand(unsigned seed); 只需要在rand函数使用之前,调用srand函数传入一个种子即可。但事实上传入一个数,往往产生的随时仍然固定不变。 那么较为聪明的写法目前看来只有使用系统时间作为种子最为合适,所以这里srand的参数往往传入time(NULL)参数作为获取系统当前时间作为种子,来产生不同的结果!

并注意类型一致,srand((unsigned)time(NULL)); 记得添加time.h的头文件!

测试代码如下:

#include<stdio.h>

#include<stdlib.h>

#include<time.h>

int main()

{

int r=0;

int i=0;

srand((unsigned)time(NULL));

while(i++<10)

{

printf("r = %d\n",rand());

}

return 0;

}

大家可以自行上机测试,如发现新的问题或有其他好玩的,欢迎告知我们!

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-02-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 编程范 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
C/C++中随机函数rand()和srand()的用法「建议收藏」
rand()和srand()要一起使用,其中srand()用来初始化随机数种子,rand()用来产生随机数。
全栈程序员站长
2022/08/11
2.4K0
【C语言指南】随机数的实现——rand函数、srand函数和time函数
CPlusPlus中关于该函数的介绍 → rand - C++ 参考 (cplusplus.com)
倔强的石头_
2024/12/06
3.9K0
【C语言指南】随机数的实现——rand函数、srand函数和time函数
rand(),srand()产生随机数
      rand()函数可以用来产生随机数,但是这不是真真意义上的随机数,是一个伪随机数,是根据一个数,我们可以称它为种子,为基准以某个递推公式推算出来的一系数,当这系列数很大的时候,就符合正态公布,从而相当于产生了随机数,但这不是真正的随机数,当计算机正常开机后,这个种子的值是定了的,除非你破坏了系统,为了改变这个种子的值,C提供了 srand()函数,它的原形是void srand( int a).       初始化随机产生器既rand()函数的初始值,即使把种子的值改成a; 从这你可以看到通过
猿人谷
2018/01/17
3.2K0
【干货】小白如何熟练掌握C语言随机数!
随机数的使用,是不少小伙伴在学C语言过程中都会遇到的一个坎,今天老九为大家讲解如何在C语言中使用随机数。 通常情况下,使用最多的方法的就是使用rand函数随机生成伪随机数来完成随机数的生成工作。注意这里的伪随机数并非是假的! 只不过是计算机按自己的一套理论生成,并不是”完全理想”状态下的随机数,所以是可以接受的。 函数原型为:int rand(void); 需要包含stdlib头文件,它可以生成一个0 ~RAND_MAX之间的数字,其中RAND_MAX是一个宏,VC6下笔者查看为0x7fff,建议大
老九君
2018/03/06
2.2K0
【干货】小白如何熟练掌握C语言随机数!
C语言学习系列-->【关于随机数的实现】
程序在先使用rand函数前,先使用一个srand函数,通过 srand 函数的参数seed来设置rand函数⽣成随机数的时候的种⼦,只要种⼦在变化,每次⽣成的随机数序列也就变化起来了。
南桥
2024/01/26
2210
C语言学习系列-->【关于随机数的实现】
【C语言笔记】关于随机数的总结
该函数返回0~RAND_MAX之间的随机数,在stdlib.h中可知道,RAND_MAX为0x7FFF,如:
正念君
2019/06/26
2K0
【C语言笔记】关于随机数的总结
C++随机数(rand和srand)函数用法详解
C++ 提供了一组函数以生成和使用随机数字。随机数字就是从一组可能的值中进行随机选择而获得的一个值。该组中的值都有相同的被选中的几率。
C语言与CPP编程
2020/12/02
6.3K0
C++随机数(rand和srand)函数用法详解
生成随机数的方式你选对了吗?
首先需要说明的是,计算机中生成的随机数严格来说都是伪随机,即非真正的随机数,真正随机数的随机样本不可重现。那么我们来看看代码中有哪些方式可以生成随机数。
编程珠玑
2019/12/26
2.3K0
【C++简明教程】随机数生成
【C++ 简明教程】每次更新将会以代码块的形式发布,可以作为手册或者模块以供查询。
机器视觉CV
2020/07/23
8.5K0
趣味C语言——【猜数字】小游戏
rand() 函数会返回一个伪随机数,伪随机数范围是0~RAND_MAX(大部分编译器上为32767)
用户11162265
2024/06/17
3990
趣味C语言——【猜数字】小游戏
C语言随机数的生成
生成范围: 0~RAND_MAX(32767) ​ 也可以对rand的取模操作,从而控制生成自己想要生成的范围 ​ eg:
黎鹤舞
2024/03/19
6890
C语言随机数的生成
C语言小游戏——1、猜数字
1. 电脑⾃动⽣成1~100的随机数; 2. 玩家猜数字,猜数字的过程中,根据猜测数字的⼤⼩给出相应的反馈,直到猜对,游戏结束。
用户11015888
2024/03/11
3210
C语言小游戏——1、猜数字
【编程概念】--随机数
在编程的过程中经常遇到需要生成随机数的问题,其实这个就是引用系统自带的随机数函数产生数值来使用。 C/C++怎样产生随机数:这里要用到的是rand()函数, srand()函数,C语言/C++里没有自带的random(int number)函数。 (1) 如果你只要产生随机数而不需要设定范围的话,你只要用rand()就可以了:rand()会返回一随机数值, 范围在0至RAND_MAX 间。RAND_MAX定义在stdlib.h, 其值为2147483647。 例如: #include<stdio.h> #
程序员互动联盟
2018/03/16
1K0
c/c++产生随机数
转自:http://blog.csdn.net/beyond0824/article/details/6009908
forrestlin
2022/04/02
1.8K0
C++——随机数算法
在这里,我们要明确,计算机随机化出来的数字都是伪随机数字,就是近似于随机数,简单来说这个伪随机数需要依靠一个种子来决定这个数值的大小。默认情况下,这个种子的值是1。这造成了如果不改变种子的值,我们生成的随机数就会是同一个值。所以,我们就要设置种子
全栈程序员站长
2022/09/14
8850
C++——随机数算法
【编程基础】C语言产生随机数需要了解的几个函数
C语言产生随机数是一个常见的编程功能任务,当然这个也不难,调用两三个函数就出来了,但是你知道这些函数具体是起到怎样的作用,并且是它们是如何产生随机数的吗? 几个概念 随机数:数学上产生的都是伪随机数,真正的随机数使用物理方法产生的。 随机数种子:随机数的产生是由算术规则产生的,srand(seed)的随机数种子不同,rand()的随机数值就不同,倘若每次的随机数种子一样,则rand()的值就一样。所以要产生随机数,则srand(seed)的随机数种子必须也要随机的。 用srand()产生随机数种子 原型:
程序员互动联盟
2018/03/13
1.5K0
随机数:真随机数和伪随机数一样吗_rdrand真随机数
说到随机这个词,相信各位肯定都深有体会了。生活中有太多的不确定因素从各方各面影响着我们,但也正是因为这样我们的人生更加多彩,具有了更多的可能性。
全栈程序员站长
2022/11/03
6.1K0
C/C++——生成随机数
1、不指定范围的随机数 在C/C++中,产生随机数需要使用到函数srand()函数和rand()函数。在C语言中,srand()函数和rand()函数都是定义在 2、在指定范围内生成随机数 2.1、生成在指定区间start~end之间的随机整数: #include <stdio.h> #include <stdlib.h> #include <time.h> int Random(int start, int end){ int dis = end - start; return rand
felixzhao
2018/03/14
1.4K0
三篇文章让你彻底学会C语言中的分支和循环语句——(三)实践巩固
学完并掌握了前面的分支和循环语句,现在我们也可以实现一些简单有趣的功能了,下面我们通过写一个简单的游戏——猜数字游戏,来实践巩固以下我们的学习成果。
Crossoads
2024/10/21
1240
三篇文章让你彻底学会C语言中的分支和循环语句——(三)实践巩固
C语言随机数的生成及猜数字游戏
在写猜数字游戏的代码的时候,我们会用到随机数的生成,在其他的很多场景有时也会用到,在C语言中我们应当怎么去实现随机数的生成呢?
用户11070251
2024/04/11
3680
C语言随机数的生成及猜数字游戏
相关推荐
C/C++中随机函数rand()和srand()的用法「建议收藏」
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档