首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >关于C语言随机数

关于C语言随机数

作者头像
用户7272142
发布于 2023-10-11 20:58:58
发布于 2023-10-11 20:58:58
1.3K0
举报
文章被收录于专栏:Republic博客Republic博客

rand()

在编写内存泄露的代码时候,用到了随机数这个概念,秉持着深入浅出的学习风格,我对涉及到的知识进行了总结。 我们洗牌 就是把不同的牌交换不同的位置 牌是54 也就是交换最大跨度就是54 微软提供了获取随机数的函数 rand(speed) 种子值。 如果未指定 seed,则 SQL Server 数据库引擎将随机分配种子值。 对于指定的种子值,返回的结果始终相同。

我们多次运行程序发现所给的返回值都一样 这就相当于什么 每次洗牌结果位置都是一样的。就没有意义了。 我们没有给rand填上参数 默认会随机生成一个位于 0 ~ RAND_MAX之间的整数。在实际编程中,我们也不需要知道 RAND_MAX 的具体值,把它当做一个很大的数来对待即可。 示例:

代码语言:javascript
复制
#include<stdio.h>
#pragma    warning (disable:4996)
int main()
{
    int i;
    do
    {
        printf("输入1继续\n");
        scanf("%d", &i);
        int randn = rand(5666);
        printf("随机数%d\n", randn);

    } while (i);
}

要研究这个问题我们就要能起给出什么是随机数 rand()返回的是一个伪随机数,是根据一个数值按照某个公式推出来的,这个数值我们叫种子。种子只有在系统重启之后才会发生变化,所以根据一个固定的种子推算出来的伪随机数,我们在每次运行的时候,都是一样的。

srand

void srand (unsigned int seed); srand()可以改变这个种子 也就是重新播种种子 根据参数播种种子 只要参数每次运行是不一样的,播种的种子就是随机的,所以可以用time()函数获取系统时间换算的秒数 肯定是任何时候都不一样的。 srand((unsigned)time(NULL)); 修改上面的代码:

代码语言:javascript
复制
#include<stdio.h>
#pragma    warning (disable:4996)
int main()
{
    int i;
    srand(time(NULL));
    do
    {
        printf("输入1继续\n");
        scanf("%d", &i);
        int randn = rand(5666);
        printf("随机数%d\n", randn);

    } while (i);
}

多次运行可以看到随机数都不一样了

生成一定范围的随机数

在实际开发中,我们往往需要一定范围内的随机数,过大或者过小都不符合要求,那么,如何产生一定范围的随机数呢?我们可以利用取模的方法: 如果我们要生成0~9的随机数 可以rand()%10 //产生0~9的随机数,注意10会被整除 如何自己设置随机数的上限和下限 比如我们生成50~100的随机数如何写 rand()%51+50; //rand()%51生成了0-50的随机数 +50区间两边同增 即50~100 代码示例:

代码语言:javascript
复制
#include<stdio.h>
#pragma    warning (disable:4996)
int main()
{
    int i;
    srand(time(NULL));
    do
    {
        printf("输入1继续\n");
        scanf("%d", &i);
        int randn = rand()%51+50;
        printf("随机数%d\n", randn);

    } while (i);
}

关于取余和取模不再赘述,感兴趣的可以去百度了解一下,符号不同才会有所区别,符号相同,取余== 取模

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-06-21,如有侵权请联系 cloudcommunity@tencent.com 删除
目录
  • rand()
  • srand
  • 生成一定范围的随机数
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档