首页 > 其他分享 >c语言随机数rand与srand用法详解

c语言随机数rand与srand用法详解

时间:2025-01-16 14:57:53浏览次数:3  
标签:并打印 rand int srand 详解 随机数 time test include

源文件test.c:

#include <stdio.h>

#include <stdlib.h>

#include <time.h>

int main()

{

// 生成并打印5 个随机数

for (int i = 0; i < 5; i++) {

// 生成随机数并打印

printf("第%d个随机数: %d\n", i + 1, rand());

}

return 0;

}

注意点 :

1)当不用srand()函数设置种子时,系统会采用默认种子,及每次运行程序生成的5个数字一致:

第一次./test:

17370255 596516649 846930886 1303455736 304089172

第二次./test:

17370255 596516649 846930886 1303455736 304089172

第三次./test:

17370255 596516649 846930886 1303455736 304089172

及第一,第二,第三次结果一致

源文件test.c:

#include <stdio.h>

#include <stdlib.h>

#include <time.h>

int main()

{

// 设置随机数种子为当前时间

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

// 生成并打印 10 个随机数

for (int i = 0; i < 5; i++) {

// 生成随机数并打印

printf("第%d个随机数: %d\n", i + 1, rand());

}

return 0;

}

注意点 :

1)当用 srand((unsigned int)time(NULL)); 函数设置种子时,只要不在同一秒运行,每次运行结果不一致:

第一次./test: (time 1737027034)

855715535 231294145 138116085 2073724851 1918273440

第二次./test: (time 1737027035)

17370266 596516946 846930688 1303455367 304089217

第三次./test: (time 1737027036)

17325570 649596516 930846886 4551303736 389040172

及第一,第二,第三次结果不一致

2)当用 srand((unsigned int)time(NULL)); 函数设置种子时,同一秒运行,每次运行结果一致:

第一次./test: (time 1737027350)

327041164 314764515 614224631 1345773586 1191149738

第二次./test: (time 1737027350)

327041164 314764515 614224631 1345773586 1191149738

第三次./test: (time 1737027350)

327041164 314764515 614224631 1345773586 1191149738

及第一,第二,第三次结果一致

源文件test.c:

#include <stdio.h>

#include <stdlib.h>

#include <time.h>

int main()

{

struct timeval timeval = {0};

gettimeofday(&timeval,NULL);

// 设置随机数种子为当前时间

srand((timeval.tv_usec);

// 生成并打印 10 个随机数

for (int i = 0; i < 5; i++) {

// 生成随机数并打印

printf("第%d个随机数: %d\n", i + 1, rand());

}

return 0;

}

注意点 :采用gettimeofday(&timeval,NULL);获得微妙级时间,减少种子重复性,进而减少每次运行随机数的重复率

注意:一个进程运行,只需要设置一次种子。

标签:并打印,rand,int,srand,详解,随机数,time,test,include
From: https://blog.csdn.net/ghx19940812/article/details/145183572

相关文章

  • 访问者模式详解
    访问者模式(VisitorPattern)是一种行为型设计模式,它允许在不修改现有类结构的情况下,向现有类添加新的操作。该模式通过定义一个访问者接口,将算法与对象结构分离,使得操作可以独立于数据结构而变化。访问者模式的结构访问者模式主要包含以下组件:1. 抽象访问者(Visitor):• 声......
  • 空对象模式详解
    空对象模式详解定义空对象模式(NullObjectPattern)是一种行为设计模式,通过引入一个特殊的空对象来代替对空值的直接使用。这个空对象实现了与真实对象相同的接口,但其方法体通常为空或者提供默认的行为,从而避免了在代码中频繁进行空指针(NULL)检查。结构组成1. 抽象对象(Abst......
  • 深入浅出Node.js-4(详解网络通信)
    这篇文文章我们将详细讲解网络通信的整个流程当我们在浏览器中输入地址到浏览器返回页面给我们这中间究竟发生了什么?总的来说有以下六个点网络模型浏览器与服务器建立连接(三次握手)浏览器发送请求报文(HTTP协议)服务器返回响应报文(HTTP协议)浏览器渲染页面(看我之前的浏......
  • psSign、random推导
    入口:传递的参数值:sign函数function(){ var_0x36c5d3=_0x79c1ce; let_0x479298=arguments[_0x36c5d3(0x5a9,'PHXL')]>0x0&&void0x0!==arguments[0x0]?arguments[0x0]:{}; try{ var_0x1a6f66; if(!_0x32d6a8[_0x36c5d3(0x4d7,&......
  • 我在广州学Mysql 系列——视图详解
    ℹ️大家好,我是练小杰,不知不觉就周四了,明天又是星期五了!!本文将学习MYSQL中存储过程与存储函数的概念~~回顾:......
  • reduce 到底是什么?Java8 Stream 的终极聚合工具详解
    reduce()是JavaStreamAPI提供的一个终端操作方法,用于将流中的元素组合起来生成一个单一的值。这一方法非常强大,可以实现累积、聚合、拼接等功能,适用于各种数据处理场景。1.reduce()方法的作用reduce()是一个通用的归约操作,它通过一个关联函数,逐个处理流中的每个元素,将......
  • Python shutil 库详解
    1.shutil库概述   简介     shutil是Python中的一个标准库,它提供了一系列对文件和文件集合的高级操作。“shutil”这个名字是“shellutilities”(外壳工具)的缩写,它的功能类似于在shell脚本中对文件进行操作的命令,但通过Python代码来实现,使得操作更加灵活和可编程。......
  • 利用AI进行网络性能分析的详解与应用
    前言随着互联网的迅速发展,网络性能的优劣直接影响着用户体验。传统的网络性能分析方法往往依赖于人力检测与数据统计,效率不高且容易出错。而AI技术的发展为我们提供了一种全新的解决方案,借助AI,我们可以自动化、智能化地进行网络性能分析,从而提升工作效率和分析精度。什么......
  • Linux权限详解(chmod、600、644、700、711、755、777、4755、6755、7755)
    Linux权限详解Linux系统上对文件的权限有着严格的控制,用于如果相对某个文件执行某种操作,必须具有对应的权限方可执行成功。这也是Linux有别于Windows的机制,也是基于这个权限机制,Linux可以有效防止病毒自我运行,因为运行的条件是必须要有运行的权限,而这个权限在Linux是用户所赋予的......
  • 11 多线程详解
    线程简介程序:程序就像一堆写好的指令和数据放在一起,它是静止的,不会自己动起来。进程(Process):进程是把程序真正运行起来的过程,它是动态的,系统会给它分配各种资源,比如内存等。线程(Thread):一个进程里通常会有好几个线程,最少也得有一个,不然进程就没啥用了。线程是CPU安排干活和实际......