一、函数srand
1.随机化种子
srand((unsigned int)time(NULL));
若不随机则生成的都为1 相同值
2.rand(time(NULL))
做产生随机数的种子;
3.产生随机数
x=(double)rand()/RAND_MAX;
rand()后若为/则是随机生成0~1之间的数
若为%则是生成0~RAND_MAX之间的数(RAND_MAX为最大值32767)
rand()前为产生的随机数的类型;
rand()%n+m;产生m到n之间的整数;
二、伪随机数函数rand();
1.rand() 每次产生的随机数都相同
#include<stdio.h>
#include<stdlib.h>
int main()
{
for(int i=0;i<6;i++)
{
printf("%d\n",rand());
}
}
三、random函数和randomize函数——产生随机数
1.randomize()用于初始化随机数发生器
2.random()每次产生不同的随机数;
3.在ANSI c++中没有包括randomize函数和random函数
#include<stdio.h>
#include<stdlib.h>
int main()
{
randomize();
for(int i=0;i<6;i++)
{
printf("%d\n",random(20));
}
}
四、例子:用srand()产生随机数。求π;
1.在0~1之间产生随机数x,y
2.设产生n次随机数,随机数产生在S’为m次
3.π=k=m/n;
//求π
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main()
{
int n,m=0;//m为正方形的面积
double x,y;
srand((unsigned int)time(NULL));//随机化种子 若不随机则生成的都为1 相同值
scanf("%d",&n);
srand(time(NULL)); //让time(NULL)做种子;
for(int i=0;i<n;i++)
{
x=(double)rand()/RAND_MAX;//rand()后为/则是随机生成0~1之间的数 若为%则是生成0~RAND_MAX之间的数(RAND_MAX为最大值32767)
y=(double)rand() / RAND_MAX;
if(x*x+y*y<=1)
m++;
}
printf("%d ",m);//在扇形内的值;
printf("%.4f",4.0*m/n);//π
return 0;
}
五、用srand()产生随机数。实现 洗牌和发牌;
-
洗牌——创建一个数组存放54个不重复的随机数;
-
发牌——创建两个字符数组存放花色和牌的点数,将数组中的数导到花色和牌的点数的字符数组(花色=随机数%4;牌点数=随机数%13)
//洗牌,发牌;
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define N 60
void xipai(int pai[N]);
void fapai(int pai[N]);
int main()
{
int pai[N];
srand((unsigned int)time(NULL));
xipai(pai);
fapai(pai);
return 0;
}
void xipai(int pai[N])//数组中:修改main函数传递到子函数的数组 也就修改了main函数
{
int j,i;
srand(time(NULL));
for( i=0;i<54;i++)
{
pai[i]=(int)rand()%54+1;//生成1~54的整数
if(i!=0)
j=i-1;
while(j--)//查找重复的牌数;
{
if(pai[i]==pai[j])
i--;
}
}
}
void fapai(int pai[N])
{
char hua[4][8] = {{"黑桃"},{"梅花"},{"红桃"},{"方块"}};//这里黑桃··· (一个汉字是两个字符,两个汉字是4个字符 另外还有“”也占字符位置)所以需要些二维数组 不然会超过申请的空间;
char dian[13][3] = {"A","2","3","4","5","6","7","8","9","10","J","Q","K"};
for(int i=1;i<=54;i++)
{
if(pai[i]==53)
{
printf("小王\n");
continue ;
}
if(pai[i]==54)
{
printf("大王\n");
continue ;//遇到大王时,跳过此次循环
}
printf("%s %s\n",hua[pai[i]%4],dian[pai[i]%13]);//牌点数除以13取余正好数 可以的到牌的点数 除以4取余正好可以在四种花色中选
}
}