白云鄂博矿区网站建设,网站建设工作具体内容,凡客诚品是什么牌子,30天网站建设实录 pdfC语言生成随机数
如果只要产生随机数而不需要设定范围的话#xff0c;只要用rand()就可以#xff1b;rand()会返回一随机数值, 范围在0至RAND_MAX 间#xff1b;RAND_MAX定义在stdlib.h, 其值为2147483647#xff1b;
如果想要获取在一定范围内的数的话#xff0c;直接做…C语言生成随机数
如果只要产生随机数而不需要设定范围的话只要用rand()就可以rand()会返回一随机数值, 范围在0至RAND_MAX 间RAND_MAX定义在stdlib.h, 其值为2147483647
如果想要获取在一定范围内的数的话直接做相应的除法取余即可
如何获取小数呢例如我们可以先获得10001以内的整数0~10000然后再用这个整数除以10000得到小数点后两位的小数
通过多次运行发现如果只使用rand()生成了10个随机数这10个随机数是固定的
这与srand()函数有关srand()用来设置rand()产生随机数时的随机数种子在调用rand()函数产生随机数前可以先利用srand()设好随机数种子seed, 如果未设随机数种子, rand()在调用时会自动设随机数种子为1
srand()函数定义 void srand (unsigned int seed);
通常可以利用geypid()或time(0)的返回值来当做seed
如果你用time(0)的话要加入头文件#includectime
time(0)或者time(NULL)返回的是系统的时间从1970.1.1午夜算起单位秒
VC6中看一下
void CRandtestView::OnDraw(CDC* pDC)
{CRandtestDoc* pDoc GetDocument();ASSERT_VALID(pDoc);// TODO: add draw code for native data hereCString str1;int row0;int i0;for(i0;i10;i){str1.Format(%d, rand());pDC-TextOut(50, 50row*20, str1);rowrow1;}row 0;for(i0;i10;i){str1.Format(%d, rand() % 10);pDC-TextOut(150, 50row*20, str1);rowrow1;}row 0;for(i0;i10;i){str1.Format(%d, rand() % 100);pDC-TextOut(250, 50row*20, str1);rowrow1;}row 11;for(i0;i10;i){str1.Format(%f, (rand()%10001)/10000.0);pDC-TextOut(50, 50row*20, str1);rowrow1;}row 11;srand(time(0));for(i0;i10;i){str1.Format(%d, rand()%10);pDC-TextOut(150, 50row*20, str1);rowrow1;}
} C 11 生成随机数
在 C 11 标准中定义在头文件 random 中的随机数库通过一组协作的类可以用更少的编程来实现更强的功能
主要包括2个类 随机数引擎类random-number engines 随机数分布类random-number distribution) 其中一个引擎类可以生成 unsigned 随机数列一个分布使用一个引擎类生成指定类型的在给定范围内的服从指定概率分布的随机数。
随机数引擎是函数对象类他们定义了一个调用运算符该运算符不接受参数并返回一个随机的 unsigned 整数我们可以通过调用一个随机数引擎对象来生成原始随机数 类似引擎类型分布类型也是函数对象类分布类型定义了一个调用运算符它接受一个随机数引擎作为参数分布对象使用它的引擎参数生成随机数并将其映射到指定的分布
C 11 可以生成 20 种不同的分布类型比如 均匀分布uniform正态分布normal二项分布binomial泊松分布poisson学生分布 student 等
#include iostream
#include random
#include ctimeusing namespace std;int main()
{default_random_engine e;uniform_int_distributionunsigned u(0,9);for(int i 0; i 10; i)cout u(e) endl;uniform_real_distributiondouble u2(0,9);for(int i 0; i 10; i)cout u2(e) endl;bernoulli_distribution b;for(int i 0; i 10; i)cout b(e) endl;normal_distribution u3(2,0.25);e.seed(time(0));for(int i 0; i 10; i)cout u3(e) endl; return 0;
}
创建指定范围的随机整数创建指定范围的随机实数 创建服从0-1分布的随机数bernoulli_distribution 意为伯努利分布即0-1分布
使用normal_distribution来控制随机数引擎生成均值为2标准差为0.25的正态分布数据