一、随机数
标准C库中函数rand()可以生成0~RAND_MAX之间的一个随机数
其中RAND_MAX 是stdlib.h 中定义的一个整数,它与系统有关。(RAND_MAX的值为2147483647。)
rand()产生伪随机数,srand函数提供种子,种子不同产生的随机数序列也不同
所以通常先调用srand函数 time()返回的是系统的时间(从1970.1.1午夜算起)
单位:秒,种子不同当然产生的随机数相同几率就很小了。
(1)如果需要随机生成一个在一定范围的数,可以在宏定义中定义一个random(int number)函数,然后在main()里面直接调用random()函数.
#include<stdio.h>
#include<stdlib.h>
#define random(x) (rand()%x)//宏定义
void main()
{
for(int i=0;i<10;i++)
{
printf("%d/n",random(100));//随机生成10个0~100的数
}
}
//请注意该程序每次运行的结果都是一样的.
//这与随机数种子有关,因为没有设置随机数种子,每次随机数种子都自动设成相同值1 ,进而导致rand()所产生的随机数值都一样。
(2)srand()函数(可用来设置rand()产生随机数时的随机数种子)
定义 : void srand (unsigned int seed)
通常可以利用geypid()或time(NULL)的返回值来当做seed
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define random(x) (rand()%x)
void main()
{
srand((int)time(NULL));
for(int x=0;x<10;x++)
{
printf("%d/n",random(100));
}
}
(3)产生一定范围内的随机数的通用公式
取得[0,x)的随机整数:rand()%x;
取得[a,b)的随机整数:rand()%(b-a)+a;
取得[a,b]的随机整数:rand()%(b-a+1)+a;
取得(a,b]的随机整数:rand()%(b-a)+a+1;
取得0-1之间的浮点数:rand()/double(RAND_MAX)。
(4)C++产生随机数的示例
#include<iostream>
#include<cstdlib>
#include<ctime>//time()头文件
#define random(a,b) (rand()%(b-a+1)+a)//宏定义
using namespace std;
int main()
{
srand((unsigned)time(NULL));
for(int i=0;i<10;i++)
cout<<random(1,100)<<' ';
return 0;
}