C++随机取值,范围是30~70,怎样实现?
发布网友
发布时间:2023-09-17 08:46
我来回答
共4个回答
热心网友
时间:2024-11-19 21:44
代码如下:
int iR = 0;
srand( (unsigned)time( NULL ) );
iR = 30+rand()%40;
以上代码将随机产生30到70之间的正整数(包括30,不包括70)
如果将第二句改为
iR = 30+rand()%41
则将同时包括30和70。
---------------
针对不同编程语言,rand函数返回值范围不同。SQL中为0到1间的纯小数,C++中则为正整型范围(0到32767),微软平台的C++运行库定义了一个常量RAND_MAX为rand()函数返回值的上限(即32767)。
由于随机算法的局限性,rand()每次返回的值是固定不变的(即所谓伪随机数)。要使它真正具有随机性,一般的做法是在rand()之前使用srand()产生一个随机种子,可以形象的认为rand()需要一个基数来产生随机数,而该基数就是这个由srand()指定的种子。srand()需要一个参数来产生该种子,因此当该参数在程序运行过程中不断变化时,使用rand()产生的随机数就可以认为是比较客观的了。
实际编码过程中,我们一般使用系统当前时间作为srand()的参数来产生种子,再由rand()根据这个种子去生成随机数。
------------
一个使用随机函数发扑克牌的小例子:
http://hi.baidu.com/crazycola/blog/item/52402bd4b3f68705a08bb746.html
------------
附上MSDN原文
int rand( void ); Return Value
rand returns a pseudorandom number, as described above. There is no error return.
Remarks
The rand function returns a pseudorandom integer in the range 0 to RAND_MAX (32767). Use the srand function to seed the pseudorandom-number generator before calling rand.
Requirements
Routine Required header Compatibility
rand
<stdlib.h>
ANSI, Windows 95, Windows 98, Windows 98 Second Edition, Windows Millennium Edition, Windows NT 4.0, Windows 2000, Windows XP Home Edition, Windows XP Professional, Windows Server 2003
For additional compatibility information, see Compatibility in the Introction.
参考资料:MSDN
热心网友
时间:2024-11-19 21:44
int val = rand() % 40 + 30;
这样你就能得到 30 ~ 70 之间的随机数,只是一个数学上的平移问题。
关于 rand() 函数的使用,请查阅 C/C++ 手册。
给你推荐一个网站吧:http://www.cppreference.com/wiki/
这个网站有 C/C++ 所有函数的参考和说明。
热心网友
时间:2024-11-19 21:45
rand()产生的是伪随即数。
srand()书上说是为rand播种的。
如:
void main()
{
int n=1;
srand(n);
for(int i=0; i<50; i++)
cout<<rand()<<endl;
}
无论程序运行几遍,所得到的50个数每次都一样。
但如果你改一下srand()中的值,可以改变rand()产生的数。
如果想产生a到b之间的数,试试cout<<n=a+rand()%(b-a+1)<<endl;
热心网友
时间:2024-11-19 21:46
rand()%(30-70)?