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;
}

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

相关文章
|
8月前
|
C语言 C++
【C语言】rand()函数(如何生成指定范围随机数)
【C语言】rand()函数(如何生成指定范围随机数)
357 0
|
8月前
|
算法 编译器 C语言
你知道C语言中随机数是如何生成的吗~?
你知道C语言中随机数是如何生成的吗~?
|
7月前
|
算法 Unix Linux
C语言随机数的产生(rand、srand、time函数细节讲解)
C语言随机数的产生(rand、srand、time函数细节讲解)
151 0
|
7月前
|
算法 编译器 C语言
【C语言】:详解随机数的生成和猜数字游戏的实现
【C语言】:详解随机数的生成和猜数字游戏的实现
171 0
|
8月前
|
算法 C语言 数据安全/隐私保护
C语言如何生成随机数?
C语言如何生成随机数?
C语言如何生成随机数?
|
8月前
|
C语言
史上最简单的C语言猜数字小游戏(1—100随机数)
史上最简单的C语言猜数字小游戏(1—100随机数)
|
1天前
|
算法 C语言
【C语言程序设计——函数】利用函数求解最大公约数和最小公倍数(头歌实践教学平台习题)【合集】
本文档介绍了如何编写两个子函数,分别求任意两个整数的最大公约数和最小公倍数。内容涵盖循环控制与跳转语句的使用、最大公约数的求法(包括辗转相除法和更相减损术),以及基于最大公约数求最小公倍数的方法。通过示例代码和测试说明,帮助读者理解和实现相关算法。最终提供了完整的通关代码及测试结果,确保编程任务的成功完成。
25 15
|
1天前
|
C语言
【C语言程序设计——函数】亲密数判定(头歌实践教学平台习题)【合集】
本文介绍了通过编程实现打印3000以内的全部亲密数的任务。主要内容包括: 1. **任务描述**:实现函数打印3000以内的全部亲密数。 2. **相关知识**: - 循环控制和跳转语句(for、while循环,break、continue语句)的使用。 - 亲密数的概念及历史背景。 - 判断亲密数的方法:计算数A的因子和存于B,再计算B的因子和存于sum,最后比较sum与A是否相等。 3. **编程要求**:根据提示在指定区域内补充代码。 4. **测试说明**:平台对代码进行测试,预期输出如220和284是一组亲密数。 5. **通关代码**:提供了完整的C语言代码实现
36 24
|
1天前
|
存储 算法 C语言
【C语言程序设计——函数】素数判定(头歌实践教学平台习题)【合集】
本内容介绍了编写一个判断素数的子函数的任务,涵盖循环控制与跳转语句、算术运算符(%)、以及素数的概念。任务要求在主函数中输入整数并输出是否为素数的信息。相关知识包括 `for` 和 `while` 循环、`break` 和 `continue` 语句、取余运算符 `%` 的使用及素数定义、分布规律和应用场景。编程要求根据提示补充代码,测试说明提供了输入输出示例,最后给出通关代码和测试结果。 任务核心:编写判断素数的子函数并在主函数中调用,涉及循环结构和条件判断。
36 23
|
1月前
|
存储 C语言 开发者
【C语言】字符串操作函数详解
这些字符串操作函数在C语言中提供了强大的功能,帮助开发者有效地处理字符串数据。通过对每个函数的详细讲解、示例代码和表格说明,可以更好地理解如何使用这些函数进行各种字符串操作。如果在实际编程中遇到特定的字符串处理需求,可以参考这些函数和示例,灵活运用。
73 10