重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
rand()是生成一个从0到RAND_MAX的随机数,所以要生成小数,除以RAND_MAX就一定是一个小数:
成都创新互联公司-专业网站定制、快速模板网站建设、高性价比剑川网站开发、企业建站全套包干低至880元,成熟完善的模板库,直接使用。一站式剑川网站制作公司更省心,省钱,快速模板网站建设找我们,业务覆盖剑川地区。费用合理售后完善,十年实体公司更值得信赖。
(double)rand()/RAND_MAX
什么叫随机数?就是不确定的数,不过这个表达式,可以肯定的是从0到1的小数。
//---------------------------------------------------------------------------
#include stdio.h
#include stdlib.h
#include time.h
double rnd(void)
{
static int fg=1;
int rd;
if (fg) {
srand(time(NULL));
fg=0;
}
return (double)(rand()%900+100)/100;
}
int main(void)
{
int i;
for (i = 0; i 10; i++) //输出10个[1.00,10.00]区间内的小数
printf("%.2f\n",rnd());
return 0;
}
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
C语言中生成1个0到1的随机数可以执行语句:float b=rand()/(RAND_MAX+1.0);
解析:
标准C库中函数rand()可以生成0~RAND_MAX之间的一个随机数,其中RAND_MAX 是stdlib.h 中定义的一个整数,它与系统有关。rand()函数没有输入参数,直接通过表达式rand()来引用;
用函数rand取得的随机数除以(RAND_MAX+1.0),即可确保得到的结果在0到1之间。ISO IEC 9899 2011 (C11)标准中未规定 RAND_MAX 的具体数值。但该标准规定了RAND_MAX 的值应至少为32767。编程的时候,不应该对 RAND_MAX 的具体数值做任何假设。
扩展资料:
相关说明:
1、因为rand()函数是按指定的顺序来产生整数,因此每次执行上面的语句都打印相同的两个值,所以说C语言的随机并不是真正意义上的随机。
2、为了使程序在每次执行时都能生成一个新序列的随机值,我们通常通过为随机数生成器提供一粒新的随机种子。函数 srand()(来自stdlib.h)可以为随机数生成器播散种子。只要种子不同rand()函数就会产生不同的随机数序列。srand()称为随机数生成器的初始化器。
3、随机种子(Random Seed)是计算机专业术语,一种以随机数作为对象的以真随机数(种子)为初始条件的随机数。一般计算机的随机数都是伪随机数,以一个真随机数(种子)作为初始条件,然后用一定的算法不停迭代产生随机数。
参考资料来源:百度百科-随机函数
参考资料来源:百度百科-RAND_MAX
VC环境下要比TC麻烦一些
格式如下:
#include "time.h"
#include "stdlib.h"
#include "stdio.h"
void main()
{
double x;
srand((unsigned)time(0)); //根据时间来产生随机数种子
x=(double)rand()/RAND_MAX*49+1.0;//(double)rand()/RAND_MAX产生0到1之间的随机数,乘以49,加上1.0就是1到50的随机数。
printf("%lf",x);
}
"无限不循环小数"的标准是啥?计算机和手工书写都是有确定长度的,不可能是无限的;“无限”在数学上只是一种对趋势的推理,而用一个称号来表示这种推理和趋势。用C产生的伪随机数可以做到“无限不循环”,但显示出来肯定就有限制而被截断了。一个被截断了的数字,谁又能肯定它一定是“无限不循环”的呢?
可以写一个函数,利用math.h中的rand来产生随机浮点数。
#include stdlib.h
#include stdio.h
#include math.h
// 精度0.001的随机浮点数
float randf()
{
return (float)(rand() % 1001) * 0.001f;
}
main()
{
int i;
for (i=0; i100; ++i) printf("%.3f\n", randf());
system("pause");
}
VC里rand()的范围是从0到某个内部指定的极大数,但是以前似乎有些书上说用rand得到的可能是负数。如果有出现负数的话,对rand得到的数取绝对值就可以了。