rand()函数包含于头文件stdlib.h中;
产生的随机数范围是[0,32767]闭区间;
对rand()操作产生特定随机数,rand()%100(0--99);
rand()/(RAND_MAX-0.0)产生0--1之内的浮点型数据;
2.随机数种子
一般应用都倾向于使用系统时间,所以一般初始化是这样的:
srand((unsigned)time(NULL));
这样一来就要包含time.h文件,也有包含windows.h然后调用windows的API来做初始化种子的,有兴趣可以去google之。
初始化随机数种子只需要在调用rand()前执行一次就好了,一种常见错误就是在每次调用rand()前都调用srand()。
3.随机数的范围
rand()返回一个0~RAND_MAX的随机数,一般这个不是你想得到的数据范围,需要进行调整,比较常用的是'%'和'/'操作,如果需要一个0~100的随机数那么就rand()%100好了,很容易理解。如果你需要一个浮点数,可以考虑用除法,注意运算时的数据转换操作,rand()返回的是整数,RAND_MAX也是整数,如果你想得到一个0到1的浮点数,你这样写rand()/RAND_MAX你就大错特错了,这样的结果是0,原因仔细想想也很简答,基本的C语言运算数据类型提升问题,小数部分的尾巴取整的时候舍掉了,解决方法也很简单rand()/(RAND_MAX-0.0),一个产生指定范围随机数的函数大概是这样的:
double randval(double low, double high)
{
double val;
val = ((double)(rand()/(RAND_MAX-0.0))*(high - low)) + low;
return(val);
}
---------------------------------------------
#include <stdio.h>#include <stdlib.h>
#include <time.h> //需有以上三个头文件
#define RAND_MAX 32767.00
double randa(double low,double high)
{
double randnum;
randnum=rand()/RAND_MAX*(high-low)+low;
return randnum;
} //自定义函数,输入范围,输出随机数
main()
{
double num,num1,num2;
scanf("%lf%lf",&num1,&num2);
num=randa(num1,num2);
printf("%lf\n",num);
}
---------------------------------------------------------------------------
#include <stdio.h>
#include <stdlib.h>
main()
{
int n,m;
for(n=1;n<=100;n++)
{
m=rand();
printf("%d ",m);
}
}
产生100个随机数,没有#include<time.h>和srand((unsigned int)time(NULL));
产生的是随机数一次性,两次运行程序结果是一样的。要想不一样添加srand((unsigned int)time(NULL));srand((int)time(0));
rand()函数是按指定的顺序来产生整数,因此每次执行上面的语句都打印相同的两个值,所以说C语言的随即并不是正真意义上的随机。
为了程序在每次执行时都能生成一个新序列的随机值,我们通常通过为随机数生成器提供一粒新的随机种子。
函数srand()(来自stdlib.h)可以为随机数生成器播散种子。只要种子不同rand()函数就会产生不同的随机数序列。srand()称为随机数生成器的初始化器。
本文详细介绍了C语言中rand()函数的使用方法,包括随机数种子的初始化、随机数范围的调整以及如何生成指定范围内的随机数。并通过自定义函数展示了如何将随机数应用于实际场景。

2810

被折叠的 条评论
为什么被折叠?



