当前位置:编程学习 > C/C++ >>

C语言:产生随机数 求高手指导!!!

要求:(1)满足均匀分布的[M,N]区间随机数,其中M,N是正整数。 (2) 满足指数分布的[M,N]区间随机数,其中M,N是正整数。
追问:我想要的C语言的编写,谢谢
答案:我这里给出M,N是double 的通用程序。(m < n ).
随机数也是double,你若要整数自己取整。
指数分布,假定指数分布函数曲线是:
f(x)=LAM * exp(-LAM*x); 
LAM 是 指数分布函数 参数。你要自己给定,我这里给了1.2。

#include <stdio.h>
#include <stdlib.h>
#include <time.h>  // 别忘了 要 time.h 
#include <math.h>   // 别忘了 要 math.h

// 均匀分布的随机数
double rd_MN1(double m,double n)
{
double r;
if  (m>n) {r=n;n=m;m=r;};
r = (   (double)rand() / ((double)(RAND_MAX)+(double)(1)) );   
r = m + r * (n-m);
return r;
}



void main()
{
long int i,k;
double m,n;
double x, r;
double y;
double LAM=1.2;   //f(x)=LAM*exp(-LAM*x);
 
m=2.0; n=5.0;

srand((unsigned)time(NULL)); // 随机种子
for (i=0;i<50;i++) 
printf("%lf ", rd_MN1(m,n));
printf("\n==========\n");

srand((unsigned)time(NULL)); 
k=0;
loop:
r = (   (double)rand() / ((double)(RAND_MAX)+(double)(1)) );   
y = -log(r) / LAM;
if (y >= m && y <= n) {printf("%lf  ",y); k++;};
if  (k < 50) goto loop;   // 产生50个指数分布随机数
}
其他:http://www.pudn.com/downloads166/sourcecode/others/detail763438.html rand(int n)函数产生一个四位正整数,用rand()%(n-m)结果为一个[0,n-m)的数,rand()%(n-m)+m结果为一个[m,n)的数,然后再加1就为[m,n]之间的数。
下面这个程序中你可以参考一下:
http://read.pudn.com/downloads166/sourcecode/others/763438/SIMULIB.C__.htm 

上一个:C语言数组问题
下一个:跪求C语言 在线等 灰常急!!!!!

CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,