精华内容
下载资源
问答
  • c语言随机函数

    2021-01-13 16:13:14
    1.初识随机函数 在实践中,找到真正的随机数字是困难的。数字计算机只能在一个限定的范围内和有限的精度下去处理数字。在大多数情况下,最好的方法是产生伪随机数,这不是真正意义的随机数,它的意义是:单次产生的数列是...

    1.初识随机函数

    在实践中,找到真正的随机数字是困难的。数字计算机只能在一个限定的范围内和有限的精度下去处理数字。在大多数情况下,最好的方法是产生伪随机数,这不是真正意义的随机数,它的意义是:单次产生的数列是无法预测的,但是每次都会生成同样的一组随机数列。
    C语言的标准函数库提供有一个随机数函数,即 rando()函数,它返回[0,MAX均匀分布的伪随机整数。rand()函数不接受参数,默认以1为种子(即起始值),它总是以相同的种子开始,所以形成的伪随机数列也相同,不是真正的随机。这是有意设计的,目的是为了便于程序的调试。
    另一个函数是 srand(),可以使用该函数指定不同的数(无符号整数)为种子。但是如果种子相同,么伪随机数列也相同。有两种方法可以采用:一种是让用户输入种子,但效果不是很理想;另一种比较想的是采用变化的数,常用时间来作为随机数生成器的种子。这样,种子不同,产生的随机数也就不同。
    在这里插入图片描述

    使用随机函数

    rand()函数没有参数,它返回一个从0到最大数之间的随机数。
    要生成一个[a,b]范围内的随机数,可以表示为:

    	int n=a+srand()%(b-a+1);
    

    在这里插入图片描述
    下面我就写个代码

    #include <stdio.h>
    #include <stdlib.h>//包含转换和存储头文件
    #include <time.h>//包含日期和时间处理头文件
    #define max 100
    
    int main() {
    	srand((unsigned)time(NULL));//随机数播种函数
    	for (int i = 0; i < 20; i++)//产生20个随机数
    		printf("%d\n", rand() % max);//设定随机数范围并输出
    }
    

    srand()函数的参数是一个带NUL参数的tmeO函数。NULL参数使tme0函数以秒为单位读取计算机内部时钟的时间,然后 srand()函数使这个时间初始化,rand()函数设定随机函数范围,也就是常说的产生一个以当前时间开始的随机种子。
    MAX为生成随机数范围的上限值,rand%MAX产生的随机数范围是[0,max-1]。
    在这里插入图片描述

    展开全文
  • C语言随机函数使用

    万次阅读 多人点赞 2017-12-07 09:18:33
    rand()和srand()应该是初学者最先接触到的随机函数了,今天博主就这两个函数陈述一下自己的理解。

    rand()和srand()应该是初学者最先接触到的随机函数了,今天博主就这两个函数陈述一下自己的理解。
    这两个函数的使用规范如下:

    /*这是一个模拟掷色子1800次的程序*/
    #include <stdlib.h>
    #include <time.h>
    int main() 
    {   int i;
        srand((unsigned)time(0)); 
        for (i=0;i<1800;i++)   printf("%d\n",rand()%6+1);
        return 0; 
    } 

    运行结果如下:
    运行结果如下:
    根据百度百科,库函数中系统提供了两个函数用于产生随机数:srand()和rand()。 原型为:
    函数一:int rand(void);
    返回一个[0,RAND_MAX]间的随机整数。
    函数二:void srand(unsigned seed);
    参数seed是srand()的种子,用来初始化srand()的起始值。

    系统在调用rand()之前都会自动调用srand(),如果在srand()里给参数seed指定了一个值(这里指定的值是当前时间),那么 rand()就会将seed的值作为产生伪随机数的初始值;而如果用户在rand()前没有调用过srand(),那么系统默认将1作为伪随机数的初始值,如果初始值是此时的1或是其他定值,那么每次rand()产生的随机数序列都是一样的,这也就是所谓的“伪随机数”。
    值得注意的是,如果srand()括号中没有argument的话,程序是会报错的,因为在函数原型中,srand()函数是要求加上内容的。

    简而言之,即有如下点:

    1. rand()函数可以生成一个[0,RAND_MAX]间的随机整数;(ISO IEC 9899 2011 (C11)标准中未规定 RAND_MAX 的具体数值。但该标准规定了RAND_MAX 的值应至少为32767。编程的时候,不应该对 RAND_MAX 的具体数值做任何假设。)
    2. srand()可以被认为是为rand()的“伪随机数”的结果指定一个固定的序列,若未引用srand()函数,则程序默认srand()括号中的值为1;如果引用的话,srand()括号中不能为空;
    3. 为了确保生成的随机数为尽可能符合概率上的随机,需要调用一个函数time()(是指返回自 Unix 纪元(January 1 1970 00:00:00 GMT)起的当前时间的秒数的函数,主要用来获取当前的系统时间,返回的结果是一个time_t类型),这个函数包含在头文件time.h里,在生成随机数的调用下需强制类型转换为(unsigned)time(),后面一个括号中必须填入(unsigned)time(NULL)或(unsigned)time(0)。
    展开全文
  • 前言:编程中经常需要用到...既然时间可以作为随机数,那么为什么还需要专门的随机函数呢?这就涉及到随机序列的概率分布问题,通过专门设计的随机函数可以保证连续随机数序列尽量贴近一均匀合理的概率分布。而不能...

    前言:编程中经常需要用到随机数,当然程序(函数)本身无法生成所谓的真实的随机数,还需要一个随机种子,然后根据既定算法算出一个确定结果。如果我们只需要有限次或是随机数时间要求间隔比较久的,也可直接使用当前时间(时间戳)作为随机数。既然时间可以作为随机数,那么为什么还需要专门的随机函数呢?这就涉及到随机序列的概率分布问题,通过专门设计的随机函数可以保证连续随机数序列尽量贴近一均匀合理的概率分布。而不能像开彩那样,领导让开几就开几,那样重复概率太高了。

    VC中随机函数最常用就是srand和rand(实际上是属于标准C函数),其中srand负责设置随机种子,rand则负责生成随机数。使用此二随机函数需要包含头文件。

    一、srand和rand函数

    1、srand函数

    srand定义如下:void srand( unsigned int seed );

    其中seed为无符号整数,我们一般使用时间戳作为其参数,取得时间戳,需要包含头文件。应用示例参下文。

    2、rand函数

    rand()函数产生一个介于0~RAND_MAX之间的伪随机整数(short型),RAND_MAX宏定义为0x7fff。如需要更大的随机整数,可使用多个随机整数进行组合运算即可得到。

    二、随机数生成示例

    #include

    #include

    #include

    void main( void )

    {

    int i,r;

    srand( (unsigned)time( NULL ) );

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

    r=rand()%10;

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

    }

    }

    使用注意:

    1、rand生成序列对于给定的srand种子来说,序列值组合是固定的

    2、srand值在快速调用时,time(NULL)可能不会更新,因为时间戳是以微秒计算的,所以微秒之内的如果再次执行srand和rand,则会得到相同的随机值序列

    3、每次设置随机种子后,rand输出会自动复位到第一个初始值,种子相同,则初值及后续的序列相同

    示例如下:

    #include

    #include

    #include

    int foo() {

    int r;

    srand( (unsigned)time( NULL ) );

    r = rand()%100;

    return r;

    }

    void main( void ) {

    int i,r;

    srand((unsigned)time(NULL));

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

    r=rand()%100;

    printf( " %3d", r);

    }

    printf("\n");

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

    printf( " %3d", foo());

    }

    printf("\n");

    }

    输出如下(可注意到第二行输出完全相同):

    76 69 10 95 37 85 25 99 4 33

    76 76 76 76 76 76 76 76 76 76

    参考资料:

    http://msdn.microsoft.com/en-us/library/aa272944(v=vs.60).aspx

    http://msdn.microsoft.com/en-us/library/aa272875(v=vs.60).aspx

    展开全文
  • c语言中的随机函数为rand(),但是rand生成的值得大小主要相对一个变量才产生的一定有含义的数,这个相对的变量我们可以再srand()函数中进行设置,srand函数是void类型,内部含一个无符号整形 定义如下 如果我们...

    c语言中的随机函数为rand(),但是rand生成的值得大小主要相对一个变量才产生的一定有含义的数,这个相对的变量我们可以再srand()函数中进行设置,srand函数是void类型,内部含一个无符号整形

    定义如下

    www.cdxsxbx.com

    如果我们不定义的话

    重复执行下面的代码产生的效果可能是同一个数

    www.cdxsxbx.com

    但是如果在srand()中设置一个随时改变的参照量,那么每次执行产生的rand值就不会痛,
    我们知道有一个函数time(),这个值是不断的改变的,我们可以将其嵌入在srand中,那么每次产生rand值就会是不同的

    time()的返回是一个_int64 类型的数,time的定义是 time——t time(time_t timer)
    我们在定义的时候可以不使用返回类型time_t,我们只是调用time(time_t timer)
    那么我们的产生的随机值就存放在了
    timer里面,后面我们可以通过只用指针
    timer来调用我们产生的值
    其中time产生的值就是unix的时间戳,产生的值是以秒为单位来进行计算的,时间的计算就是目前的时间与1970年1月1日0时0分0秒之间的决定值
    只不过是用秒来表示,
    同时里面的参数可以不为*timer,可以为NULL,也可以直接用0来代替,

    www.cdxsxbx.com

    srand()是void类型,我们在srand()里面嵌套不断变化的函数time(0),那么我们产生的随机数每时每刻的相对值都是不同的,所以产生的随机数也就是不同的

    rand()函数是有返回值的,,至于要求产生多大范围内的数需要自己控制;

    ————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————-—————————
    华丽的分割线
    如果上面的理解了,下面是比较官方的解释方法
    ——————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————

    rand()函数是产生随机数的一个随机函数。C语言里还有 srand()函数等。
    (1)使用该函数首先应在开头包含头文件stdlib.h
    #include<stdlib.h>
    (C++建议使用#include,下同)
    (2)在标准的c库中rand可以产生于一个0~rand_max之间的一个随机数,rand_max是stdlib中定义的一个数,与系统有关
    (3)因为rand每次都是按照顺序产生固定的随机数,所以对于同一个程序,我们多次调用执行,会产生同样的数,也就是产生同样的效果,所以我们有时候也管随机数叫做伪随机数,
    (4)为了使得每次随机数生成时都生成一个不同的随机数,也就是不同的随机数序列,所以我们每次都为随机数生成器提供一个新的随机种子,我们可以通过使用srand()产生种子进行散播种子,只要种子不同,我们通过调用rand就会生成不同的随机数,

    srand成为随机数生成器的初始化器
    复制代码
    1 /* This program generates and prints ten random integers between 1 and RAND_MAX*/
    2 #include <stdio.h>
    3 #include <stdlib.h>
    4 int main()
    5 {
    6 unsigned int seed; /申明初始化器的种子,注意是unsigned int 型的/
    7 int k;
    8 printf(“Enter a positive integer seed value: \n”);
    9 scanf("%u",&seed);
    10 srand(seed);
    11 printf(“Random Numbers are:\n”);
    12 for(k = 1; k <= 10; k++)
    13 {
    14 printf("%i",rand());
    15 printf("\n");
    16 }
    17 return 0;
    18 }
    复制代码www.cdxsxbx.com
    当种子为1的时候,我们可以不使用srand,因为系统默认·的种子为1

    在stdlib.h 中这两个函数的原型是:
    int rand();
    void srand (unsigned int);
    srand(time(0)); i=rand();
    或者srand(time(NULL));
    这样就是一个伪随机数。
    rand()产生伪随机数,srand函数提供种子,种子不同产生的随机数序列也不同,所以通常先调用srand函数 time()返回的是系统的时间(从1970.1.1午夜算起),单位:秒,种子不同当然产生的随机数相同几率就很小了。
    用rand()随机生成在[x,y]内的整数
    int k;
    k=x+rand()%(y-x+1)/k即为所求范围内随机生成的数,rand()%a的结果最大为a-1/

    展开全文
  • C语言随机函数

    千次阅读 2013-11-15 00:02:05
    C语言中,rand()函数可以用来产生随机数,但是这不是真真意义上的随机数,是一个伪随机数,是根据一个数,我们可以称它为种子,为基准以某个递推公式推算出来的一系数,当这系列数很大的时候,就符合正态公布,从而...
  • 如果约定a1=f(seed),an+1=f(an),那么可以得到一个序列a1,a2,a3..an,那么要制作一个伪随机函数rand,只需要让它每调用一次就返回序列的下一个元素就行。其实就是相当于第1次调用rand返回a1,第2次返回a2,…,第n次...
  • c语言 随机函数详解

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

    千次阅读 2016-07-22 10:57:13
    C/C++怎样产生随机数:这里要用到的是rand()函数, srand()函数C语言/C++里没有自带的random(int number)函数。 (1) 如果你只要产生随机数而不需要设定范围的话,你只要用rand()就可以了:rand()会返回一随机数值...
  • c语言中的随机函数为rand(),但是rand生成的值得大小主要相对一个变量才产生的一定有含义的数,这个相对的变量我们可以再srand()函数中进行设置,srand函数是void类型,内部含一个无符号整形 定义如下 ...
  • C语言随机函数rand()的用法

    千次阅读 2014-08-23 23:13:42
    rand和srand的用法  首先我们要对rand&srand有个总体的看法:srand初始化随机种子,rand产生随机数,下面将详细说明。  rand(产生随机数)  表头文件: #include  定义函数 :int rand(void)  函数说明 :  ...
  • C语言 随机函数 种子2

    千次阅读 2013-03-23 20:20:08
    一说起随机函数,恐怕又有人说这是老生长谈了……一般很多人都形成了自己的固定格式,因为随机数用处比较大,用的时候比较多,拿过来就用了。但是新手不这么干,他们总是抱有疑惑,我就是一个新手,而且较菜……为了...
  • //最大值是32767 //srand是一个随机数种子产生函数,当参数为1时,所得到的随机数序列一样 //output : nRanNum1 : 41 nRanNum2 : 18467 // nRanNum3 : 41 nRanNum4 : 18467 ofstream outFile("d:\out.txt");...
  • 几个概念随机数:数学上产生的都是伪随机数,真正的随机数使用物理方法产生的。随机数种子:随机数的产生是由算术规则产生的,srand(seed)的随机数种子不同,rand()的随机数值就不同,倘若每次的随机数种子一样,则...
  • 随机数在单片机的应用中也是很多的,当然产生随机数的方法有很多,当中有一个就是利用单片机定时器,取出未知的定时器THX和TLX的值,再加以运算得到一个规定范围内的随机数值。这做法也是可行的。或者预先写好一个...
  • 三、使用rand()和srand()产生指定范围内的随机整数的方法 “模除+加法”的方法 因为,对于任意数,0()%(n-m+1)因此,0+m()%(n-m+1)+m因此,如要产生[m,n]范围内的随机数num,可用: int num=rand()%(n-m+1)+m;...
  • rand()函数用于产生一个随机数,其内部实现是用线性同余法实现的,是伪随机数,由于周期较长,因此在一定范围内可以看成是随机的。调用rand()函数会得到一个在0-RAND_MAX。RAND_MAX在头文件stdlib.h中定义。 2、调用...
  • srand函数是随机数发生器的...srand和rand()配合使用产生伪随机数序列。外文名srand含义属性原型void srand(unsigned int seed);用途编程srand简介编辑语法:void srand (unsigned seed);参数说明:unsigned seed...
  • 三、使用rand()和srand()产生指定范围内的随机整数的方法 “模除+加法”的方法 因为,对于任意数,0()%(n-m+1) 因此,0+m()%(n-m+1)+m 因此,如要产生[m,n]范围内的随机数num,可用: int num=rand()%(n-m+1)+m; ...
  • c语言 malloc 函数用法

    2018-11-02 20:40:14
    函数声明: ...malloc 函数申请空间需要使用free释放。 void* malloc(int size)  malloc向系统申请size字节的内存空间,返回值类型为void *。 使用说明: int *p; p = (int *)malloc( sizeof(in...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 44,123
精华内容 17,649
关键字:

c语言随机函数用法

c语言 订阅