首页 > 编程语言 >c++ rand

c++ rand

时间:2024-05-28 14:00:49浏览次数:31  
标签:rand 函数 int srand c++ 随机数 time

 

在 C++ 中,可以使用 <cstdlib> 头文件中的 rand() 函数生成随机数。这个函数会生成一个介于 0 和 RAND_MAX(通常是 32767)之间的伪随机整数。通常情况下,你可能还需要使用 srand() 函数来设置随机数生成器的种子。

下面是一个简单的示例,展示了如何在 C++ 中使用 rand() 函数生成随机数:

cpp #include <iostream> #include <cstdlib> #include <ctime> int main() { // 设置随机数种子 std::srand(std::time(0)); // 生成随机数 int random_number = std::rand(); // 输出随机数 std::cout << "Random number: " << random_number << std::endl; return 0; }

请注意,std::rand() 生成的随机数通常不是真正的随机数,而是伪随机数,它们是通过某个算法基于种子生成的一系列数字。因此,在每次运行程序时,如果不重新设置种子,将会得到相同的随机数序列。为了避免这种情况,可以使用 srand() 函数来设置种子,通常使用当前时间作为种子值,以便每次运行程序时都会得到不同的随机数序列。

另外,要注意 rand() 函数的范围是 0 到 RAND_MAX,这个范围可以通过 #include <cstdlib> 中的 RAND_MAX 常量获取。如果需要在其他范围内生成随机数,可以使用取模操作来调整范围。例如,要生成 1 到 100 之间的随机数,可以使用 rand() % 100 + 1

需要特别注意的是,rand() 函数不是线程安全的,如果在多线程环境下使用,可能会导致意外的结果。在多线程环境下,推荐使用 <random> 头文件中的更现代的随机数生成器

 

=============

(1) rand()函数:
   原型: int rand(void)
   功能: 产生从 [0,RAND_MAX] 之间的随机数,RAND_MAX为系统定义的宏, 32位机器上大小为32767。
   头文件: stdlib.h或者iostream

 

(2)srand()函数:
   原型: void srand(unsigned seed)
   功能: 产生随机数的起始发生数据,和rand函数配合使用
   头文件: stdlib.h或者iostream   time.h

   比如以当前时间作为起始发生数据:srand( (unsigned)time(0) );

 

(3) randomize()函数:
   原型: void randomize(void)
   功能: 通过time函数来初始化随机数发生器,和srand( (unsigned)time(0) )语句功能相同

   头文件: stdlib.h   time.h

 

(4)random()函数

     原型:int random(int num)

     功能:random函数返回一个0~num-1之间的随机数. random(num)是在stdlib.h中的一个宏定义

     头文件:stdlib.h

 

(5)产生[minNum, maxNum]范围内的整数随机数

复制代码
1 //产生[minNum, maxNum]的随机数
2 default_random_engine generator(time(0));
3 int myrand(int minNum, int maxNum)
4 {
5     std::uniform_int_distribution<int> distribution(minNum, maxNum);
6     return distribution(generator);
7 }
复制代码

 

 

注意几点:

1 从vc6.0以后randomize()和random()都已经不能用了,完全由srand()和rand()代替。但是在tc和c++ builder中还是可以用的(亲自测试),此时randomize、srand 和 random、rand两组之间可以任意组合,效果均没差别

2 如果没有初始化随机数发生器,程序每次重新运行产生的随机数都相同

3 若循环产生随机数,srand(time(0))不要放在循环内部,因为time()的精度是秒,如果两次time()之间程序没有超过一秒,其返回值是一样的,srand(time(0))设置的随机种子也就一样,产生的随机数也就一样

用法:(rand和srand比较通用,以下用它们举例)
1 产生[0,1]的小数:  rand()*1.0/RAND_MAX

2 产生[0,x]的整数:  rand()%(x+1)

3 产生[x,y]的整数:  rand()%(Y-X+1)+X(由于rand()产生的随机数最大为32767,因此如果范围内包括比32767大的数,要用 rand()*(y-x)/RAND_MAX +X  )

复制代码
#include<stdlib.h>

#include<stdio.h>

#include<time.h>

int main()

{

  srand((unsigned)time(0)); //srand放在循环外面

  for(int i=1;i<=10;i++)

     printf("%d ",rand()1);

}
复制代码

 【版权声明】转载请注明出处 http://www.cnblogs.com/TenosDoIt/archive/2013/04/15/3022029.html

==========

 

参考:

 

标签:rand,函数,int,srand,c++,随机数,time
From: https://www.cnblogs.com/rebrobot/p/18217849

相关文章

  • c/c++ 时间函数
     1time()头文件:time.h函数原型:time_ttime(time_t*timer)功能:获取当前的系统时间,返回的结果是一个time_t类型,其实就是一个大整数(long),其值表示从CUT(CoordinatedUniversalTime)时间1970年1月1日00:00:00(称为UNIX系统的Epoch时间)到当前时刻的秒数。然后调用localtime将......
  • 图像处理之计算物体的方向(C++)
    图像处理之计算物体的方向(C++)文章目录图像处理之计算物体的方向(C++)前言一、PCA获取物体主要方向1.原理2.代码实现二、Hu矩获取物体主要方向1.原理2.代码实现总结前言在图像处理中,物体的方向(倾斜角度)计算的应用非常常见,总结如下方法:PCA获得物体的主要方向以及Hu......
  • 基于C++的二叉树的创建与遍历(免费提供源码)
    下载地址如下:上传明细-CSDN创作中心项目介绍背景二叉树作为一种常见的数据结构,在计算机科学和编程实践中占有重要地位。它广泛应用于搜索算法、排序算法、表达式解析、符号表以及各种数据库索引结构中。因此,掌握二叉树的创建和遍历是计算机科学领域的一项基本技能。本项目......
  • C++中定义和声明的区别
     直接上例子在类里面声明(这里以静态数据成员和静态成员函数为例)classMyClass{public:staticintstaticDataMember;//静态数据成员的声明staticvoidstaticFunction();//静态成员函数的声明//其他成员...};在cpp文件中定义 静态成员的声明......
  • 【c++基础(三)】类和对象中--构造和析构函数
    1.前言本章重点本篇文章着重讲解类中的两个默认函数,分别为:构造函数,析构函数这是c++六个默认成员函数中的两个(其他四个在后面章节讲解) 我们平时在写基础的数据机构时,例如栈和队列如果自己没有注意没有进行初始化,就有可能导致出错,同理,在写完代码后,忘记销毁开辟好......
  • c++函数
    哈喽大家好,我是@菜就多练,输不起,就别玩,今天我来和大家分享函数函数就是在主函数上方的位置写,但也可以在下面写,常见函数类型有intdoubleboolstringchar.......不同函数类型它们的用法也不同,有判断的(bool),有计算的(intlonglong double),还有字符串的(charstring)等等等等那......
  • c++ 类型转换
     ========在C++中,类型转换(typeconversion)是将一个数据类型的变量转换为另一个数据类型的变量的过程。类型转换可以分为隐式转换(implicitconversion)和显式转换(explicitconversion)。下面详细介绍C++中的类型转换方式。隐式转换隐式转换也称为自动类型转换,是由编译器自动......
  • c++动态内存管理干货
     c++兼容c所以之前C语言使用的方式在c++中同样可以使用,但c++给出了更加简便的动态内存管理方法.1.申请内置类型空间c++定义了新的关键字new和delete(都是操作符不是函数),使用方法如图:需要注意的是,用new申请空间默认不会初始化,但是可以初始化。如图:另外,【】里面可以是变量:......
  • C++ - TCP粘包解决方法
     下面的代码演示了粘包问题,客户端连续三次向服务器端发送数据,服务器端却一次性接收到所有数据。服务器代码#define_WINSOCK_DEPRECATED_NO_WARNINGS#include<iostream>usingnamespacestd;//#include<stdio.h>#include<WinSock2.h>​//#pragmacomment(lib,"ws2_......
  • C++中的异类:“#” 符号背后的故事
    最近在写编程语言的书,聊到C++的宏,感觉很有意思,搬运过来。在C++语言中,# 符号是一个独特的符号。它似乎不在语言核心中,但是在源码里却又无处不在。在语法上,#的语法规则在C++体系里独具一格,和C++语法相比像是两个语言似的。这些差别让我们感受到#背后的故事不简单。今天,我们......