随机函数使用方法

随机函数使用方法
随机函数使用方法

1.rand()与srand()

在C语言函数库中包含了一个产生随机数的函数:

int rand( );

返回的是一个界于0~32767之间的伪随机数,包括0和32767。注意,这里产生的是伪随机数,不是真正意义上的随机数,看下面的程序:

#include "stdlib.h"

#include "stdio.h"

void main( void )

{

printf( " %6d\n", rand() );

getchar();

}

程序运行的结果是:

346

多次运行这个程序,发现每次产生的结果都是346(不同的机器可能产生的结果不一样),这就是所谓的伪随机数。伪随机数是通过一个公式来运算出来的,所以,每次产生的伪随机数都一样。那么,如何才能产生真正意义上的随机数呢?这就有一个随机种子的问题。在C 语言标准函数库中,有另一个配套函数:

void srand( unsigned int seed );

所以,要产生真正意义上的随机数,那么就要求每次提供的种子不一样,一般情况下,都设置时间为随机函数的种子。看下面的一段程序:

#include "stdlib.h"

#include "stdio.h"

#include "time.h"

void main( void )

{

int i;

srand( (unsigned)time( NULL ) );

printf( “ %6d\n”, rand() );

}

Output

6929

8026

21987

30734

20587

6699

22034

25051

7988

10104

每次运行这个程序,产生的随机数都不一样,这样就达到了随机数的要求了

2.random与randomize()

打开标准库中的头文件stdlib.h 就会发现有这样的一条语句:

#define random(num) (rand() % (num))

可见要产生给定范围的随机数,可以使用random()。

#define randomize() srand((unsigned)time(NULL))

所以random(num)是产生一个0—num-1的一个整数

randomize() 是随机数产生发生器(在VC中没有该函数)

注意:使用上述函数将stdlib.h包含进去。

EXCEL中的随机函数

在EXCEL中设一个公式:=INT(RAND()(33-1)+1), 浏览次数:26次悬赏分:0 |解决时间:2011-7-15 23:48 |提问者:592379518 最佳答案 公式错误,乘号不能省. =INT(RAND()*(33-1)+1) 意思为:产生1~32的随机数,若要产生1~33的随机数,公式可改成: =1+ROUND(RAND()*(33-1),) 或者 =1+INT(RAND()*33) 用Excel随即函数=INT(33*RAND()+1)产生了随机函数,但是怎么让它一直固定某个数字不改变呢? 浏览次数:308次悬赏分:0 |解决时间:2011-4-20 17:35 |提问者:炒牛奶 比如我在A1输入:=INT(33*RAND()+1) 然后A1显示了一个随机数字,比如9 但是如果我在A2里面也输入:=INT(33*RAND()+1) 然后A2里面也出现了一个随机数字24,但是同时A1里面的随机数字再次随机了一下,变了 怎么样让A1第一次随机显示出9后,永远就是9,无论我后面在其他单元格再次输入随机函数,A1还是显示9不变 最佳答案 这个很简单呀,点菜单中的“工具”.点“选项”,点“重新计算”,“手动重算”那里打勾,确认就可以了.

要用EXCEL中的随机函数rand函数返回1-33之间的6个整数,该如何编程?如果在SPSS的环境里呢? 浏览次数:809次悬赏分:0 |解决时间:2010-5-15 06:45 |提问者:ibeauty_ftes 最佳答案 =INT(RAND()*(33-1+1)) 向下拖六行 要用EXCEL中的随机函数rand函数返回0-36之间的随机数,该如何做?试编辑一个公式达到该目的 浏览次数:1675次悬赏分:5 |解决时间:2007-9-3 14:30 |提问者:monkey2004574 最佳答案 =RAND()*36 EXCEL随机函数RAND() 浏览次数:1635次悬赏分:10 |解决时间:2008-3-30 11:16 |提问者:lizhidan1120 我想在0、5、10 中间随机生成一个数可以么? 该怎么做!!望高人指点!!谢谢!!!! 最佳答案 =IF(RAND()>0.3,IF(RAND()>0.6,10,5),0) 其他回答共1条十三级 =INT(RAND()*3)*5 已向网友提问等?

C语言中产生随机数的方法

C语言中产生随机数的方法 引例:产生10个[100-200]区间内的随机整数。 #include #include //rand函数的头文件 #include //时间函数的头文件 int main() { int i; //循环变量 srand((unsigned) time(NULL)); //产生随机数的起始数据(以时间为种子) for (i=0; i<10; i++) //printf("%d\n", rand()); //产生[0,0x7fff)即[0,32767)以内的随机整数 //printf("%d\n", rand()%100); //产生0-99的随机整数 printf("%d\n", rand()%(200-100+1) + 100); //产生[100,200]内的随机整数return 0; } 在C语言中产生随机数需要以下几个函数的配合使用。 (1)rand函数——产生伪随机数 原型:int rand(void) 头文件:stdlib.h 功能:产生从0到RAND_MAX之间的随机数。RAND_MAX的值通常是0x7fff(十六进制数7FFF,也就是十进制数32767)。 例: #include #include int main() { int k; k = rand(); printf("%d\n", k); return 0; } 编译运行,发现每次运行程序产生的随机数都是一样的。 计算机中产生随机数,实际是采用一个固定的数作为“种子”,在一个给定的复杂算法中计算结果,所以叫“伪随机数”。 C语言中由于采用固定的序列作为种子,所以每次执行所取的是同一个数。 为上面的例子增加一个循环结构: #include #include int main() { int k,i;

用C语言产生随机数

用c语言产生随机数 在C语言中,rand()函数可以用来产生随机数,但是这不是真真意义上的随机数,是一个伪随机数,是根据一个数,我们可以称它为种子,为基准以某个递推公式推算出来的一系数,当这系列数很大的时候,就符合正态公布,从而相当于产生了随机数,但这不是真正的随机数,当计算机正常开机后,这个种子的值是定了的,除非你破坏了系统,为了改变这个种子的值,C提供了srand()函数,它的原形是void srand( int a)。 可能大家都知道C语言中的随机函数random,可是random函数并不是ANSI C标准,所以说,random函数不能在gcc,vc等编译器下编译通过。 rand()会返回一随机数值,围在0至RAND_MAX 间。返回0至RAND_MAX之间的随机数值,RAND_MAX定义在stdlib.h,(其值至少为32767),运算的结果是一个不定的数,要看你定义的变量类型,int整形的话就是32767。在调用此函数产生随机数前,必须先利用srand()设好随机数种子,如果未设随机数种子,rand()在调用时会自动设随机数种子为1。一般用for语句来设置种子的个数。具体见下面的例子。 一如何产生不可预见的随机序列呢 利用srand((unsigned int)(time(NULL))是一种方法,因为每一次运行程序的时间是不同的。

在C语言里所提供的随机数发生器的用法:现在的C编译器都提供了一个基于ANSI标准的伪随机数发生器函数,用来生成随机数。它们就是rand()和srand()函数。这二个函数的工作过程如下:1) 首先给srand()提供一个种子,它是一个unsigned int类型,其取值围从0~65535; 2) 然后调用rand(),它会根据提供给srand()的种子值返回一个随机数(在0到32767之间) 3) 根据需要多次调用rand(),从而不间断地得到新的随机数; 4) 无论什么时候,都可以给srand()提供一个新的种子,从而进一步“随机化”rand()的输出结果。 下面是0~32767之间的随机数程序: #include #include #include //使用当前时钟做种子 void main( void ) {int i; srand( (unsigned)time( NULL ) ); //初始化随机数for( i = 0; i < 10;i++ ) //打印出10个随机数 printf( " %d\n", rand() ); } 根据上面的程序可以很容易得到0~1之间的随机数:

EXCEL中的随机函数并取整

EXCEL中的随机函数并取整 2008-10-18 21:34:47| 分类:EXCEL学习| 标签:|字号大中小订阅 一、RAND 返回大于等于0 及小于 1 的均匀分布随机数,每次计算工作表时都将返回一个新的数值。语法RAND( ) 说明若要生成 a 与 b 之间的随机实数,请使用:RAND()*(b-a)+a 如果要使用函数RAND 生成一随机数,并且使之不随单元格计算而改变,可以在编辑栏中输入“=RAND()”,保持编辑状态,然后按F9,将公式永久性地改为随机数。示例如果您将示例复制到空白工作表中,可能会更易于理解该示例。操作方法创建空白工作簿或工作表。请在“帮助”主题中选取示例。不要选取行或列标题。从帮助中选取示例。按Ctrl+C。在工作表中,选中单元格A1,再按Ctrl+V。若要在查看结果和查看返回结果的公式之间切换,请按Ctrl+`(重音符),或在“工具”菜单上,指向“公式审核”,再单击“公式审核模式”。1 2 3 A B 公式说明(结果)=RAND() 介于0 到 1 之间的一个随机数(变量)=RAND()*100 大于等于0 但小于100 的一个随机数(变量)。 二、RAND()*(b-a)+a 即可生成介于a和b之间的随机数。如果只是RAND(),则生成0-1之间的。 三、在上面的函数前加上“INT”函数便可实现随机数的取整,但注意不要少 了括号。 四、=5*ROUND(D7,1) 解释:参数套用,简单,比如你的5.54在D7单元格内,用5乘以ROUND(D7,1)的结果就可以了啊,你原来的数当然不 能删除了,这个只是引用而已 五、如果需要在生成的随机数时保留几位小数请用如下函数: ROUNDDOWN((RAND()*(b-a)+a),N)。其中N为需要保留的小数位数。

C语言中的22个数学函数

C语言的22个数学函数 在使用C语言数学函数时候,应该在该源文件中使用以下命令行: #include 或#include "math.h",这里的<>跟""分别表示:前者表示系统到存放C库函数头文件所在的目录寻找需要包含的文件,这是标准方式;后者表示系统先在拥护当前目录中寻找要包含的文件,若找不到,再按前者方式查找。为节省时间,在使用自己编写的文件时使用的是“”,自己编写的文件一般是在当前目录下。 22个数学函数中只有abs的数据类型是:”整型“,”int“。 log10、logE中的10与E是在log的左下角位置。其余求弧度函数需要看清楚是不是指数。排列方式如下:函数名:函数功能参数介绍,返回值,说明。函数原型。 1.abs: 求整型x的绝对值,返回计算结果。 int abs(int x); 2.acos:计算COS-1(x)的值,返回计算结果,x应在-1到1范围内。 doubleacos(double x); 3.asin: 计算SIN-1(x)的值,返回计算结果,x应在-1到1范围内。 doubleasin(double x); 4.atan: 计算TAN-1(x)的值,返回计算结果。double atan(double x); 5.atan2: 计算TAN-1/(x/y)的值,返回计算结果。 double atan2(double x,double y); 6.cos: 计算COS(x)的值,返回计算结果,x的单位为弧度。 double cos(double x); 7.cosh: 计算x的双曲余弦COSH(x)的值,返回计算结果。 double cosh(double x); 8.exp: 求e x的值,返回计算结果。 double exp(double x); 9.fabs: 求x的绝对值,返回计算结果。 duoblefabs(fouble x); 10.floor: 求出不大于x的最大整数,返回该整数的双精度实数。 double floor(double x); 11.fmod: 求整除x/y的余数,返回该余数的双精度。 doublefmod(double x,double y);

C语言随机函数

编程时有时需要随机输入一些数,这是调用随机函数可以完成此相命令. # include “stdio.h” # include “stdlib.h” # include “time.h” /*需引用的头文件*/ srand((unsigned)time(NULL)); /*随机种子*/ n=rand()%(Y-X+1)+X; /*n为X~Y之间的随机数*/ int rand(void) 函数int rand( void );返回的是一个界于0~32767(0x7FFF)之间的伪随机数,包括0和32767。C预先生成一组随机数,每次调用随机函数时从指针所指向的位置开始取值,因此使用rand()重复运行程序产生的随机数都是相同的,可以通过srand()函数来改变指针位置。 void srand( unsigned int seed ) 改变随机数表的指针位置(用seed变量控制)。一般配合time(NULL)使用,因为时间每时每刻都在改变,产生的seed值都不同。 一直被这个东西弄得模糊不清,终于又去整理了一下.弥补一些细节 主要是对rand()函数的使用//#include 原型int rand(void); 例如:void myrand(int imax) { assert(imax>0); int num = rand(); if(num<=imax) { return num; } else { return (num%imax); }

} 功能产生0到RAND_MAX之间的随机整数.至于RAND_MAX有多大,可以自己编程的时候输出.这是库里自带的宏定义. 像这样的一个函数,就产生了一个0到imax的随机整数.但是,当你多次运行你会发现,每一次产生的值都是一样的.并不是说没有随机,而是随机数发生器(程序产生的随机数是依靠时钟钟断来产生的.因此并不是真正意义上的随机.但对于我们来说,已经够用了)没有被重置.导致结果相同.那下面就看一下几种初始化随机数发生器的办法. srand()函数: 原型: void srand(unsigned seed) 功能: 产生随机数的起始发生数据,和rand函数配合使用 头文件: stdlib.h time.h 例: #include #include #include int main(void) { int i; time_t t;

java随机函数用法Random

java随机函数用法Random import java.util.Random; public class RandomNumber{ public static void main(String[] args) { // 使用https://www.360docs.net/doc/b618001076.html,ng.Math的random方法生成随机数System.out.println("Math.random(): " + Math.random()); // 使用不带参数的构造方法构造java.util.Random对象System.out.println("使用不带参数的构造方法构造的Random对象:"); Random rd1 = new Random(); // 产生各种类型的随机数 // 按均匀分布产生整数 System.out.println("int: " + rd1.nextInt()); // 按均匀分布产生长整数 System.out.println("long: " + rd1.nextLong()); // 按均匀分布产生大于等于0,小于1的float数[0, 1) System.out.println("float: " + rd1.nextFloat());

// 按均匀分布产生[0, 1)范围的double数 System.out.println("double: " + rd1.nextDouble()); // 按正态分布产生随机数 System.out.println("Gaussian: " + rd1.nextGaussian()); // 生成一系列随机数 System.out.print("随机整数序列:"); for (int i = 0; i < 5; i++) { System.out.print(rd1.nextInt() + " "); } System.out.println(); // 指定随机数产生的范围 System.out.print("[0,10)范围内随机整数序列: "); for (int i = 0; i < 10; i++) { // Random的nextInt(int n)方法返回一个[0, n)范围内的随机数 System.out.print(rd1.nextInt(10) + " "); } System.out.println(); System.out.print("[5,23)范围内随机整数序列: "); for (int i = 0; i < 10; i++) {

C语言生成随机函数

程序有一个参数,表示生成的密码的长度 运行的时候要加上,比如./password 8 我写的很简单,参数没做检查,你应该自己去完善一下。 #include #include #include void generate(int len,char* buffer) { /*产生密码用的字符串*/ static const char string[]= "0123456789abcdefghiljklnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"; int i = 0; for(; i < len; i++) { buffer[i] = string[rand()%strlen(string)]; /*产生随机数*/ } } int main(int argc, char* argv[]) { int len = atoi(argv[1]); /*指定生成的密码长度*/ srand(time(0)); /*设定随机数种子*/ char *buffer = (char*)malloc(len + 1); /*分配内存*/ generate(len,buffer); /*生成密码*/ puts(buffer); /*输出到屏幕*/ FILE* fp = fopen("pass","w"); /*打开输出文件*/ if(fp == NULL) return -1; fwrite(buffer, sizeof(char), len, fp); /*写文件*/ fclose(fp); /*关闭文件*/ free(buffer); /*释放动态分配的内存*/ return 0; /*程序结束*/ } 自己可以写一个函数。 IT生活系列群: 50337593 IT-live(软件开发) 计算机软件技术群,技术是相通的,大家取长补短,共同进步吧!--软件不仅仅是一种思想。他是一门艺术 30633141 IT-live(网站建设)

引用java中随机函数的使用

引用java中随机函数的使用 引用 axunlb的java中随机函数的使用 java中随机函数的使用 Random N = new Random(1000);中的1000产生的随机数在0到1000之间,参数用于指定随机数产生的范围 方法1 (数据类型)(最小值+m()*(最大值-最小值+1)) 例: (int)(1+m()*(10-1+1)) 从1到10的int型随数 方法2 获得随机数 for (int i=0;i<30;i++) {.println((int)(1+m()*10));} (int)(1+m()*10) 通过包的random方法得到1-10的int随机数 公式是:最小值---最大值(整数)的随机数

(类型)最小值+m()*最大值 方法3 Random ra =new Random(); for (int i=0;i<30;i++) {.println(ra.nextInt(10)+1);} 通过包中的Random类的nextInt方法来得到1-10的int随机数import .*; class Test { public static void main(String args[]) { int[] t = new int[10]; Random rand = new Random(); for(int i=0;i

} } } java中Random的构造函数Random()中默认的种子就是当前时间和midnight, January 1, 1970 UTC的差值(用毫秒计),所以每次运行程序都可以得到不同的结果nt()也可以如此用r.nextInt(100)—–100以内的随机数

在excel中产生随机数

用excel产生随机数 统计软件提供的随机数发生器可以使我们对抽样分布进行计算机模拟,对抽样分布有更加直观的理解。Excel的分析工具库中有一个“随机数发生器”模块,可以产生服从大部分常用分布的模拟数据,但没有提供直接产生随机数的函数。在SPSS中产生随机数的函数在“Randomnumbers”类别中,相应的函数都是以Rv 开头的。 1 样本均值抽样分布的随机模拟 假总体的均值为μ,标准差为σ,则统计理论表明,不论总体的分布如何,只要样本容量n足够大,样本均值的分布总会趋向于正态分布,且均值为μ,标 准差为。 例题:假设总体为均匀分布,模拟样本均值的抽样分布。 假设总体的分布为0-1区间上的均匀分布,则总体的均值为0.5,方差等于 1/12,标准差等于0.288675。现在,我们从总体中抽取1000个样本容量为2的样本(有放回抽样),计算每个样本的样本均值,然后观察样本均值的分布状况。 新建一个Excel工作簿,单击“工具”“数据分析”“随机数发生器”,在弹出的对话框中把变量个数设为2,随机数个数为1000,选择0-1区间的均匀分布,结果放在新工作表中(图1)。把输出结果的每一行看作一个容量为2的样本,共有1000个样本。在C列中计算每个样本的均值。接下来我们就可以分析这1000个样本均值的分布状况了。由于SPSS的直方图工具更为方便,我们把相应的数据复制到SPSS中作直方图,结果如图2,抽样分布的均值为0.5097,标准差为 0.20345,理论值等于0.288675/ 2 =0.20412,两者差异不大。 图1 随机数发生器对话框

图2 样本均值的抽样分布,样本容量=2 2 样本比例抽样分布的随机模拟 样本比例实质上就是指标数值只能取0和1时的样本均值。由于在这种情况下总体的分布为0-1分布,因此在重复抽样的条件下样本均值抽样分布的理论分布是二项分布。中心极限定理表明当样本用量足够大(能够保证np≥5,nq≥5)时二项分布可以用正态分布来近似。 [例] 假设有大批零件,不合格率p为0.2。随机模拟从总体中抽取样本容量分别为5,20,50的2000个样本,分析样本比例p? 的抽样分布。 新建一个工作表,在单元格中输入图5-10左上角所示的信息作为总体:总体中取值为1(不合格)的概率为0.2,取值为0(合格)的概率为0.8。 图3 二项分布的随机模拟

Excel的随机数函数

Excel的随机数函数 1、生成随机数字(1)生成随机数比较简单,=rand()即可生成0-1之间的随机数;(2)如果要是整数,就用=int(rand())*10,表示0至9的整数,以此类推;(3)如果要生成a与b 之间的随机实数,就用=rand()*(b-a)+a,如果是要整数就用=int(rand()*(b-a))+a;稍微扩充一下,就能产生固定位数的整数了。注意:如果要使用函数rand()生成一随机数,并且使之不随单元格计算而改变,可以在编辑栏中输入“=rand()”,保持编辑状态,然后按F9,将公式永久性地改为随机数。不过,这样只能一个一个的永久性更改,如果数字比较多,也可以全部选择之后,另外选择一个合适的位置粘贴,粘贴的方法是点击右键,选择“选择性粘贴”,然后选择“数值”,即可将之前复制的随机数公式产生的数值(而不是公式)复制下来! 2、产生随机字母随机小写字母:=CHAR(INT(RAND()*26)+97) 随机大写字母:=CHAR(I NT(RAND()*26)+65) 随机大小写混合字母:=CHAR(INT(RAND()*26)+if(INT(RAND()*2) =0,65,97)) 3、随机不重复数字序列的生成方法 (1)在A1-A52间填入"=INT(RAND()*52)+1",产生1-52间的随机数,注意这里是有重复的 (2)在B1-B52间填入1-52 (3)在C54-BB54填入1-52 (4)在C1填入"=IF(ROW()=C$54,I NDEX(B$1:B$52,INDEX($A$1:$A$52,C$54)),IF(ROW()=INDEX($A$1:$A$52,C$54),INDEX (B$1:B$52,C$54),B1))"。分项解释: a:ROW()=C$54,如果当前行等于当前交换所排的序号 b:INDEX(B$1:B$52,INDEX($A$1:$A$52,C$54)),返回在B1到B52中选择A1:A 52中的第C54个值 c:IF(ROW()=INDEX($A$1:$A$52,C$54),否则的话,如果当前行等于A1:A52中第C54个值,则: d:INDEX(B$1:B$52,C$54),返回B1:B52中的第C54个值 e:若以上条件都不满足,则返回B1 (5)将C1复制到C1:BA52这个区域里面,在BA1: BA52中,我们就得到了一个不重复的随机序列,

C语言产生随机整数的方法

产生随机整数的方法: #include #include …… srand((unsigned long)time(0)); /*产生随机数种子*/ a=rand()*limit/RAND_MAX; /*rand()在C语言中称为随机函数,它的功能是产生一个不超过RAND_MAX的随机非负整数,RAND_MAX是符号常量,代表整型最大值,即随机数的最大值 32767。limit变量表示随机数的范围。例如产生一个100以内的随机数rand()*100.00/ RAND_MAX */ b=rand()*limit/RAND_MAX; a=rand()*limit/RAND_MAX; 计算机产生随机数,后一个是根据前一个产生的,这样第一个随机数称为种子。如果没有种子,计算机按默认计算,每次产生的数都一样。种子通常是利用系统时钟设定的:srand((unsigned long)time(0)) 产生随机整数的模板: #include "time.h" #include “stdlib.h” …… srand((unsigned long)time(0)); /*产生随机数种子*/ a=rand()*limit/RAND_MAX; //limit表示随机数范围0~limit。

b=rand()*limit/RAND_MAX; a=rand()*limit/RAND_MAX; 【例题】两个随机数的加减法 #include "time.h" #include "stdlib.h" #include "stdio.h" int main() { int a,b,z,limit; /* limit随机数的最大值——范围*/ printf("please input the limit\n"); scanf("%d",&limit); while(1) { srand((unsigned long)time(0)); /*产生随机数种子*/ a=rand()*limit/RAND_MAX; b=rand()*limit/RAND_MAX; a=rand()*limit/RAND_MAX; printf("%d+%d=",a,b); scanf("%d",&z); if((a+b)==z) printf("good!\n"); else printf("error!\n"); } while(1); return 0; }

C# Random随机函数使用方法

C# Random随机函数使用方法 随机数的使用很普遍,可用它随机显示图片,用它防止无聊的人在论坛灌水还可以用来加密信息等等。本文讨论如何在一段数字区间内随机生成若干个互不相同的随机数,比如在从1到20间随机生成6个互不相同的整数,并通过此文介绍Visual c#中随机数的用法。 .net.Frameword中提供了一个专门产生随机数的类System.Random,此类默认情况下已被导入,编程过程中可以直接使用。我们知道,计算机并不能产生完全随机的数字,它生成的数字被称为伪随机数,它是以相同的概率从一组有限的数字中选取的,所选的数字并不具有完全的随机性,但就实用而言,其随机程度已经足够了。 我们可以用以下两种方法初始化一个随机数发生器; 函数是这样用,比如100至999的随机数 Random ran=new Random(); int RandKey=ran.Next(100,999); 不过这样会有重复,可以给Random一个系统时间做为参数,以此产生随机数,就不会重复了 第一种方法不指定随机种子,系统自动选取当前时前作随机种子: Random ra=new Random(); 第二种方法是指定一个int型的参数作为随机种子: int iSeed=6; Random ra=new Random(iSeed); 下面我们要用到Random.Next()方法产生随机数。 ra.Next(); 它返回一个大于或等于零而小于2,147,483,647的数,这并不满足我们的需要,下面我们介绍它的重载函数和其它一些方法。 public virtual int Next(int); 用法:ra.next(20)

EXCEL随机函数实例

EXCEL随机函数实例 excel中如何随机选择不重复的数: excel中带有一个随机函数rand(),但rand()只选取0~1之间的随机数,而且两个数不保证不重复。因此就用到了函数rank。 1、假设要在1~100中随机抽取5个不重复的数。 2、在A1~A100中输入=rand()。 ;也就是在A1~A100中随机抽取了100个0~1之间的随机数。 3、在C1中输入=RANK(A1,A:A);C2中输入=RANK(A2,A:A);C3中输入=RANK(A3,A:A)……以此类推。 ;目标单元格C1~C5。 ;其实,C1~C5中显示的是A1~A5在100个随机数中的排序。 4、已成功抽取1~100中的5个随机数。按ctrl+r刷新。 1、生成随机数字 (1)生成随机数比较简单,=rand()即可生成0-1之间的随机数; (2)如果要是整数,就用=int(rand()*10),表示0至9的整数,以此类推; (3)如果要生成a与b之间的随机实数,就用=rand()*(b-a)+a,如果是要整数就用=int(rand()*(b-a))+a;稍微扩充一下,就能产生固定位数的整数了。 注意:如果要使用函数rand()生成一随机数,并且使之不随单元格计算而改变,可以在编辑栏中输入“=rand()”,保持编辑状态,然后按F9,将公式永久性地改为随机数。不过,这样只能一个一个的永久性更改,如果数字比较多,也可以全部选择之后,另外选择一个合适的位置粘贴,粘贴的方法是点击右键,选择“选择性粘贴”,然后选择“数值”,即可将之前复制的随机数公式产生的数值(而不是公式)复制下来! 2、产生随机字母 随机小写字母:=CHAR(INT(RAND()*26)+97) 随机大写字母:=CHAR(INT(RAND()*26)+65) 随机大小写混合字母:=CHAR(INT(RAND()*26)+if(INT(RAND()*2)=0,65,97)) 3、产生随机的六位数的字母和数字混合 =CONCA TENATE(IF(INT(RAND()*2)=0,CHAR(INT(RAND()*9+48)),IF(INT(RAND()*2)=0, CHAR(INT(RAND()*25+65)),CHAR(INT(RAND()*25+97)))),IF(INT(RAND()*2)=0,CHAR(IN T(RAND()*9+48)),IF(INT(RAND()*2)=0,CHAR(INT(RAND()*25+65)),CHAR(INT(RAND()*2

实用C语言中有关随机函数的使用详解

c语言中有关随机函数的使用详解 在C语言中,rand()函数可以用来产生随机数,但是这不是真真意义上的随机数,是一个伪随机数,是根据一个数,我们可以称它为种子,为基准以某个递推公式推算出来的一系数,当这系列数很大的时候,就符合正态公布,从而相当于产生了随机数,但这不是真正的随机数,当计算机正常开机后,这个种子的值是定了的,除非你破坏了系统,为了改变这个种子的值,C提供了srand()函数,它的原形是void srand( int a)。 可能大家都知道C语言中的随机函数random,可是random 函数并不是ANSI C标准,所以说,random函数不能在gcc,vc 等编译器下编译通过。 rand()会返回一随机数值,范围在0至RAND_MAX 间。返回0至RAND_MAX之间的随机数值,RAND_MAX定义在stdlib.h,(其值至少为32767)我运算的结果是一个不定的数,要看你定义的变量类型,int整形的话就是32767。在调用此函数产生随机数前,必须先利用srand()设好随机数种子,如果未设随机数种子,rand()在调用时会自动设随机数种子为1。一般用for 语句来设置种子的个数。具体见下面的例子。 一如何产生不可预见的随机序列呢 利用srand((unsigned int)(time(NULL))是一种方法,因为每一次运行程序的时间是不同的。 在C语言里所提供的随机数发生器的用法:现在的C编译

器都提供了一个基于ANSI标准的伪随机数发生器函数,用来生成随机数。它们就是rand()和srand()函数。这二个函数的工作过程如下: 1) 首先给srand()提供一个种子,它是一个unsigned int类型,其取值范围从0~65535; 2) 然后调用rand(),它会根据提供给srand()的种子值返回一个随机数(在0到32767之间) 3) 根据需要多次调用rand(),从而不间断地得到新的随机数; 4) 无论什么时候,都可以给srand()提供一个新的种子,从而进一步“随机化”rand()的输出结果。 下面是0~32767之间的随机数程序: 复制代码代码如下: #include #inl #include #include #include main( ) { int i; srand( (unsigned)time( NULL ) ); for( i = 0; i 10;i++ )

用c语言产生随机数rand()

用c语言产生随机数rand() 在C语言中,rand()函数可以用来产生随机数,但是这不是真真意义上的随机数,是一个伪随机数,是根据一个数,我们可以称它为种子,为基准以某个递推公式推算出来的一系数,当这系列数很大的时候,就符合正态公布,从而相当于产生了随机数,但这不是真正的随机数,当计算机正常开机后,这个种子的值是定了的,除非你破坏了系统,为了改变这个种子的值,C提供了srand()函数,它的原形是void srand( int a)。 可能大家都知道C语言中的随机函数random,可是random函数并不是ANSI C标准,所以说,random函数不能在gcc,vc等编译器下编译通过。 rand()会返回一随机数值,范围在0至RAND_MAX 间。返回0至RAND_MAX之间的随机数值,RAND_MAX定义在stdlib.h,(其值至少为32767)我运算的结果是一个不定的数,要看你定义的变量类型,int整形的话就是32767。在调用此函数产生随机数前,必须先利用srand()设好随机数种子,如果未设随机数种子,rand()在调用时会自动设随机数种子为1。一般用for语句来设置种子的个数。具体见下面的例子。

一如何产生不可预见的随机序列呢 利用srand((unsigned int)(time(NULL))是一种方法,因为每一次运行程序的时间是不同的。 在C语言里所提供的随机数发生器的用法:现在的C编译器都提供了一个基于ANSI标准的伪随机数发生器函数,用来生成随机数。它们就是rand()和srand()函数。这二个函数的工作过程如下: 1) 首先给srand()提供一个种子,它是一个unsigned int类型,其取值范围从0~65535; 2) 然后调用rand(),它会根据提供给srand()的种子值返回一个随机数(在0到32767之间) 3) 根据需要多次调用rand(),从而不间断地得到新的随机数; 4) 无论什么时候,都可以给srand()提供一个新的种子,从而进一步“随机化”rand()的输出结果。 下面是0~32767之间的随机数程序: #include #include #include //使用当前时钟做种子 void main( void ) {int i; srand( (unsigned)time( NULL ) ); //初始化随机数 for( i = 0; i < 10;i++ ) //打印出10个随机数

rand系列函数

1,rand生成均匀分布的伪随机数。分布在(0~1)之间 主要语法:rand(m,n)生成m行n列的均匀分布的伪随机数 rand(m,n,'double')生成指定精度的均匀分布的伪随机数,参数还可以是'single' rand(RandStream,m,n)利用指定的RandStream(我理解为随机种子)生成伪随机数rand(n):生成0到1之间的n阶随机数方阵 rand(m,n):生成0到1之间的m×n的随机数矩阵 2,randn生成标准正态分布的伪随机数(均值为0,方差为1) 主要语法:和上面一样 3, randi生成均匀分布的伪随机整数 主要语法:randi(iMax)在闭区间[1,iMax]生成均匀分布的伪随机整数 randi(iMax,m,n)在闭区间[1,iMax]生成mXn型随机矩阵 randi([iMin,iMax],m,n)在闭区间[iMin,iMax]生成mXn型随机矩阵 4,randperm随机打乱一个数字序列 randperm(n):产生一个1到n的随机顺序。 >> randperm(10) ans = 6 4 8 9 3 5 7 10 2 1 p = randperm(n,k) 返回一行从1到n的整数中的k个,而且这k个数也是不相同的。randperm完成的是不重复的重排采样(k-permutations),如果结果中的数需要重复多次出现的情况,则可以用:randi(n,1,k)。 5,randerr函数 randerr(20,7)产生什么矩阵? 产生一个20×7的矩阵,矩阵每一行随机有一个元素为1,其余的为0 out2 = randerr(8,7,[0 2; .25 .75]) 每行出现零个错误的概率是25% 出现2个错误的概率是75%(值为1表示出现错误) (1)产生随机矩阵,并返回制定范围内的元素 >a = randi([-50 50], 1, 100); >b = find(a > 20 & a < 40)2 (2)产生一个元素为0和1,size为100×5的随机矩阵,返回元素全为1的行。 >a = randi([0, 1], 100, 5) >b=find(all(a,2))3 (3)随机产生10个12位的0、1二进制序列,要求每个序列中包含7个1和5个0的形式。%程序如下 >N =10; >data = randerr(N, 12, 7)'; >data = data( : )'; >str1 = dec2bin(data); >str2 = reshape(str1, 12, N); >seque = str2'

matlab随机函数rand使用中应注意的问题

matlab随机函数rand使用中应注意的问题 rand产生的是0到1(不包括1)的随机数. matlab的rand函数生的是伪随机数,即由种子递推出来的,相同的种子,生成相同的随机数. matlab刚运行起来时,种子都为初始值,因此每次第一次执行rand得到的随机数都是相同的. 1.多次运行,生成相同的随机数方法: 用rand('state',S)设定种子 S为35阶向量,最简单的设为0就好 例: rand('state',0);rand(10) 2. 任何生成相同的随机数方法: 试着产生和时间相关的随机数,种子与当前时间有关. rand('state',sum(100*clock)) 即: rand('state',sum(100*clock)) ;rand(10) 只要执行rand('state',sum(100*clock)) ;的当前计算机时间不现,生成的随机值就不现. 也就是如果时间相同,生成的随机数还是会相同. 在你计算机速度足够快的情况下,试运行一下: rand('state',sum(100*clock));A=rand(5,5);rand('state',sum(100*clock));B=rand(5,5); A和B是相同. 所以建议再增加一个随机变量,变成: rand('state',sum(100*clock)*rand(1)); 据说matlab 的rand 函数还存在其它的根本性的问题,似乎是非随机性问题. 没具体研究及讨论,验证过,不感多言. 有兴趣的可以查阅: Petr Savicky Institute of Computer Science Academy of Sciences of CR Czech Republic savicky@cs.cas.cz September 16, 2006 Abstract

C语言库函数手册

C语言库函数手册 分类函数,所在函数库为 ctype.h int isalpha(int ch) 若ch是字母('A'-'Z','a'-'z')返回非0值,否则返回0 int isalnum(int ch) 若ch是字母('A'-'Z','a'-'z')或数字('0'-'9') 返回非0值,否则返回0 int isascii(int ch) 若ch是字符(ASCII码中的0-127)返回非0值,否则返回0 int iscntrl(int ch) 若ch是作废字符(0x7F)或普通控制字符(0x00-0x1F) 返回非0值,否则返回0 int isdigit(int ch) 若ch是数字('0'-'9')返回非0值,否则返回0 int isgraph(int ch) 若ch是可打印字符(不含空格)(0x21-0x7E)返回非0值,否则返回0 int islower(int ch) 若ch是小写字母('a'-'z')返回非0值,否则返回0 int isprint(int ch) 若ch是可打印字符(含空格)(0x20-0x7E)返回非0值, 否则返回0 int ispunct(int ch) 若ch是标点字符(0x00-0x1F)返回非0值,否则返回0 int isspace(int ch) 若ch是空格(' '),水平制表符('\t'),回车符('\r'), 走纸换行('\f'),垂直制表符('\v'),换行符('\n') 返回非0值,否则返回0 int isupper(int ch) 若ch是大写字母('A'-'Z')返回非0值,否则返回0 int isxdigit(int ch) 若ch是16进制数('0'-'9','A'-'F','a'-'f')返回非0值, 否则返回0 int tolower(int ch) 若ch是大写字母('A'-'Z')返回相应的小写字母 ('a'-'z') int toupper(int ch) 若ch是小写字母('a'-'z')返回相应的大写字母 ('A'-'Z') 数学函数,所在函数库为 math.h、stdlib.h、string.h、float.h int abs(int i) 返回整型参数i的绝对值 double cabs(struct complex znum) 返回复数znum的绝对值 double fabs(double x) 返回双精度参数x的绝对值 long labs(long n) 返回长整型参数n的绝对值 double exp(double x) 返回指数函数e^x的值 double frexp(double value,int *eptr) 返回value=x*2n中x的值,n存贮在eptr中 double ldexp(double value,int exp); 返回value*2exp的值 double log(double x) 返回ln(x)的值 double log10(double x) 返回log10(x)的值 double pow(double x,double y) 返回x^y的值 double pow10(int p) 返回10^p的值 double sqrt(double x) 返回x的正平方根 double acos(double x) 返回x的反余弦cos-1(x)值,x为弧度

相关文档
最新文档