浅谈使用rand函数、srand函数和time函数所需注意的事项

发布于:2023-02-13 ⋅ 阅读:(700) ⋅ 点赞:(0)

一、浅谈C语言中的rand函数

  1. rand函数的功能:随机生成一个数,数的范围是0到RAND_MAX(RAND_MAX的值为32767),对应的十六进制范围就是0到0x7fff。
  2. 函数原型如下:

#include<stdlib.h> //stdlib.h里有宏定义 #define RAND_MAX 0x7fff

int rand(void);

    3. rand函数调用方式:

  • rand函数每次在调用是会先判断是否有给srand(seek)中的形参seek赋值,如果没有默认seek为1(srand函数在下面浅谈),所以我们就可以发现,当我们没有给srand函数一个实参,直接用rand()输出一个数时,默认第一个随机数都是41,代码如下:
#include<stdlib.h>
void main
{
int a = rand();
printf("%d",a);
//不论怎么运行,结果都为41
}
//也就相当于srand(1),seek设置为1
#include<stdlib.h>
void main
{
srand(1);
int a = rand();
printf("%d",a);
//不论怎么运行,结果都为41
}

二、浅谈C语言中的srand函数 

1. srand函数的功能: srand函数设置生成一系列伪随机整数的起点,也就是说rand函数要有不同的起始值,那么srand函数就是来设置rand函数的起始值,而起始值seed有一定的联系,不同的seed就可以设置不同的rand函数的起始值。

2.srand函数原型:

#include<stdlib.h>

void srand(unsigned int seed);

3.srand函数的使用:

  • srand是srand函数是随机数发生器的初始化函数,调用时需要给srand函数一颗种子seed来进行初始化起点,如果seed种子的值一样,那么起点也就是一样了。
  • 如果我们要得到一个十分随机的数值,就是不管怎么运行,每次的起点都是不一样,那么我们就需要用到time函数来作为一颗种子,播种给srand函数来进行起点的初始化。time的作用是获取系统时间,得到的值是一个时间戳,即从1970年1月1日0点到现在时间的秒数,然后将得到的time_t类型数据转化为(unsigned int)的数,然后再传给srand函数。
  • 如果seek种子的值每次都太近的话,生成的第一个随机数的值也就相近 。

//所以可以给time函数的值乘以一个整数

srand((unsigned int)(time(NULL)*10));

  • 一般的代码形式如下:
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
void main()
{
    srand((unsigned int)(time(NULL)));//time函数的原型:time_t time( time_t *timer );
    int a = rand();
    printf("%d",a);
    //此时a就是一个随机的数
}

 三、确定rand函数生成的随机数范围

1.例如:要确定一个[1,100]以内的随机数,代码如下:

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
void main(){
    srand((unsigned int)(time(NULL)));
    //%100,代表筛选出了100一下的数,也就是[0,99];+1后的范围也就是[1,100]
    int a = rand() % 100 + 1;
    printf("%d",a);
}

结果如下: 

09e25633a3304b37a3474c7b126c0fad.jpeg

 

如有不足之处,欢迎大家指出!!!

 


网站公告

今日签到

点亮在社区的每一天
去签到