欢迎来到天天文库
浏览记录
ID:40743206
大小:20.19 KB
页数:8页
时间:2019-08-07
《C和C++产生随机数》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、C/C++怎样产生随机数:这里要用到的是rand()函数,srand()函数,C语言/C++里没有自带的random(intnumber)函数。(1) 如果你只要产生随机数而不需要设定范围的话,你只要用rand()就可以了:rand()会返回一随机数值,范围在0至RAND_MAX间。RAND_MAX定义在stdlib.h,其值为2147483647。例如:#include#includevoidmain(){ for(inti=0;i<10;i+)
2、 printf("%d/n",rand());}(2) 如果你要随机生成一个在一定范围的数,你可以在宏定义中定义一个random(intnumber)函数,然后在main()里面直接调用random()函数:例如:随机生成10个0~100的数:#include#include#definerandom(x)(rand()%x)voidmain(){ for(intx=0;x<10;x++) printf("%d/n",random(100));} (3)但
3、是上面两个例子所生成的随机数都只能是一次性的,如果你第二次运行的时候输出结果仍和第一次一样。这与srand()函数有关。srand()用来设置rand()产生随机数时的随机数种子。在调用rand()函数产生随机数前,必须先利用srand()设好随机数种子(seed),如果未设随机数种子,rand()在调用时会自动设随机数种子为1。上面的两个例子就是因为没有设置随机数种子,每次随机数种子都自动设成相同值1,进而导致rand()所产生的随机数值都一样。srand()函数定义:voidsrand(unsignedintse
4、ed);通常可以利用geypid()或time(0)的返回值来当做seed如果你用time(0)的话,要加入头文件#include例如:#include#include#include#definerandom(x)(rand()%x)voidmain(){ srand((int)time(0)); for(intx=0;x<10;x++) printf("%d/n",random(100));}这样两次运行的结果就会
5、不一样了!! <二>标准C库中函数rand()可以生成0~RAND_MAX之间的一个随机数,其中RAND_MAX是stdlib.h中定义的一个整数,它与系统有关。rand()函数没有输入参数,直接通过表达式rand()来引用;例如可以用下面的语句来打印两个随机数:printf("Randomnumbersare:%i%i/n",rand(),rand());因为rand()函数是按指定的顺序来产生整数,因此每次执行上面的语句都打印相同的两个值,所以说C语言的随即并不是正真意义上的随机。为了时程序在每次执行时都能生成一
6、个新序列的随机值,我们通常通过为随机数生成器提供一粒新的随机种子。函数srand()(来自stdlib.h)可以为随机数生成器播散种子。只要种子不同rand()函数就会产生不同的随机数序列。srand()称为随机数生成器的初始化器。例程:文件名:rand_srand.c/*Thisprogramgeneratesandprintstenrandomintegersbetween1andRAND_MAX*/#include#includintmain(){ usigne
7、dintseed; /*申明初始化器的种子,注意时usignedint型的*/ intk; pringt("Enterapositiveintegerseedvalue:/n"); scanf("%u",&seed); srand(seed); printf("RandomNumbersare:/n"); for(k=1;k<=10;k++) printf("%i",rand()); printf("/n");
8、 return0;}你会发现,当你提供的种子相同时,随机数序列也时相同的。而且当种子为1时,与不使用srand()函数时一样的,也就是说rand()函数默认情况下初始化种子值为1;在stdlib.h中这两个函数的原型是:intrand();voidsrand(unsignedint);扩充: x=rand()%11;/*
此文档下载收益归作者所有