① 基本函数
在C语言中取随机数所需要的函数是:
int rand(void); void srand (unsigned int n);
rand()函数和srand()函数被声明在头文件stdlib.h中,所以要使用这两个函数必须包含该头文件:
#include stdlib.h
srand()函数使用自变量n作为种子,用来初始化随机数产生器.只要把相同的种子传入srand(),然后调用rand()时,就会产生相同的随机数序列.所以呢,我们可以把时间作为srand()函数的种子,就可以避免重复的发生.如果,调用rand()之前没有先调用srand(),就和事先调用srand(1)所产生的结果一样.
举个例子,假设我们要取得0~10之间的随机整数(不含10本身):
/* 例1:不指定种子的值 */
for (int i=0; i10; i++) { printf("%d ", rand()); }
srand(1); for (int i=0; i10; i++) { printf("%d ", rand()); }
该程序取得的随机值也是在[0,10)之间,与srand(1)所取得的值不同,但是每次运行程序的结果都相同.
该程序每次运行结果都不一样,因为每次启动程序的时间都不同.另外需要注意的是,使用time()函数前必须包含头文件time.h.
求一定范围内的随机数.
如要取[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) 其他情况,以此类推,这里不作详细说明.
第一段:首先包含必要的头文件
#includestdio.h
这个包含用于输入输出的函数.
#includestdlib.h
这个包含初始化随机数种子、产生随机数的函数.
#includetime.h
这个包含与时间有关的函数,初始化随机数种子时可以用到.
第二段:使用如下公式产生在区间[min,max]之间的随机数
int r=rand()%(max-min+1)+min;
第三段:一个例子,产生10个[1,100]的随机整数
#include stdio.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
产生0~10000000范围内的随机数:int num = rand()*rand()000000;
注:需要包含头文件stdlib.h
c语言中产生随机数的相关函数主要包括srand和rand函数,两者配合生成随机数据,测试代码如下,
void main()
int i=0,j=0;
p[i][j]=rand()0+1;//产生1-100的随机数存入数组p中
printf("二维数组p为:\n");
printf("%d\t",p[i][j]);
printf("\n");
一般srand和rand配合使用产生伪随机数序列.rand函数在产生随机数前,需要系统提供的生成伪随机数序列的种子,rand根据这个种子的值产生一系列随机数.如果系统提供的种子没有变化,每次调用rand函数生成的伪随机数序列都是一样的.srand(unsigned seed)通过参数seed改变系统提供的种子值,从而可以使得每次调用rand函数生成的伪随机数序列不同,从而实现真正意义上的"随机".通常可以利用系统时间来改变系统的种子值,即srand(time(NULL)),可以为rand函数提供不同的种子值,进而产生不同的随机数序列.
int?main()
int?a,i;
srand((unsigned)time(NULL));//初始化随机数
printf("%d\t",a);
return?0;
其实,除了random函数,还有一个rand函数,这个函数也是一个随机函数,他可以产生从0到rand_max的随机数.
大家可以把以上的代码编译运行一下,发现他的确产生随机数了,但是你会发现,每次运行程序产生的随机数都是一样的,如过
你在程序里加上for循环,每次产生的数不一样,但是,如果再运行这个程序,它产生的数故巧洗纬绦虿?慕峁?
那么如何写一个程序,让它每次运行时产生的随机数都不一样呢? 请看下面的例子:
int main(void)
int i;
time_t t;
srand((unsigned) time(t));
for(i=0; i10; i++)
printf("%d\\n", rand() % 100);
这时运行程序,会发现每次产生的随机数都不一样.
那么为什么第一个程序一样而第二个程序一样呢?
第二个程序用到了一个新的函数srand
这个函数是给随机数产生一个随机种子(seed),函数原型是srand( (unsigned)time( NULL ) );
time的值每时每刻都不同.所以种子不同,所以,产生的随机数也不同.
所以说,要想产生不同的随机数,在使用rand之前需要先调用srand
srand和rand函数都包含在stdlib.h的头文件里.
由于rand产生的随机数是从0到rand_max的,而rand_max是一个很大的数,那么如何产生从X~Y的数呢?
从X到Y,有Y-X+1个数,所以要产生从X到Y的数,只需要这样写:
k = rand() % (Y - X + 1) +X;
这样,就可以产生你想要的任何范围内的随机数了.