精华内容
下载资源
问答
  • c语言随机数生成
    2018-02-13 19:56:36

        C标准库中生成伪随机数的是rand函数,使用这个函数需要包含头文件stdlib.h,它没有参数,返回值是一个介于0RAND_MAX之间的接近均匀分布的整数。 RAND_MAX是该头文件中定义的一个常量,在不同的平台上有不同的取值,但可以肯定它是一个非常大的整数。

        通常我们用到的随机数是限定在某个范围之中的,例如限定在某个范围之中的,例如0~9,而不是0~RAND_MAX,我们可以用%运算符将rand函数的返回值处理一下:int x = rand() % 10;

        上述的伪随机数虽然在分布上是相对均匀的,但是存在一个缺点:每次运行的结果一样。这样有很大的缺陷,因此,C标准库允许我们自己指定一个初值,然后在此基础上生成伪随机数,这个初值称为Seed,可以用srand函数指定Seed。通常我们通过别的途径得到一个不确定的数作为Seed,例如调用time函数得到当前系统时间距19701100:00:00[18]的秒数,然后传给srandsrand(time(NULL));然后再调用rand,得到的随机数就和刚才完全不同了。调用time函数需要包含头文件time.h,这里的NULL表示空指针 。

    更多相关内容
  • C语言随机数生成

    千次阅读 2022-03-05 18:02:38
    随机数生成

    在写代码的过程中,我们常常会生成随机数。例如三子棋中的电脑随机下棋,还有猜数字中的随机数等等。

    那么我们应该如何来生成随机数呢?

    在C语言中,我们一般使用 <stdlib.h> 头文件中的 rand() 函数来生成随机数,它的用法为:

    int rand(void);     void表示不需要参数传递

    下面看一个例子:

    #include <stdio.h>

    #include <stdlib.h>

    int main()

    {

    int n = rand();

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

    return 0;}

    运行结果为:41。

    但是多次运行上面的代码,我们会发现每一次运行的结果都为41,这是为什么呢?随机数怎么不随机了?

    其实,这是因为rand()随机生成的随机数是伪随机数,是根据一个数值按照某个公式推算出来的,这个数值我们称之为“种子”。种子和随机数之间的关系是一种正态分布,如下图所示:

     种子在每次启动计算机时是随机的,但是一旦计算机启动以后它就不再变化了;也就是说,每次启动计算机以后,种子就是定值了,所以根据公式推算出来的结果(也就是生成的随机数)就是固定的。

    这里我们就要用到srand()函数来使这个种子发生变化,srand()函数的用法为:

    void srand(unsigned int seed);      它的头文件为<stdlib.h>。

    它需要一个 unsigned int 类型的参数。在实际开发中,我们可以用时间作为参数,只要每次参数的时间不同,那么生成的种子就不同,最终的随机数也就不同。

    使用 <time.h> 头文件中的 time() 函数即可得到当前的时间(精确到秒),就像下面这样:

    srand((unsigned)time(NULL));

    那么,我们生成随机数代码就如下了:

    #include <stdio.h>

    #include <stdlib.h>

    #include <time.h>

    int main() {

    int n=0;

    srand((unsigned)time(NULL));

    a = rand();

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

    return 0;

    }

    这样我们多次运行程序,每次产生的随机数都不一样了。

    如何生成一定范围内的随机数:

    int a = rand() % 10;    //产生0~9的随机数

    int a = rand() % 19+23;    //产生23~41的随机数
    

     

    展开全文
  • C语言中,我们一般使用 头文件中的 rand() 函数来生成随机数,它的用法为:int rand (void);void 表示不需要传递参数。C语言中还有一个 random() 函数可以获取随机数,但是 random() 不是标准函数,不能在 VC/VS ...

    在实际编程中,我们经常需要生成随机数,例如,贪吃蛇游戏中在随机的位置出现食物,扑克牌游戏中随机发牌。

    在C语言中,我们一般使用 头文件中的 rand() 函数来生成随机数,它的用法为:

    int rand (void);

    void 表示不需要传递参数。

    C语言中还有一个 random() 函数可以获取随机数,但是 random() 不是标准函数,不能在 VC/VS 等编译器通过,所以比较少用。

    rand() 会随机生成一个位于 0 ~ RAND_MAX 之间的整数。

    RAND_MAX 是 头文件中的一个宏,它用来指明 rand() 所能返回的随机数的最大值。C语言标准并没有规定 RAND_MAX 的具体数值,只是规定它的值至少为 32767。在实际编程中,我们也不需要知道 RAND_MAX 的具体值,把它当做一个很大的数来对待即可。

    下面是一个随机数生成的实例:

    #include

    #include

    int main(){

    int a = rand();

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

    return 0;

    }

    运行结果举例:

    193

    随机数的本质

    多次运行上面的代码,你会发现每次产生的随机数都一样,这是怎么回事呢?为什么随机数并不随机呢?

    实际上,rand() 函数产生的随机数是伪随机数,是根据一个数值按照某个公式推算出来的,这个数值我们称之为“种子”。种子和随机数之间的关系是一种正态分布,如下图所示:

    33dac2a3e4a0d6e352a0291092bc693d.gif

    C语言随机数和种子之间呈正态分布

    种子在每次启动计算机时是随机的,但是一旦计算机启动以后它就不再变化了;也就是说,每次启动计算机以后,种子就是定值了,所以根据公式推算出来的结果(也就是生成的随机数)就是固定的。

    重新播种

    我们可以通过 srand() 函数来重新“播种”,这样种子就会发生改变。srand() 的用法为:

    void srand (unsigned int seed);

    它需要一个 unsigned int 类型的参数。在实际开发中,我们可以用时间作为参数,只要每次播种的时间不同,那么生成的种子就不同,最终的随机数也就不同。

    使用 头文件中的 time() 函数即可得到当前的时间(精确到秒),就像下面这样:

    srand((unsigned)time(NULL));

    有兴趣的读者请猛击这里自行研究 time() 函数的用法,本节我们不再过多讲解。

    对上面的代码进行修改,生成随机数之前先进行播种:

    #include

    #include

    #include

    int main() {

    int a;

    srand((unsigned)time(NULL));

    a = rand();

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

    return 0;

    }

    多次运行程序,会发现每次生成的随机数都不一样了。但是,这些随机数会有逐渐增大或者逐渐减小的趋势,这是因为我们以时间为种子,时间是逐渐增大的,结合上面的正态分布图,很容易推断出随机数也会逐渐增大或者减小。

    生成一定范围内的随机数

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

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

    如果要规定上下限:

    int a = rand() % 51 + 13; //产生13~63的随机数

    分析:取模即取余,rand()%51+13我们可以看成两部分:rand()%51是产生 0~50 的随机数,后面+13保证 a 最小只能是 13,最大就是 50+13=63。

    最后给出产生 13~63 范围内随机数的完整代码:

    #include

    #include

    #include

    int main(){

    int a;

    srand((unsigned)time(NULL));

    a = rand() % 51 + 13;

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

    return 0;

    }

    连续生成随机数

    有时候我们需要一组随机数(多个随机数),该怎么生成呢?很容易想到的一种解决方案是使用循环,每次循环都重新播种,请看下面的代码:

    #include

    #include

    #include

    int main() {

    int a, i;

    //使用for循环生成10个随机数

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

    srand((unsigned)time(NULL));

    a = rand();

    printf("%d ", a);

    }

    return 0;

    }

    运行结果举例:

    8 8 8 8 8 8 8 8 8 8

    运行结果非常奇怪,每次循环我们都重新播种了呀,为什么生成的随机数都一样呢?

    这是因为,for 循环运行速度非常快,在一秒之内就运行完成了,而 time() 函数得到的时间只能精确到秒,所以每次循环得到的时间都是一样的,这样一来,种子也就是一样的,随机数也就一样了。

    那么,该如何解决呢?难道就没有办法连续生成随机数了吗?当然有,我们将在《C语言连续生成多个随机数》一节中给出一种巧妙的解决方案。

    到此这篇关于C语言随机数生成教程(rand和srand用法)的文章就介绍到这了,更多相关C语言随机数生成内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

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

    在实际编程中,我们经常需要生成随机数。例如,贪吃蛇游戏中在随机的位置出现食物,扑克牌游戏中随机发牌。

    在C语言中,我们一般使用 <stdlib.h> 头文件中的 rand() 函数来生成随机数,它的用法为:

    int rand (void);

    void 表示不需要传递参数。

    C语言中还有一个 random() 函数可以获取随机数,但是 random() 不是标准函数,不能在 VC/VS 等编译器通过,所以比较少用。

    rand() 会随机生成一个位于 0 ~ RAND_MAX 之间的整数。

    RAND_MAX 是 <stdlib.h> 头文件中的一个宏,它用来指明 rand() 所能返回的随机数的最大值。C语言标准并没有规定 RAND_MAX 的具体数值,只是规定它的值至少为 32767。在实际编程中,我们也不需要知道 RAND_MAX 的具体值,把它当做一个很大的数来对待即可。

    下面是一个随机数生成的实例:

    #include <stdio.h>

    #include <stdlib.h>

    int main(){

        int a = rand();

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

        return 0;

    }

    运行结果:

    193

    随机数的本质

    多次运行上面的代码,你会发现每次产生的随机数都一样,这是怎么回事呢?为什么随机数并不随机呢?

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

    种子在每次启动计算机时是随机的,但是一旦计算机启动以后它就不再变化了;也就是说,每次启动计算机以后,种子就是定值了,所以根据公式推算出来的结果(也就是生成的随机数)就是固定的。

    重新播种

    我们可以通过 srand() 函数来重新“播种”,这样种子就会发生改变。srand() 的用法为:

    void srand (unsigned int seed);

    它需要一个 unsigned int 类型的参数。在实际开发中,我们可以用时间作为参数,只要每次播种的时间不同,那么生成的种子就不同,最终的随机数也就不同。

    使用 <time.h> 头文件中的 time() 函数即可得到当前的时间(精确到秒),就像下面这样:

    srand((unsigned)time(NULL));

    对上面的代码进行修改,生成随机数之前先进行播种:

    #include <stdio.h>

    #include <stdlib.h>

    #include <time.h>

    int main() {

        int a;

        srand((unsigned)time(NULL));

        a = rand();

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

        return 0;

    }

    多次运行程序,会发现每次生成的随机数都不一样了。但是,这些随机数会有逐渐增大或者逐渐减小的趋势,这是因为我们以时间为种子,时间是逐渐增大的,结合上面的正态分布图,很容易推断出随机数也会逐渐增大或者减小。

    如果你在学习C/C++的过程中遇到了问题,可以来加入小编的企鹅圈问小编哦~小编很热情的(●’◡’●)

     

    生成一定范围内的随机数

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

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

    如果要规定上下限:

    int a = rand() % 51 + 13;    //产生13~63的随机数

    分析:取模即取余,rand()%51+13我们可以看成两部分:rand()%51是产生 0~50 的随机数,后面+13保证 a 最小只能是 13,最大就是 50+13=63。

    最后给出产生 13~63 范围内随机数的完整代码:

    #include <stdio.h>

    #include <stdlib.h>

    #include <time.h>

    int main(){

        int a;

        srand((unsigned)time(NULL));

        a = rand() % 51 + 13;

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

        return 0;

    }

    展开全文
  • C语言随机数生成及三个具体案例详解

    千次阅读 多人点赞 2022-02-10 09:52:08
    C语言随机数生成讲解
  • C语言中,我们一般使用 头文件中的 rand() 函数来生成随机数,它的用法为:int rand (void);void 表示不需要传递参数。C语言中还有一个 random() 函数可以获取随机数,但是 random() 不是标准函数,不能在 VC/VS ...
  • C语言随机数生成【详解】

    万次阅读 多人点赞 2020-06-10 13:39:48
    (rand 函数 srand 函数)(生成范围随机数公式)(随机数实例:选择排序等)
  • c语言随机数生成

    千次阅读 2018-01-28 19:21:28
    #include #include #include int main(void) { int i = 0; srand((unsigned int)time(NULL)); for(i=0;i;i++) { printf("%d ",rand()); } printf("\n"); return 0; }
  • c语言随机数生成

    万次阅读 多人点赞 2018-04-22 17:08:26
    在正文开始之前,我们需要说明一件事情,在我们使用函数生成随机数都不是真正的随机数,准确的叫法应该是伪随机数。在 C 语言当中使用随机数要用到 rand 函数和 srand 函数。int rand():返回值为随机值,参数为空...
  • C语言编程随机产生一道包含加减乘除的数学题?//小学生四则运算 #include #include #include //产生 [a,b] 区间的随机数 #define RANDOM(a,b) (rand()%((b+1)-(a)) + (a)) //产生 1-20 的整数,如要改变算术范围,...
  • c语言生成随机数

    千次阅读 2022-03-08 20:25:52
    生成随机数 rand()函数在stdlib.h的头文件中。 rand() 会随机生成一个位于 0 ~ RAND_MAX 之间的整数。RAND_MAX 是 <stdlib.h> 头文件中的一个宏,它用来指明 rand() 所能返回的随机数的最大值。C语言标准并...
  • 在实际编程中,我们经常需要生成随机数,例如,贪吃蛇游戏中在随机的位置出现食物,扑克牌游戏中随机发牌。 在C语言中,我们一般使用 <stdlib.h> 头文件中的 rand() 函数来生成随机数,它的用法为: int ...
  • c语言随机数生成函数和时间函数c语言随机数生成函数和时间函数是如何生成的呢?小编为大家揭秘来了。更多内容请关注应届毕业生考试网!一 随机数生成函数(rand,srand)1)首先,随机数在stdlib.h定义了一个RAND_MAX的宏#...
  • C语言生成随机数的方法

    千次阅读 2022-03-25 17:56:12
    以上就是今天要讲C语言生成随机数的内容,包含rand、srand和time函数的使用,希望对刚刚阅读本篇博客的你有所帮助。
  • C语言随机数生成

    2021-05-26 03:42:12
    目前所看到的所有公开的关于C随机数生成器的中文资料,都提到经典的线性同余法( LCG, linear congruential generator),并认为是默认的实现方法。这个说法并不准确。线性累加反馈法线性累加反馈法,即LAFM(linear ...
  • C语言生成随机数函数

    千次阅读 多人点赞 2021-10-17 14:36:37
    本文主要详细介绍如何在C语言生成随机数。 一、产生随机数 我们先看一个示例:产生一个随机数并在屏幕上输出 #include<stdio.h> #include<stdlib.h> #include<time.h> int main() { srand(...
  • 主要介绍了详解C语言随机数生成及其相关题目,作者还列举了阿里巴巴的一道相关的面试题,需要的朋友可以参考下
  • C语言编程随机产生一道包含加减乘除的数学题?c语言中定义一个字符,让它随机输出加减乘除 char a; printf("%c",a);include #include #include void main( void ) { int i,t; char a; srand( (unsigned)time( ...
  • C语言随机数

    2022-03-31 23:57:42
    1. 随机数概述 编写程序过程中,我们经常需要产生一些随机数随机数在程序中分为两种: 真随机数:完全没有规则,无法预测接下来要产生的数。 伪随机数:通过一些预先设定好的规则产生不能简单预测的数。 当然,...
  • C语言随机数生成超详解

    千次阅读 2018-04-02 14:27:04
    生成随机数都是固定的,这样怎么还能叫随机数呢   2.解决方法>srand() srand()就是给rand()提供一个种子 srand(time);//这样子可以打印出来符合要求的随机数,但是我们要使用下面的形式 ...
  • 随机数的生成在一些游戏程序中会经常使用,我以前有很多次用到过,每次用的时候上网查一下代码怎么写,大致看一下就复制到自己的程序中,总是记不住随机数生成的原理。总之,随机数生成这两行简短的代码对我来说就像...
  • 在实际编程中,我们经常需要生成随机数,例如,贪吃蛇游戏中在随机的位置出现食物,扑克牌游戏中随机发牌。在C语言中,我们一般使用 <stdlib.h> 头文件中的 rand() 函数来生成随机数,它的用法为: int rand ...
  • C语言生成随机数

    千次阅读 2021-07-20 20:25:51
    1.随机数生成用rand(),范围是0到32767 2.rand()在main主函数中一次定义赋值必是一样的数 #include<stdio.h> #include<stdlib.h>//rand(),srand(),time()等头文件 int main() { int ret = rand(); ...
  • 该楼层疑似违规已被系统折叠隐藏此楼查看此楼下面C语言代码使用了生成随机数的函数、延时函数。请大家仔细观察其显示效果。从以下代码,我们可以得出一个重要的结论:当上述两类函数被放入循环时,应作出一定修改。...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 22,216
精华内容 8,886
关键字:

c语言随机数生成