扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
要用srand()函数设置一个随机数种子
站在用户的角度思考问题,与客户深入沟通,找到和布克赛尔蒙古网站设计与和布克赛尔蒙古网站推广的解决方案,凭借多年的经验,让设计与互联网技术结合,创造个性化、用户体验好的作品,建站类型包括:网站设计、网站建设、企业官网、英文网站、手机端网站、网站推广、域名注册、雅安服务器托管、企业邮箱。业务覆盖和布克赛尔蒙古地区。
例1:
#include stdlib.h
#include iostream
#include time.h
using namespace std;
int main()
{
srand( (unsigned)time( NULL ) ); // 随机数种子产生
int i=rand()%100-1; // 产生100以内的随机数并赋给i
coutiendl;
getchar();
return 0;
}
例2:
#include stdio.h
#include stdlib.h
main()
{
int seed=1000; // 种子
int i;
int m[16] ;
int nn=0;
double r;
printf("enter seed please\n");
scanf("%d",seed);
srand(seed); // 初始化随机数生成器
for (i=0;i=15;i++) m[i] = 0;
while (nn 10 ){
// r 是双精度浮点随机数,范围0.0到1.0
r = ( (double)rand() / ((double)(RAND_MAX)+(double)(1)) );
i =(int) ( r * 15.0);
if (m[i] == 0) {
m[i] = 1; nn = nn + 1;
printf("%d ",i);
};
}
}
1. 基本函数
在C语言中取随机数所需要的函数是:
int rand(void); void srand (unsigned int n);
rand()函数和srand()函数被声明在头文件stdlib.h中,所以要使用这两个函数必须包含该头文件:
#include stdlib.h
2. 使用方法
rand()函数返回0到RAND_MAX之间的伪随机数(pseudorandom)。RAND_MAX常量被定义在stdlib.h头文件中。其值等于32767,或者更大。
srand()函数使用自变量n作为种子,用来初始化随机数产生器。只要把相同的种子传入srand(),然后调用rand()时,就会产生相同的随机数序列。因此,我们可以把时间作为srand()函数的种子,就可以避免重复的发生。如果,调用rand()之前没有先调用srand(),就和事先调用srand(1)所产生的结果一样。
举个例子,假设我们要取得0~10之间的随机整数(不含10本身):
/* 例1:不指定种子的值 */
for (int i=0; i10; i++) { printf("%d ", rand()%10); }
每次运行都将输出:1 7 4 0 9 4 8 8 2 4
/* 例2:指定种子的值为1 */
srand(1); for (int i=0; i10; i++) { printf("%d ", rand()%10); }
每次运行都将输出:1 7 4 0 9 4 8 8 2 4
例2的输出结果与例1是完全一样的。
/* 例3:指定种子的值为8 */ srand(8); for (int i=0; i10; i++) { printf("%d ", rand()%10); }
每次运行都将输出:4 0 1 3 5 3 7 7 1 5
该程序取得的随机值也是在[0,10)之间,与srand(1)所取得的值不同,但是每次运行程序的结果都相同。
/* 例4:指定种子值为现在的时间 */ srand((unsigned)time(NULL)); for (int i=0; i10; i++) { printf("%d ", rand()%10); }
该程序每次运行结果都不一样,因为每次启动程序的时间都不同。另外需要注意的是,使用time()函数前必须包含头文件time.h。
3. 注意事项
求一定范围内的随机数。
如要取[0,10)之间的随机整数,需将rand()的返回值与10求模。
randnumber = rand() % 10;
那么,如果取的值不是从0开始呢?你只需要记住一个通用的公式。
要取[a,b)之间的随机整数(包括a,但不包括b),使用:
(rand() % (b - a)) + a
伪随机浮点数。
要取得0~1之间的浮点数,可以用:
rand() / (double)(RAND_MAX)
如果想取更大范围的随机浮点数,比如0~100,可以采用如下方法:
rand() /((double)(RAND_MAX)/100) 其他情况,以此类推,这里不作详细说明。
srand( (unsigned)time( NULL ) );
这一句放在for的前面,如下:
#include stdlib.h
#include stdio.h
#include time.h
void main( void )
{
int i,k;
srand( (unsigned)time( NULL ) );
for( i = 0; i 5;i++ )
{
k=rand()%100+1;
printf( " k=%d\n", k );
}
}
srand(...)用来获取种子,
因为下面三句
srand( (unsigned)time( NULL ) );
k=rand()%100+1;
printf( " k=%d\n", k );
的运行时间很短,短到不到1/5秒,而你每次for循环中都取了相同的种子,导致输出相同的随机数.
一、首先包含必要的头文件
#includestdio.h
这个包含用于输入输出的函数。
#includestdlib.h
这个包含初始化随机数种子、产生随机数的函数。
#includetime.h
这个包含与时间有关的函数,初始化随机数种子时可以用到。
二、使用如下公式产生在区间[min,max]之间的随机数
int r=rand()%(max-min+1)+min;
三、一个例子,产生10个[1,100]的随机整数
#include stdio.h
#include stdlib.h
#include time.h
int main()
{
const int min=1,max=100;
int i,r;
//用当前时间初始化随机数种子
srand(time(NULL));
printf("随机产生的10个1-100的整数是:");
for(i=0;i10;i++)
{
r=rand()%(max-min+1)+min;
printf("%d,",r);
}
return 0;
}
四、运行结果的截图
截图1
截图2
首先一楼代码是可以的,只是num
=
rand()%10的10后漏了个0;
详细回答你的疑惑:
1、你要用的随机函数rand是包含在库文件stdib.h中,如果不引用#include当然出错!:
error
C2065:
'rand'
:
undeclared
identifier
2、rand是个伪随机函数,如果不用srand每一次运行程序产生的随机数一样的,
因此使用一个时间种子函数srand,它的参数是电脑的系统时间,该函数包含在库文件time.h中,这样由于每次运行程序的时间不同,种子不同,生成的随机数也不同,更接近真正的随机数。
希望能帮到你!
c语言随机数函数是 rand()
若要输出1~10之间的随机数,
可用rand()%10+1。
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流