c语言随机数的产生,c语言生成指定范围的随机数
刚找这个资料,看到一个不错的,就把全文翻了一遍。后来找不到了。
在C语言中,通过rand函数可以得到一个“伪随机数”。该数字是一个大于或等于0且小于或等于RAND_MAX的整数。rand函数和常量RAND_MAX在库stdlib.h中定义,这意味着库stdlib.h必须包含在头文件中才能使用RAND函数和常量RAND_MAX。
rand函数被声明为:
整数(无效)
//代码示例开始
#包括
#包括
int main()
{
printf(%d %d\n ,rand(),rand());
}
//代码示例结束
编译上面的代码,屏幕上会显示两个随机数。但是运行这个程序很多次后,你会发现每次程序启动后产生的两个随机数是一样的!可见rand()产生的值不是随机的。
标准库(stdlib)中随机数的一种可能实现如下:
//代码示例开始
#定义RAND_MAX0x7fff
无符号长整型next=1;
整数(无效)
{
下一个=下一个* 1103515245 12345;
return(unsigned int)(next/65536)% RAND _ MAX;
}
/*srand函数:设置rand函数的种子数量*/
void srand(无符号整型种子)
{
next=种子;
}
//代码示例结束
从上面可以看出,只要我们在程序运行之初用srand设置不同的nex值,程序每次运行都会得到不同的或者随机的序列。你如何把不同的数字传递给srand?随机数?好了,现在是下蛋和下鸡的问题了。其实没那么复杂。我们只需要将当前时间作为srand的参数传入即可。程序每次运行,时间点肯定不一样。
要获得当前时间,可以使用时间库中的时间函数。例子如下:
//代码示例开始
#包括
#包括
#包括
int main()
{
srand((int)time(0));
printf(%d %d\n ,rand(),rand());
}
//代码示例结束
通过编译上面的代码,程序每次运行都能得到不同的随机值。
程序中time(0)函数的返回值类型为time_t(time_t定义为长整数),time(0)返回从1970年1月1日到现在经过的时间,单位为秒。
好了,到目前为止,我们已经解决了如何在区间[0,RAND_MAX]内以等概率随机获取一个整数的问题。那么,如何等概率随机获取任意范围内的整数呢?其实我们只需要对rand()函数产生的随机数取模即可。请参考以下代码:
int a=rand()% 100;
int b=rand()% 20 5;
执行上述代码后(当然之前要调用srand函数),得到的整数A是在[0,100]范围内的均匀随机整数;并且得到的整数B是区间[5,25]内的均匀随机整数。
但接下来我们不禁要问:如何生成随机浮点数?其实很简单。如果用rand()生成的数除以RAND_MAX,难道不能得到0到1之间的浮点数吗?而要得到区间[a,b]的浮点数,用这个值来扩展不是很好吗?例如s=RAND()/RAND _ MAX;s=a(b-a)* s;这样我们就可以得到我们想要的随机数s。好了,如果我们想得到一个区间[3,5]之间的随机浮点数,那么就很简单了。代码如下:
//代码示例开始
#包括
#包括
#包括
int main()
{
float s;
srand((int)time(0));
s=RAND()/RAND _ MAX;
s=3(5-3)* s;
printf(%f\n ,s);
}
//代码示例结束
快跑,好的。为什么每个程序运行的结果都是3.0?程序逻辑没毛病吧?
在倒数第二行设置断点调试器,我们会发现第一次赋值s后,s的值为0.0。反复运行程序进行调试,s值为0.0。为什么s的值总是0.0?
原来在C语言中,如果/运算符两边都是整数,那么运算的结果也是整数,而且是向下取整的整数。也就是2/3得0,3/2得1。而且由于rand()得到的值总是小于RAND_MAX,所以表达式rand()/RAND_MAX只能得到整数0,在赋给s时强制转换为浮点数0.0。
为了让/运算符执行浮点运算,我们可以将/运算符的操作数转换为浮点数。比如:(float)rand()/rand _ max;这样,我们就能得到想要的结果。正确的例子如下:
//代码示例开始
#包括
#包括
#包括
int main()
{
float s;
srand((int)time(0));
s=(float)RAND()/RAND _ MAX;
s=3(5-3)* s;
printf(%f\n ,s);
}
//代码示例结束
【程序设计与开发】C语言中随机数rand使用注意事项
【程序设计与开发】C语言标签中随机数rand使用注意事项:【程序设计与开发】免责声明:引用请注明出处。http://blog.csdn.net/lg1259156776/描述:随机数在编程和开发中非常重要,在C语言中.
C语言中与随机数相关的问题
rand函数。srand函数。和宏RAND_MAX(32767)是C语言中用来生成随机数的,都是在stdlib中声明的。h . int rand(void);//生成一个随机数voidsrand.
Python中随机数的生成
要在Python中实现随机数的生成,我们需要使用random模块中的randint方法。具体实现方法如下:导入随机a=random.randint (1,20) # (1,20)为.
Cplusplus中随机数的生成
1.随机数由生成器和分配器组合生成。生成器:可以生成离散的等可能分布。分布:它可以将generator生成的均匀分布值映射到其他常见的分布,比如均匀分布u。
用C语言产生随机数randlparrpar功能
参考:C语言生成随机数1:如果只需要生成随机数,不需要设置范围,可以只使用rand (): rand()会返回一个随机数,范围从0到RAND_MAX。RAND_MAX在stdl中定义。
如何在C语言中生成随机数
今天看到一个用随机数的小程序。刚发现C语言生成随机数没有matlab那么简单。C中也有rand()函数,但rand()函数生成的数不是真随机数,而是伪随机数,而且是基于一个数的。
js中的Mathperiodrandomlparrpar生成一个具有指定值范围的随机数。
http://www.111cn.net/wy/js-ajax/57062.htms数学。Random()方法大家都知道,它是用来生成随机数的。但是,《通用参考手册》并没有说明如何使用这种方法。
C语言中0-1随机数输出的实现
原文:用C语言实现0-1的随机数输出。今天晚上同学问了我一个很简单的问题,问我如何用C语言输出0-1的随机数。更别说,我一时半会想不起来。在写的过程中,我发现直接调用random函数是无法实现的。
如何用C语言写一个简单便携的随机数生成器?
在C语言中,标准库中随机数生成函数的返回可能不是最优的,因为有些随机数生成器的低位不是随机的,而其他返回随机数的函数实现太复杂。所以rand()%N不是一个好方法,牛人给出的建议是用:ra.
随机推荐
Linux安装(使用Centos6period3)
1.什么是虚拟机?虚拟机是指由软件模拟的、具有完整硬件系统功能的完整计算机系统。它运行在完全隔离的环境中。2.安装Linux虚拟机之前要做的准备工作。2.1:windows环境下的PC。2.2:下载虚拟机.
后缀POJ 3974回文ampsemiampsemi乌拉尔1297回文
寻找给定字符串的最长回文子串的分析:做法是将原字符串倒置后构造一个新的字符串为原字符串(这样就方便找到两边回文后缀的最长前缀),即newS=S $ revS,枚举回文。
Cplusplus引物冒号;冒号;第十四章冒号;重载运算符匹配类型转换运算符和类型转换的重载。
类型转换运算符class smallint { public:smallint(int I=0):val(I){ if(i0 i255)throw ST.
Git ~添加远程仓库~ git
现在,当您在本地创建了一个Git存储库之后,您希望在Github中创建一个Git存储库,并远程同步这两个存储库,这样Github上的存储库可以作为备份,其他存储库可以通过该存储库。
Java遇到错误
1.找不到java.io.file异常:/storage/emulated/0/XXX . txt:open failed:EIS dir(isa目录)This.
导入更大的wordpress xml文件
最大大小由两个PHP设置控制:upload_max_filesize和post_max_size。这些ar.
Css选项卡
据说css标签有两个实现:1 .目标css3 2。描点2的核心原理是用描点来显示问题(描点父溢出)。
Gitlab自动触发Jenkins构建打包。
1.目的在部门的测试环境中,一旦开发者向gitlab仓库提交成功的代码,gitlab就会自动触发jenkins构建项目。当然,在构建之后,您还可以添加用于项目部署或自动化测试的脚本。这只是针对测试环境。2.
HDU 3507打印文章
题目:http://acm.hdu.edu.cn/showproblem.php? Pid=3507问题解答:斜率优化DP是入门题,我就不给出解答了。网上有很多解释。这里只是一个小问题(.
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。