精华内容
下载资源
问答
  • 随机数在单片机的应用中也是很多的,当然产生随机数的方法有很多,当中有一个就是利用单片机定时器,取出未知的定时器THX和TLX的值,再加以运算得到一个规定范围内的随机数值。这做法也是可行的。或者预先写好一个...

    单片机C语言如何产生随机数

    随机数在单片机的应用中也是很多的,当然产生随机数的方法有很多,当中有一个就是利用单片机定时器,取出未知的定时器THX和TLX的值,再加以运算得到一个规定范围内的随机数值。这做法也是可行的。或者预先写好一个随机数表,然后进行取数据。也是可以的。

    KEIL里面产生随机数的函数确实是rand(),但头文件是stdlib.h,不是time.h。C语言提供了一些库函数来实现随机数的产生。

    C语言中有三个通用的随机数发生器,分别为 rand函数、random函数、randomize 函数,但是rand函数产生的并不是真意正义上的随机数,是一个伪随机数,是根据一个数,称之为种子,为基准以某个递推公式推算出来的一系数,当这系列数很大的时候,就符合正态公布,从而相当于产生了随机数。

    但这不是真正的随机数,当计算机正常开机后,这个种子的值是定了的,除非破坏了系统,为了改变这个种子的值,C提供了srand()函数,它的原形是void srand( int a)。在调用rand函数产生随机数前,必须先利用srand()设好随机数种子,如果未设随机数种子,rand()在调用时会自动设随机数种子为1。一般用for语句来设置种子的个数。

    单片机产生随机数的两种方法:

    方法一:定时器直接随机取值

    每按一次按键生成一个随机数,这个随机数实际是把定时器的值给取出来了,并不能算绝对的随机、方法二才是真正意义上的随机。

    方法二:用定时器加rand()随机函数来实现

    单片机上电之后通过按键去启动取随机数,若是单片机上电就立即取随机数的话,那每次上电随机的结果都是一样的。然后是0 到9不重复的随机数,程序中用了循环来判断是否和前面取的随机数相同,相同则进入,下次取随机数,不同则存入数组。
      
    最后分享一些相关资料提供学习,裙聊:371783246
    提升C编程能力
    C语言编程基础
    C高级之结构体
    C高级之结构体

    展开全文
  • C语言产生随机数

    2012-08-18 13:50:04
    C语言产生随机数的方法 ……rand()函数可以用来产生随机数,但是这不是真真意义上的随机数,是一个伪随机数,是根据一个数,我们可以称它为种子,为基准以某个递推公式推算出来的一系数,当这系列数很大的时候,...
  • c语言产生随机数

    2016-03-25 10:51:00
    今天做数独游戏的时候遇到一个问题,没法做到随机产生几组0-9之间的随机数。刚开始产生一组是没问题的,但当用循环来产生几组随机数时,发现产生的几组随机数完全是一样的。百度之后知道了原因,原来c语言中的随机数...

           今天做数独游戏的时候遇到一个问题,没法做到随机产生几组0-9之间的随机数。刚开始产生一组是没问题的,但当用循环来产生几组随机数时,发现产生的几组随机数完全是一样的。百度之后知道了原因,原来c语言中的随机数也不能算是完全随机数。srand((unsigned)(time(NULL)))是用来接收一个随机种子,rand()是根据随机种子而得到的一组随机数。说是随机数,其实本质却是一组不变的数。即只要随机种子一样,rand()得到的是一组永远不变的随机数列。而随机种子是(unsigned)(time(NULL)),是1970年1月1号到现在共有多少秒。这就造成了一个问题,如果你想得到几组随机数,而此时你把获得随机数的种子的函数srand((unsigned)(time(NULL)))放在循环里面,会因为每次循环时间远远小于1秒而每次得到的随机数都是以该随机种子所代表的一组永远不变的随机数列的前几个随机数。解决办法也很简单,产生随机种子的函数放到循环函数外面去,这样虽然种子永远是不变的,但每次得到的随机数就是该随机种子所代表的一组永远不变的随机数列的n歌随机数了,即他会延续着上一次的地方继续读取该组随机数。(难说清楚)

     

          eg.例如 随机种子a对应了固定的一组随机数列 1 5 6 78 9 2 4 5 7 1 2 35 52 41 你要产生2组4位的随机数,那么随机种子函数放在内部得到的随机数为1 5 6和1 5 6

    随机种子函数放在外面得到的随机数为1 5 6和78 9 2

    转载于:https://www.cnblogs.com/aloney/p/5318587.html

    展开全文
  • rand()函数是按指定的顺序来产生整数,因此每次执行上面的语句都打印相同的两个值,所以说C语言随机并不是真正意义上的随机,有时候也叫伪随机数,使用 rand() 生成随机数之前需要用随机发生器的初始化函数 srand...

    引用百度百科,首先,需要包含头文件:

    #include <stdlib.h>

    rand()函数是按指定的顺序来产生整数,因此每次执行上面的语句都打印相同的两个值,所以说C语言的随机并不是真正意义上的随机,有时候也叫伪随机数,使用 rand() 生成随机数之前需要用随机发生器的初始化函数 srand(unsigned seed)(也位于 stdlib.h 中) 进行伪随机数序列初始化,seed 又叫随机种子,通俗讲就是,如果每次提供的 seed 是一样的话,最后每一轮生成的几个随机值也都是一样的,因此叫伪随机数,所以需要每次提供不同的 seed 达到完全的随机,我们通常用时间函数 time(NULL) 作为 seed ,因为时间值每秒都不同,这个函数需要包含以下头文件:

    #include <time.h>

    理论太泛,下面用例子分析理解。
    举例分析

    先来理解以下伪随机数,编译以下代码:

    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    int main()
    {
        srand(1);
        int i;
        for (i = 0; i < 10; i++)
        printf("%d, ", rand()%11);
    }

    运行结果

    8, 9, 9, 1, 7, 5, 5, 10, 1, 0,

      

    然后无论运行多少次,结果都依然是以上随机数,不会改变,因为每次设置的种子 seed 都是 1 。

    但是假如把 seed 换成 time(NULL),每次就不一样了,如下:

    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    int main()
    {
        srand(time(NULL));
        int i;
        for (i = 0; i < 10; i++)
        printf("%d, ", rand()%11);
    }

    结果是就变了,并且每次都不一样:

    6, 3, 4, 5, 5, 9, 8, 10, 10, 4,
    6, 4, 2, 4, 3, 2, 5, 1, 2, 9,

       

        这里的 time(NULL) 的结果是一个类似于 1524655706 的数字,并且每秒都在递增 1,也就达成了 srand() 的 seed 不断变化的目的,不断生成新的随机数。

    拓展

    这里注意一下例子中函数 rand() 的用法,函数括号内不需要加参数,如果直接调用 rand() 的话会生成下面这样的数:

    17163, 2663, 24810, 4875, 26975, 14119, 22193, 11233, 26009, 20105,

    所以我们想要生成指定范围的随机数的话就需要使用到求余运算符 %,这里有个规律:例如我们需要 0–10的随机数时,就写成 rand()%11,0–100就写成 rand()%101,就是运算符后的数字需要比需求范围极值大 1,当然这也是取余运算的原理。

    展开全文
  • C语言中,rand()函数可以用来产生随机数,但是这不是真真意义上的随机数,是一个伪随机数,是根据一个数,我们可以称它为种子,为基准以某个递推公式推算出来的一系数,当这系列数很大的时候,就符合正态公布,从而...

    c语言产生随机数的方法
    在C语言中,rand()函数可以用来产生随机数,但是这不是真真意义上的随机数,是一个伪随机数,是根据一个数,我们可以称它为种子,为基准以某个递推公式推算出来的一系数,当这系列数很大的时候,就符合正态公布,从而相当于产生了随机数,但这不是真正的随机数,当计算机正常开机后,这个种子的值是定了的,除非你破坏了系统,为了改变这个种子的值,C提供了srand()函数,它的原形是void srand( int a)。

    可能大家都知道C语言中的随机函数random,可是random函数并不是ANSI C标准,所以说,random函数不能在gcc,vc等编译器下编译通过。

    rand()会返回一随机数值,范围在0至RAND_MAX 间。返回0至RAND_MAX之间的随机数值,RAND_MAX定义在stdlib.h,(其值至少为32767)我运算的结果是一个不定的数,要看你定义的变量类型,int整形的话就是32767。 在调用此函数产生随机数前,必须先利用srand()设好随机数种子,如果未设随机数种子,rand()在调用时会自动设随机数种子为1。一般用for语句来设置种子的个数。具体见下面的例子。

    一 如何产生不可预见的随机序列呢
    利用srand((unsigned int)(time(NULL))是一种方法,因为每一次运行程序的时间是不同的。

       在C语言里所提供的随机数发生器的用法:现在的C编译器都提供了一个基于ANSI标准的伪随机数发生器函数,用来生成随机数。它们就是rand()和srand()函数。这二个函数的工作过程如下:
    
    1. 首先给srand()提供一个种子,它是一个unsigned int类型,其取值范围从0~65535;

    2. 然后调用rand(),它会根据提供给srand()的种子值返回一个随机数(在0到32767之间)

    3. 根据需要多次调用rand(),从而不间断地得到新的随机数;

    4. 无论什么时候,都可以给srand()提供一个新的种子,从而进一步“随机化”rand()的输出结果。
      下面是0~32767之间的随机数程序:

    #include <stdlib.h>
    #include <stdio.h>
    #include <time.h> //使用当前时钟做种子

    void main( void )
    {int i;
    srand( (unsigned)time( NULL ) ); //初始化随机数
    for( i = 0; i < 10;i++ ) //打印出10个随机数
    printf( " %d\n", rand() );
    }

    根据上面的程序可以很容易得到0~1之间的随机数:

    #include <stdlib.h>
    #include <stdio.h>
    #include <time.h>
    main( )
    {int i;
    srand( (unsigned)time( NULL ) );
    for( i = 0; i < 10;i++ )
    printf( “%5.2f\n”, rand()/32767.0);
    }

     而产生1~100之间的随机数可以这样写:
    

    #include <stdlib.h>
    #include <stdio.h>
    #include <time.h>
    main( )
    {int i;
    srand( (unsigned)time( NULL ) );
    for( i = 0; i < 10;i++ )
    printf( “%d\n”, rand()%100+1);
    }
    come from http://hi.baidu.com/akaneyu

    二,三个通用的随机数发生器,推荐用第三个
    函数名: rand
    功 能: 随机数发生器
    用 法: void rand(void);
    程序例:

    #include <stdlib.h>
    #include <stdio.h>

    int main(void)
    {
    int i;

    printf(“Ten random numbers from 0 to 99\n\n”);
    for(i=0; i<10; i++)
    printf("%d\n", rand() % 100);
    return 0;
    }

    函数名: random
    功 能: 随机数发生器
    用 法: int random(int num);
    程序例:

    #include <stdlib.h>
    #include <stdio.h>
    #include <time.h>

    /* prints a random number in the range 0 to 99 */
    int main(void)
    {
    randomize();
    printf(“Random number in the 0-99 range: %d\n”, random (100));
    return 0;
    }

    函数名: randomize 这个比较好!
    功 能: 初始化随机数发生器
    用 法: void randomize(void);
    程序例:

    #include <stdlib.h>
    #include <stdio.h>
    #include <time.h>

    int main(void)
    {
    int i;

    randomize();
    printf(“Ten random numbers from 0 to 99\n\n”);
    for(i=0; i<10; i++)
    printf("%d\n", rand() % 100);
    return 0;
    }

    在《计算机常用算法》中有介绍随机数的生成算法

    三 如何产生设定范围内的随机数

    由于rand产生的随机数从0到rand_max,而rand_max是一个很大的数,那么如何产生从X~Y的数呢?

    从X到Y,有Y-X+1个数,所以要产生从X到Y的数,只需要这样写:
    
    k=rand()%(Y-X+1)+X;
    
    这样,就可以产生你想要的任何范围内的随机数了。
    

    四,产生不重复的随机数
    1) #include <stdlib.h>
    #include <stdio.h>
    #include<stdio.h>
    #include <time.h>
    swap(int *pm,int *pn) /必须用指针进行交换/
    {
    int temp;
    temp=*pm;
    *pm=*pn;
    *pn=temp;
    }

    int main(void)
    {
    int i,a[513];
    /int pa,pb;/
    srand( (unsigned)time( NULL ) ); /定义这个可以产生不同的随机数/
    for(i=1; i<=512; i++){a[i]=i;printf("%4d",a[i]);}
    for(i=512; i>=1; i–)
    {
    /
    pa=&a[i]; pb=&a[rand()%i+1];
    /
    swap(&a[i], &a[rand()%i+1]); /加一是从一到i的随机,就不会包含0/
    /不用再定义指针,这样结论是一样的/
    }
    printf("\n") ;
    for(i=1; i<=64; i++)
    printf("%4d",a[i] );
    getch(); /wintc的输出/
    }

    2)
    #include <stdlib.h>
    #include <stdio.h>
    #include<stdio.h>

    int main(void)
    {
    int a[100]={0}; int i,m;
    for(i=1; i<=99; ++i)
    printf("%4d",a[i] );

    srand( (unsigned)time( NULL ) );

    for(i=1; i<=99; i++)
    {
    while(a[m=rand()%100+1]);
    a[m] = i;
    }
    for(i=1; i<=99; ++i)
    printf("%4d",a[i] );

    getch();
    }

    展开全文
  • C语言如何产生随机数

    千次阅读 2013-08-02 17:22:29
     在C语言中取随机数所需要的函数是: int rand(void); void srand(unsigned int n);  rand()函数和srand()函数被声明在头文件stdlib.h中,所以要使用这两个函数必须包含该头文件: #include 2. 使用方法   rand()...
  • rand()函数可以用来产生随机数,但是这不是真真意义上的随机数,是一个伪随机数,是根据一个数,我们可以称它为种子,为基准以某个递推公式推算出来的一系数,当这系列数很大的时候,就符合正态公布,从而相当于产生...
  • C语言中,rand()函数可以用来产生随机数,但是这不是真真意义上的随机数,是一个伪随机数,是根据一个数,我们可以称它为种子,为基准以某个递推公式推算出来的一系数,当这系列数很大的时候,就符合正态公布,...
  • C/C++产生随机数 (转载自beyond02\824) ...C/C++怎样产生随机数:这里要用到...(1) 如果你只要产生随机数而不需要设定范围的话,你只要用rand()就可以了:rand()会返回一随机数值, 范围在0至RAND_MAX 间。RAND_M
  • 关于产生随机数,想必大家都知道rand()这个函数。关于rand()函数这里介绍几点:1.rand()函数不需要参数,直接通过表达式rand()使用;2.rand()函数虽然说是产生随机数,但是只要程序执行,得到的随机数便是固定的。...
  • 给定能随机生成整数1到5的函数,写出能随机生成整数1到7的函数 方法一: a.随机一个值value(1-5) b.随机一个值temp(1-5),如果temp<3把value从1-5映射到6-10,如果temp=3再随机一次temp(为了公平) c.如果...
  • c语言中的随机数

    2020-06-14 21:43:52
    c语言产生一定范围的随机数 运行环境 vs2019 communityc语言中产生随机数rand()rand的例子 今天在一个小程序中看到了一个随机函数,心血来潮,来记录一下,顺便回忆一下c#(有点懒,c#部分后期再补) c语言产生...
  • C语言之实现随机数产生算法

    万次阅读 2016-02-20 15:50:51
    在UNIX操作系统和window的操作系统上,我们知道有一个函数rand,它就是用来产生随机数的函数API接口,那么它的原理如何实现? 如果约定a1=f(seed),an+1=f(an),那么可以得到一个序列a1,a2,a3..an,那么要制作一个伪...
  • C语言产生随机数

    千次阅读 2014-08-18 15:49:28
    C语言/C++产生随机数:要用到的函数是rand(), srand()和time() 需要说明的是,iostream头文件中就有srand函数的定义,不需要再额外引入stdlib.h;而使用time()函数需要引入ctime头文件。 使用rand()函数获取一...
  • c语言产生随机数

    2012-08-27 19:03:34
    C语言中,rand()函数可以用来产生随机数,但是这不是真真意义上的随机数,是一个伪随机数,是根据一个数,我们可以称它为种子,为基准以某个递推公式推算出来的一系数

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 732
精华内容 292
关键字:

c语言随机产生随机数

c语言 订阅