VC随机函数srand和rand用法

 更新时间:2020年4月25日 17:34  点击:1882

前言:编程中经常需要用到随机数,当然程序(函数)本身无法生成所谓的真实的随机数,还需要一个随机种子,然后根据既定算法算出一个确定结果。如果我们只需要有限次或是随机数时间要求间隔比较久的,也可直接使用当前时间(时间戳)作为随机数。既然时间可以作为随机数,那么为什么还需要专门的随机函数呢?这就涉及到随机序列的概率分布问题,通过专门设计的随机函数可以保证连续随机数序列尽量贴近一均匀合理的概率分布。而不能像开彩那样,领导让开几就开几,那样重复概率太高了。

VC中随机函数最常用就是srand和rand(实际上是属于标准C函数),其中srand负责设置随机种子,rand则负责生成随机数。使用此二随机函数需要包含<stdlib.h>头文件。

一、srand和rand函数

1、srand函数
srand定义如下:void srand( unsigned int seed );
其中seed为无符号整数,我们一般使用时间戳作为其参数,取得时间戳,需要包含<time.h>头文件。应用示例参下文。
2、rand函数
rand()函数产生一个介于0~RAND_MAX之间的伪随机整数(short型),RAND_MAX宏定义为0x7fff。如需要更大的随机整数,可使用多个随机整数进行组合运算即可得到。

二、随机数生成示例

#include <stdlib.h>
#include <stdio.h>
#include <time.h>

void main( void )
{
 int i,r;
 srand( (unsigned)time( NULL ) );

 for( i = 0;i < 10;i++ ) {
  r=rand()%10;
  printf( " %3d\n", r);
 }
}

使用注意:
1、rand生成序列对于给定的srand种子来说,序列值组合是固定的
2、srand值在快速调用时,time(NULL)可能不会更新,因为时间戳是以微秒计算的,所以微秒之内的如果再次执行srand和rand,则会得到相同的随机值序列
3、每次设置随机种子后,rand输出会自动复位到第一个初始值,种子相同,则初值及后续的序列相同
示例如下:

#include <stdlib.h>
#include <stdio.h>
#include <time.h>

int foo() {
	int r;
	srand( (unsigned)time( NULL ) );
	r = rand()%100;
	return r;
}

void main( void ) {
	int i,r;

	srand((unsigned)time(NULL));
	for( i = 0; i < 10;i++ ) {
		r=rand()%100;
		printf( " %3d", r);
	}
	printf("\n");

	for(i=0; i<10;i++) {
		printf( " %3d", foo());
	}
	printf("\n");
}

输出如下(可注意到第二行输出完全相同):

76 69 10 95 37 85 25 99 4 33

76 76 76 76 76 76 76 76 76 76

参考资料:

http://msdn.microsoft.com/en-us/library/aa272944(v=vs.60).aspx

http://msdn.microsoft.com/en-us/library/aa272875(v=vs.60).aspx

[!--infotagslink--]

相关文章

  • C#学习笔记- 随机函数Random()的用法详解

    下面小编就为大家带来一篇C#学习笔记- 随机函数Random()的用法详解。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2020-06-25
  • SpringMVC文件上传原理及实现过程解析

    这篇文章主要介绍了SpringMVC文件上传原理及实现过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-07-15
  • C# MVC模式中应该怎样区分应用程序逻辑(Controller层)和业务逻辑(Model层)?

    这篇文章主要介绍了C# MVC模式中应该怎样区分应用程序逻辑(Controller层)和业务逻辑(Model层)?,这也小编做.NET项目时经常思考和让人混乱的一个问题,这篇文章写的挺好,一下清晰了许多,需要的朋友可以参考下...2020-06-25
  • 使用Maven 搭建 Spring MVC 本地部署Tomcat的详细教程

    这篇文章主要介绍了使用Maven 搭建 Spring MVC 本地部署Tomcat,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-08-16
  • SpringMvc自动装箱及GET请求参数原理解析

    这篇文章主要介绍了SpringMvc自动装箱及GET请求参数原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-09-19
  • vc提示unexpected end of file found的原因分析

    这篇文章主要介绍了vc提示unexpected end of file found的原因分析,给出了几点常见错误原因的分析,需要的朋友可以参考下...2020-04-25
  • SpringMvc获取请求头请求体消息过程解析

    这篇文章主要介绍了SpringMvc获取请求头请求体消息过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-09-17
  • 详解CocosCreator MVC架构

    这篇文章主要介绍了CocosCreator MVC架构,同学们在制作游戏过程中,尽量使用一些架构,会避免很多问题...2021-04-16
  • Springmvc ResponseBody响应json数据实现过程

    这篇文章主要介绍了Springmvc ResponseBody响应json数据实现过程,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-10-26
  • 基于C#后台调用跨域MVC服务及带Cookie验证的实现

    本篇文章介绍了,基于C#后台调用跨域MVC服务及带Cookie验证的实现。需要的朋友参考下...2020-06-25
  • 仅30行代码实现Javascript中的MVC

    这篇文章主要介绍了仅30行代码实现Javascript中的MVC的方法,MVC的基础是观察者模式,这是实现model和view同步的关键,想要深入了解的朋友可以参考本文...2016-02-18
  • Spring MVC 处理一个请求的流程

    Spring MVC是Spring系列框架中使用频率最高的部分。不管是Spring Boot还是传统的Spring项目,只要是Web项目都会使用到Spring MVC部分。因此程序员一定要熟练掌握MVC部分。本篇博客简要分析Spring MVC处理一个请求的流程。...2021-02-06
  • 理解javascript中的MVC模式

    这篇文章主要为大家介绍了javascript中的MVC模式,MVC是一种软件架构模式,一般把软件模式分为三部分,本文就针对MVC模式的三部分进行讲解,感兴趣的小伙伴们可以参考一下...2016-02-01
  • SpringMVC和rabbitmq集成的使用案例

    这篇文章主要介绍了SpringMVC和rabbitmq集成的使用案例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-01-20
  • 使用jQuery.form.js/springmvc框架实现文件上传功能

    这篇文章主要介绍了使用jQuery.form.jsspringmvc框架实现文件上传功能,非常具有参考借鉴价值,感兴趣的朋友一起学习吧...2016-05-14
  • AngularJS教程之MVC体系结构详解

    本文主要讲解AngularJS MVC体系结构,这里提供详细的教程供大家学习参考,有需要的小伙伴可以参考下...2016-08-24
  • web面试MVC与MVVM区别及Vue为什么不完全遵守MVVM解答

    这篇文章主要介绍了web面试中常问问题,MVC与MVVM区别以及Vue为什么不完全遵守MVVM的难点解答,有需要的朋友可以借鉴参考下,希望能够有所帮助...2021-09-24
  • ASP.NET MVC API 接口验证的示例代码

    本篇文章主要介绍了ASP.NET MVC API 接口验证的示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2021-09-22
  • SpringMVC中的handlerMappings对象用法

    这篇文章主要介绍了SpringMVC中的handlerMappings对象用法,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2021-09-26
  • ASP.NET Core MVC如何实现运行时动态定义Controller类型

    这篇文章主要介绍了ASP.NET Core MVC如何实现运行时动态定义Controller类型,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-09-22