c语言随机数生成(rand,srand,time)

简介: c语言随机数生成(rand,srand,time)

📢 :c语言随机数生成

一,rand函数和srand函数和time函数的联系

  rand函数能够生成一个随机数,因为rand函数每次都会调用srand函数来决定随机数的起始值,所以可以通过改变srand来控制随机数起始值,如果要是不主动实现srand函数的话,rand会自动调用srand函数,但是这样会导致srand的值一直不变,普遍的做法是主动实现srand,从而使得rand函数的返回值达到真正的随机。但是srand函数需要传入一个有变化的参数,这个参数就可以了使用time函数。

  time函数的作用是返回一个时间戳(也就是1970年1月1日至今所经历的秒数),这样能使这个时间戳不断在变化,所以真正决定这个起始值的是time函数。srand只是rand和time的桥梁。

📢 :接下来我们分别看看这三个函数 :

二,scrand函数 :

✨先看一看srand的函数原型 :

void srand (unsigned int seed);

  • 参数是一个无符号的int类型的种子(seed),这也就解释了为什么rand函数的下界是0
  • srand函数能够决定rand产生的随机数的起始值 。
  • 如果种子值不变的话,会导致rand每次出现的值都不变(不同进程调用rand返回值不变,但是同一进程的多次调用rand返回值是变化的)。下面代码展示 :

✨✨可以看到,每次运行后值都是不变的。所以我们就需要让种子seed不断在变化,就用到了time函数。

三,time函数 :

  time的函数原型如下 :

time_t time (time_t* timer);

⭐️返回一个time_t类型。

✨参数是一个time_t类型的指针,返回值存储在这个指针里面,当然,也可以传入一个空指针,这两种说法下面代码展示 :

#include <stdio.h>
 #include <time.h> 
int main()
 {
      time_t a;
      time_t b;
      //第一种使用方式
     time(&a); 
    //第二种使用方式
     b = time(NULL);  
      
  printf("t1=%ld\n",a); 
  printf("t2=%ld",b);
      
        return 0;
 }
 //两种方法返回值相同。

使用它必须包含头文件 :#include <time.h>

  所以我们把srand函数和time函数一结合,就变成了 :srand((unsighed int )time(NULL)) ;

因为time返回的是time_t类型的,所以得把他强转成unsighed 类型的。

四,rand函数 :

下面是它的函数原型 :

int rand (void);

⭐️返回一个int类型的值,没有参数。

  rand()函数每次调用前都会检查是否调用过srand函数,如果有,就会使用srand来为自己初始化自己的值。若之前没有调用srand函数,那么会自动给seed赋初始值,即srand(1)自动调用它。

如何给随机数限定范围 ?

  • 可以通过取余来限制最大值,如 :
    int rand_number = rand() % 100 ;
    此时的rand_number的最大值不超过100(因为超过100就会向前进位,大家细细想想就能理解)。
    那么要是想取范围为[10,100],该怎么表达呢?这句话也就是范围最大值不超过101,所以可以写成int rand_number = rand() % 101 ;最小值的实现可以整体加上10来实现,但是整体加上10的话,最大值也会增加10,可以这么表达 :int rand_number = rand() % 91 + 10;)这句意思范围是 [10,(91+10) - 1] ,也就是 :[10,100]。
  • 下面给出函数的简单实现代码,大家可以复制在编译器自己运行试试 :
#include <stdio.h>
#include <stdlib.h> /* srand, rand */
#include <time.h>       /* time */
int main()
{
  srand((unsigned int)time(NULL));  
  //control();
  int i = 0;
  while (i < 10)
  {
    int a = rand()% 100;
    printf("%d  ", a);
    i++;
  }
  return 0;
}

😄新人创作不易,你的点赞和关注都是对我莫大的鼓励,再次感谢您的观看。😄

相关文章
|
2月前
|
C语言 C++
【C语言】rand()函数(如何生成指定范围随机数)
【C语言】rand()函数(如何生成指定范围随机数)
17 0
|
6月前
|
算法 编译器 C语言
C语言学习系列-->【关于随机数的实现】
C语言学习系列-->【关于随机数的实现】
51 0
|
2月前
|
算法 编译器 C语言
你知道C语言中随机数是如何生成的吗~?
你知道C语言中随机数是如何生成的吗~?
|
3月前
|
C语言
用C语言写一个猜随机数的小游戏
用C语言写一个猜随机数的小游戏
21 0
|
6月前
|
算法 C语言
【C语言】猜数字小游戏——深度刨析rand函数生成随机数
【C语言】猜数字小游戏——深度刨析rand函数生成随机数
44 0
|
9月前
|
C语言
C语言生成随机数(rand函数)
C语言生成随机数(rand函数)
637 0
|
16天前
|
C语言
C语言:内存函数(memcpy memmove memset memcmp使用)
C语言:内存函数(memcpy memmove memset memcmp使用)
|
2天前
|
存储 编译器 C语言
C语言:字符函数 & 字符串函数 & 内存函数
C语言:字符函数 & 字符串函数 & 内存函数
10 2
|
10天前
|
缓存 安全 编译器
【C 言专栏】C 语言函数的高效编程技巧
【5月更文挑战第1天】本文探讨了C语言中函数的高效编程技巧,包括函数的定义与作用(如代码复用和提高可读性)、设计原则(单一职责和接口简洁)、参数传递方式(值传递、指针传递和引用传递)、返回值管理、调用约定、嵌套与递归调用,以及函数优化技巧和常见错误避免。掌握这些技巧能提升C语言代码的质量和效率。
【C 言专栏】C 语言函数的高效编程技巧
|
13天前
|
C语言
pta浙大版《C语言程序设计(第3版)》 习题6-4 使用函数输出指定范围内的Fibonacci数 (20分)
pta浙大版《C语言程序设计(第3版)》 习题6-4 使用函数输出指定范围内的Fibonacci数 (20分)