VC随机函数srand和rand用法

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

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

(0)

相关推荐

  • 有关C++中随机函数rand() 和srand() 的用法详解

    一.rand() 函数名:   rand 功   能:   随机数发生器 用   法:   int rand(void); 所在头文件: stdlib.h 函数说明 : rand()的内部实现是用线性同余法做的,它不是真的随机数,因其周期特别长,故在一定 的范围里可看成是随机的. rand()返回一随机数值的范围在0至RAND_MAX 间.RAND_MAX的范围最少是在32767之间(int).用 unsigned int 双字节是65535,四字节是4294967295的整数范围.0~RAND

  • 生成随机数rand函数的用法详解

    函数rand()是真正的随机数生成器,而srand()会设置供rand()使用的随机数种子.如果你在第一次调用rand()之前没有调用srand(),那么系统会为你自动调用srand().而使用同种子相同的数调用 srand()会导致相同的随机数序列被生成.srand((unsigned)time(NULL))则使用系统定时/计数器的值做为随机种子.每个种子对应一组根据算法预先生成的随机数,所以,在相同的平台环境下,不同时间产生的随机数会是不同的,相应的,若将srand(unsigned)tim

  • VC随机函数srand和rand用法

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

  • php中随机函数mt_rand()与rand()性能对比分析

    本文实例对比分析了php中随机函数mt_rand()与rand()性能问题.分享给大家供大家参考.具体分析如下: 在php中mt_rand()和rand()函数都是可以随机生成一个纯数字的,他们都是需要我们设置好种子数据然后生成,那么mt_rand()和rand()那个性能会好一些呢,下面我们带着疑问来测试一下. 例子1. mt_rand() 范例,代码如下: 复制代码 代码如下: <?php echo mt_rand() . "n"; echo mt_rand() . &quo

  • vc中SendMessage自定义消息函数用法实例

    本文实例讲述了vc中SendMessage自定义消息函数用法,分享给大家供大家参考.具体如下: SendMessage的基本结构如下: 复制代码 代码如下: SendMessage(     HWND hWnd,  //消息传递的目标窗口或线程的句柄.     UINT Msg, //消息类别(这里可以是一些系统消息,也可以是自己定义,下文具体介绍,)     WPARAM wParam, //参数1 (WPARAM 其实是与UINT是同种类型的,   //在vc编译器中右键有个"转到WPARA

  • VC++的combobox控件用法汇总

    在VC++程序设计中,combobox控件是再普通不过的窗体元素控件了,而对于新手来说,掌握combobox 的各种用法显得尤其重要,本文就来总结一些实用的combobox控件用法,供大家参考. 一.添加/删除Combo Box内容: 1. 一般是在ComboBox控件属性的Data标签里添加,一行表示ComboBox下拉列表中的一行,换行用ctrl+回车. 2. 在程序初始化时动态添加,如:控件内容初始化: CString strTemp; ((CComboBox*)GetDlgItem(ID

  • sql server中随机函数NewID()和Rand()

    在SQL Server中,随机函数有rand(),NewID(),其中rand是在0到1内随机取数,NewID则是生成随机的uniqueidentifier唯一标识符. SELECT * FROM Northwind..Orders ORDER BY NEWID() --随机排序 SELECT TOP 10 * FROM Northwind..Orders ORDER BY NEWID() --从Orders表中随机取出10条记录 示例 A.对变量使用 NEWID 函数 以下示例使用 NEWID

  • Vc++ 控件List Control用法总结

    1.新建对话框MFC,在对话框上放一个ListCtrl ID:IDC_PATH View:Report 2.为ListCtrl添加变量 右击->添加变量m_wndPath 3.找到OnInitDialog()函数添加如下代码: // TODO: 在此添加额外的初始化代码 m_wndPath.DeleteAllItems();//清空 m_wndPath.InsertColumn(0,_T("项目"));//添加列 m_wndPath.InsertColumn(1,_T("

  • VC自定义消息响应函数postmessage用法示例

    本文实例讲述了VC自定义消息响应函数postmessage的用法.分享给大家供大家参考.具体实现步骤如下: 1. 在 resource.h文件添加如下代码 定一个自己的消息 复制代码 代码如下: #define WM_MY_MESSAGE      WM_USER + 100       //---------------------by tyds 2.在...view.h的文件添加如下: 复制代码 代码如下: //{{AFX_MSG(CPostmessageView) afx_msg void

  • PHP也能干大事 随机函数

    写在前面 PHP也能干大事是我总结的PHP语法特性及相关函数类库的经典用法,并不一定是真正能实现四两拨千斤的功效,但是掌握这些方法,可以在你的工作和学习上有一些帮助,希望大家能集思广益,将<PHP也能干大事>丰富得更精彩!转载请注明出处(3mc2.com) 二.前言 PHP是常见的脚本语言,主要是因为其简单易学,上手快,几乎50%以上的Web程序都有PHP的身影(不完全统计).PHP为开发这提供了丰富的函数和API接口,这使得我们能够非常方便地使用其强大的内置函数及扩展,本文是<PHP也

  • 用VC++6.0实现石头剪刀布游戏的程序

    源程序是从网上看到的, geek_monkey于2015年3月3日修改了bug(输入字符非石头剪刀布都算是玩家赢) 编译环境为VC++6.0 增加"上帝模式"和数据统计,纯属娱乐. 我是C语言初学者,轻喷 复制代码 代码如下: #include <stdio.h> #include <stdlib.h> #include <time.h> #include <string.h> int exist_in(char *arr1[][2],

随机推荐