打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
【C语言笔记】关于随机数的总结

C语言的库头文件stdlib.h中有个生成随机数的函数:

int rand(void);

该函数返回0~RAND_MAX之间的随机数,在stdlib.h中可知道,RAND_MAX为0x7FFF,如:

但这里生成的随机数为伪随机数。所谓的伪随机数简单来说就是每次运行程序产生的随机数都是一样的。
示例程序:
#include <stdio.h>
#include <stdlib.h>

int main(void)
{
 printf("%d\n",rand());
 return 0;
}

程序运行结果为:


程序连续运行三次,产生的由rand()函数产生的随机数都是一样的,这就是伪随机数。

那么如何才能产生真正的随机数呢?其实头文件stdlib.h里还有另一个函数:
void srand(unsigned int seed);

这个函数的作用是产生随机数种子,rand()函数会根据seed的值来产生随机数,若在这调用rand()函数之前没有调用srand进行播种,则seed的值就没变,则产生的随机数就是伪随机数。所以,只要种子seed的值改变,那么调用rand()函数产生的随机数就是真正的随机数。

示例程序:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main(void)
{
 srand(1);    
 printf("%d\n",rand());
 srand(2);
 printf("%d\n",rand());
 srand(3);
 printf("%d\n",rand());
 return 0;
}

程序运行结果为:


可见,种子seed不一样,生成的随机数就不一样,即真实的随机数

把seed的值改为相同的,则产生的随机数就是伪随机数.
示例程序:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main(void)
{
 srand(520);
 printf("%d\n",rand());
 srand(520);
 printf("%d\n",rand());
 srand(520);
 printf("%d\n",rand());
 return 0;
}

程序运行结果:


种子seed不变,产生的随机数就是一样的,即伪随机数

那么,怎么才能较方便地设置随机数的种子呢?可以使用time()函数的返回值作为随机数种子,time()函数返回的是1970年1月1日至现在的秒数,每一时刻都是不一样的,即每一时刻seed的值都不一样。关于time()函数的详细说明可看小编的上一篇文章哦。传送门:【C语言笔记】时间日期函数

接下来编写一个程序用于产生10个10以内的随机数,示例程序:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main(void)
{
 int loop;
 srand((unsigned)time(NULL));
 for (loop = 0; loop < 10; loop++)
 {
   printf("%d\n",rand()%10);
 }
 
 return 0;
}

程序运行结果为:


除此之外,若要生成a~b之间的数字,可以使用rand()%(b-a+1)+a

以上就是关于随机数的总结,要注意srand()函数应与rand()成对使用,并且在调用rand()函数之前应先调用srand()进行播种,每次播的随机种子应该是不一样的,否则产生的随机数就是伪随机数。可用time()函数的返回值作为随机种子,这是典型做法。



常用关键字列表

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
rand和srand产生随机数
C语言/C++中怎样产生随机数
[049]?仿骰子程序-随机数的产生 -- 一步一脚印 -- 编程爱好者博客
随机数产生srand和rand 的使用
C++ rand,srand用法
用c语言产生随机数 - meizhe143的日志 - 网易博客
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服