1.rand()函数
描述:C 库函数 int rand(void) 返回一个范围在 0 到 RAND_MAX 之间的伪随机数。RAND_MAX 是一个常量,它的默认值在不同的实现中会有所不同,但是值至少是 32767。
rand()函数是存在于<stdlib.h>库函数中,在使用前一定记得将其包含进去。rand()函数是生成一个随机数的函数,实际上,rand () 函数产生的随机数是伪随机数,是根据一个数值按照某个公式推算出来的,这个数值我们称之为“种子”。 种子和随机数之间的关系是一种正态分布,种子在每次启动计算机时是随机的,但是一旦计算机启动以后它就不再变化了;所以根据公式推算出来的结果(也就是生成的随机数)就是固定的。
可以看到,每次编译运行的的随机数都相同,因为电脑启动以后,种子就已经生成,不会再更新,想要更新种子,就可以使用srand()函数产生随机种子。
2.srand()函数
描述:C 库函数 void srand(unsigned int seed) 播种由函数 rand 使用的随机数发生器,不返回任何值。
参数:seed -- 这是一个整型值,用于伪随机数生成算法播种。
简单来说里面的参数不一样,得到的种子就不一样。那只要将里面的参数给成一个随机的值,就可以保证种子的随机性了,之后的rand()函数的也会因为种子的改变而产生随机数。那srand()中就可以给time(NULL),这个函数返回的值是每次程序运行的时间,也就是一个随机值,time()函数包含在<time.h>头文件中,那么这样就可以实现得到一个随机值的功能了。
下面是一个简单的应用(和电脑玩石头剪刀布):
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{ //0=拳头,1=剪刀,2=布
int p_select,u_select;//定义了代表pc和user的变量
srand(time(NULL));
p_select = rand() % 3;//对随即数取余,可以得到0,1,2随机的一个值
printf("请输入一个数字(0=拳头,1=剪刀,2=布)\n");
scanf("%d",&u_select);
if(p_select == 0){
if(u_select == 0){
printf("平局\n");
}else if(u_select == 1){
printf("pc赢\n");
}else{
printf("user赢\n");
}
}
if(p_select == 1){
if(u_select == 0){
printf("user赢\n");
}else if(u_select == 1){
printf("平局\n");
}else{
printf("pc赢\n");
}
}
if(p_select == 2){
if(u_select == 0){
printf("pc赢\n");
}else if(u_select == 1){
printf("user赢\n");
}else{
printf("平局\n");
}
}
return 0;
}
运行结果: