c语言入门:[23]随机数
随机数我们在编程中还是比较常用的,比如随机生成验证码、随机彩票号码等。只是要想无任何规律地产生出一些数字,做到真正意义上的随机实在是太难了,既然是由我们程序代码产生的数那肯定是有一些规则的,所以称为伪随机。
现在我们就以一个规则来产生一系列0~9的数,请看下面的代码:
int main()
{
int a,b,i;
a=1;
for(i=1;i<=100;i++)
{
a=a*214013+2531011;
b=a%10;
printf("%d ",b);
}
printf("\n");
}
你运行一下上面的代码,是不是产生了100个0~9的数,而这些数字看起来是随机的。下面对代码做下解释:
变量a的值的改变是关键,a初始值是1,每循环一次执行一次a=a*214013+2531011;执行一次a的值就会变化,当然如果a*214013+2531011的运算结果超过了整数能够表示的数的范围话,其运算结果就不准确了也有可能结果是一个负的整数,但这并不影响我们改变a的值得目的。这里我们想产生0~9之间的数那我们就用变化后的a的值跟10取余数,就是代码中的b=a%10。运行一下看到下图所示结果。
既然回了time函数那就把我们之前的代码略做修改下吧
#include "time.h"
int main()
{
int a,b,i;
a=time(0);
for(i=1;i<=100;i++)
{
a=a*214013+2531011;
b=a%10;
printf("%d ",b);
}
printf("\n");
}
怎么样,每次运行结果都不一样了吧。
当然有现成的函数来完成随机数功能,原理跟上面的代码查不多。请看下面的代码
#include <time.h>
#include<stdlib.h>
int main()
{
int b,i;
srand(time(0));
for(i=1;i<=100;i++)
{
b=rand()%10;
printf("%d ",b);
}
printf("\n");
}
其中的srand(time(0)); 是初始化随机种子。
rand()负责产生一个随机整数
说白了就是srand函数负责初始化一个变量,rand函数负责用一个运算规则改变这个变量的值。
你可以认为我们之前的代码中的a就是这个变量,srand函数相当于a=time(0);的作用rand函数相当于a=a*214013+2531011;的作用,只是其中的运算规则可能跟我写的不一样罢了。
当然srand函数和rand函数共同操作了一个变量,我们管这样的变量叫全局变量下节介绍吧。
另外我留2个练习
1、产生10个100~200之间的随机数你会不会
2、随机产生一注双色球号码
感兴趣的可以把代码发在评论里