0.代码与结果展示
可以产生1-100的特定数
详解看第四点。
int main()
{
srand((unsigned int)time(NULL));
for (int i = 0; i < 3; i++)
{
int x;
x = rand() % 100 + 1;
printf("%d\n", x);
}
return 0;
}
1.rand()函数介绍
先看一个例子:
int main()
{
for (int i = 0; i < 3; i++)
{
int x;
x = rand();
printf("%d\n", x);
}
return 0;
}
这是它的结果。初一看似乎真的产生了随机数。但是我们再运行一次看看
结果依然是这个。不信你可以去自己试试。
这是rand()函数的特点。
那怎么解决这个问题呢?C语言对rand()函数使用里面有一句话。
The rand function returns a pseudorandom integer in the range 0 to RAND_MAX. Use the srand function to seed the pseudorandom-number generator before calling rand.
简单来说在使用rand函数前要先用srand来设置一个随机数起点。
2.srand()与rand()搭配
这是srand的文档。srand的参数是一个无符号整型。我们实验一下在rand前面加上srand。
int main()
{
for (int i = 0; i < 3; i++)
{
srand(2);
int x;
x = rand();
printf("%d\n", x);
}
return 0;
}
由于起点是个不变的数,所以rand产生的数也是不变的。那我们可以使用time函数来使srand的起点可以变化
3.time()作为srand的参数如何使用
这样可以产生随机数了吗?
int main()
{
for (int i = 0; i < 3; i++)
{
srand((unsigned int)time(NULL));
int x;
x = rand();
printf("%d\n", x);
}
return 0;
}
答案是不行的。
这里要记住,很重要。起点只用设置一次就可以了,因此我们要把srand函数放在程序最开头的位置才可以。
int main()
{
srand((unsigned int)time(NULL));
for (int i = 0; i < 3; i++)
{
int x;
x = rand();
printf("%d\n", x);
}
return 0;
}
结果变成随机的了
4.怎么用rand函数生成特定范围的随机数
这里有一个公式。
假设你想要0-X的任意随机数,模上X+1就可以了。理由是模数不可能大于除数。
假设你想要1-X的任意数,模上X然后加1就可以了。理由是模X可以产生0-X-1的数字,加上1就是1-X的任意数了。
下面这段代码产生范围是多少的随机数呢?
int main()
{
srand((unsigned int)time(NULL));
for (int i = 0; i < 3; i++)
{
int x;
x = rand() % 100 + 1;
printf("%d\n", x);
}
return 0;
}
答案:1-100.