本文主要介绍C语言随机数生成教程(rand和srand用法),通过示例代码介绍的非常详细,对大家的学习或工作有一定的参考价值。有需要的朋友下面跟边肖学习。
在实际编程中,我们经常需要生成随机数。例如,在贪吃蛇游戏中,食物出现在随机位置,而在扑克游戏中,纸牌是随机分发的。
在C语言中,我们一般使用stdlib.h头文件中的rand()函数来生成随机数。它的用法是:
int rand(void);
Void表示不需要传递任何参数。
C中还有一个random()函数可以获取随机数,但random()不是标准函数,在VC/VS等编译器中无法传递,所以很少使用。
Rand()将随机生成一个介于0和rand _ max之间的整数。
RAND_MAX是stdlib.h头文件中的一个宏,用来表示RAND()可以返回的最大随机数。C语言标准没有规定RAND_MAX的具体值,只说它的值至少是32767。在实际编程中,我们不需要知道RAND_MAX的具体值,可以把它当作一个大数字来处理。
以下是随机数生成的一个示例:
#包含stdio.h
#包含stdlib.h
int main(){
int a=rand();
printf('%d\n ',a);
返回0;
}
操作结果示例:
193
随机数的本质
多次运行上面的代码,你会发现每次生成的随机数都是一样的。这是怎么回事?为什么随机数不是随机的?
实际上rand()函数产生的随机数是伪随机的,是根据一个数值按照一定的公式计算出来的,我们称之为“种子”。并且种子随机数和种子随机数的关系是正态分布,如下图所示:
C语言随机数和种子之间是正态分布。
每次电脑启动时种子都是随机的,但电脑一启动就不变了。也就是说,每次启动计算机,种子是固定的,所以根据公式计算出来的结果(也就是生成的随机数)是固定的。
追播
我们可以通过srand()函数重新“播种”,这样种子就会发生变化。srand()的用法是:
void srand(无符号int seed);
它需要一个无符号int类型的参数。在实际开发中,我们可以用时间作为参数。只要每次播种时间不一样,生成的种子就不一样,最终的随机数也不一样。
使用time.h头文件中的time()函数获取当前时间(精确到秒),如下所示:
srand((无符号)时间(空));
感兴趣的读者请猛戳这里自行学习time()函数的用法。本节不做过多解释。
在生成随机数之前,修改上面的代码以植入随机数:
#包含stdio.h
#包含stdlib.h
#包含时间. h
int main() {
int a;
srand((无符号)时间(空));
a=rand();
printf('%d\n ',a);
返回0;
}
多次运行程序,你会发现每次生成的随机数都不一样。但是,这些随机数往往是逐渐增加或减少的,因为我们以时间为种子,时间是逐渐增加的。结合上面的正态分布图,很容易推断出随机数也会逐渐增加或减少。
生成一定范围内的随机数。
在实际开发中,我们经常需要一定范围内的随机数,过大或过小都不符合要求。那么,如何产生一定范围内的随机数呢?我们可以采用取模块的方法:
int a=rand()% 10;//生成一个从0到9的随机数。注意,10是可以除尽的。
要指定上限和下限:
int a=rand()% 51 13;//生成一个13到63之间的随机数
解析:取模就是取余数。rand()Q 13可以看做两部分:rand()Q是生成0~50的随机数,后13位保证A最小只能是13,最大只能是50 ^ 13=63。
最后给出了产生13~63范围内随机数的完整代码:
#包含stdio.h
#包含stdlib.h
#包含时间. h
int main(){
int a;
srand((无符号)时间(空));
a=rand()% 51 13;
printf('%d\n ',a);
返回0;
}
生成连续随机数
有时候我们需要一组随机数(多个随机数)。我们如何创造它们?一个容易想到的解决方案是使用循环并对每个循环重新播种。请看下面的代码:
#包含stdio.h
#包含stdlib.h
#包含时间. h
int main() {
int a,I;
//使用for循环生成10个随机数
for(I=0;i 10i ) {
srand((无符号)时间(空));
a=rand();
printf('%d ',a);
}
返回0;
}
操作结果示例:
8 8 8 8 8 8 8 8 8 8
结果很奇怪。我们每个周期都重新播种。为什么生成的随机数都一样?
这是因为,for循环运行速度很快,一秒钟就运行完了,而time()函数得到的时间只能精确到秒,所以每次循环得到的时间是一样的,所以种子是一样的,随机数也是一样的。
那么,如何解决呢?没有办法连续生成随机数吗?当然,我们会在《C语言连续生成多个随机数》节给出巧妙的解决方案。
这就是这篇关于C语言随机数生成教程的文章(rand和srand的用法)。关于C语言中随机数生成的更多信息,请搜索我们以前的文章或继续浏览下面的相关文章。希望大家以后能多多支持我们!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。