admin管理员组文章数量:1794759
C语言如何设置随机数
步骤
1.在刚开始学习C语言的时候,必然会遇到一类问题“随机值问题”。当然也必然会有一些自认为学的不错的人告诉你:只要引用函数rand()就可以得到随机值。但这种直接引用rand()函数得到的随机值其实它并不随机!!!举个例子:
#include<stdio.h> #include<stdlib.h> int main() { int i = 0; do { printf("输入1则继续下去:"); scanf("%d", &i); printf("%d\\n", rand()); } while (i); }重复执行上面这个代码,你将会发现你每一次执行所得的随机值都是一摸一样的,如上图所示。
2.如此看来直接调用rand()函数得到的可不是绝对的随机值呀!!!所以你就必须得好好研究研究rand()这个库函数了(推荐你一个官方的库函数查看软件MSDN,该软件会详细的解释每一个库函数)。 这就是官方的说明,意思是:rand()函数会返回一个0~RAND_MAX范围内的一个随机数(如果你把RAND_MAX转到定义,你会他就是我们之前所说的数值32767),在调用rand()函数前先得使用srand()函数设置一个随机的起点。所以我们按次改进一下程序:
#include<stdio.h> #include<stdlib.h> int main() { int i = 0; do { srand(xxx); printf("输入1则继续下去:"); scanf("%d", &i); printf("%d\\n", rand()); } while (i); }但还是出了问题,并没有达到我们预期产生随机数,如上图所示。
3.我们发现只有当srand(xxx)中的xxx不一样的时候rand()输出的值才也才会不同,也就是说只有当xxx为随机值的时候,rand()才会输出随机值。可这不就又绕回“ 该怎么产生随机值的问题了呀,难道我们无中生有吗?”。 有时候我认为换一种思路或许会有意想不到的收获。就譬如:"时间"是不是永远处于变化的状态,从某种意义上来说相当于就是一个随机值了呀!!!那把时间带入srand()中不就可以让rand()产生随机值了嘛。 那该怎么获取这流动的时间值呢? 下面就要介绍一个库函数了:longlong time(NULL),该函数返回的是一个时间戳(即:当前计算机时间减去计算机起始时间 (1970.1.1.0:0:0) 所得的时间换算成秒后,得到的那个值就是时间戳了)。接下来就是把时间戳放入srand()中了,但还要提一嘴,为了使类型可以匹配还是需要把time函数的返回值强制类型转换成(unsigned int),srand((unsigned int)time(NULL))。程序如下:
#include<stdio.h> #include<stdlib.h> #include<time.h> int main() { int i = 0; do { srand((unsigned int)time(NULL)); printf("输入1则继续下去:"); scanf("%d", &i); printf("%d\\n", rand()); } while (i); }看着上图这调试结果,达是达到随机值的目的了,可好像随机浮动的范围有些令人咋舌啊。
4.所以代码肯定还是存在问题的,经过无数次的尝试你终会发现,程序每次调用rand()生成随机数前都会先调用srand()来设置随机起点。可其实并不需要设置这么多次随机起点,整个工程也只需设置一次即可,所以我们应该把代码srand((unsigned int)time(NULL))放到循环外。代码如下
#include<stdio.h> #include<stdlib.h> #include<time.h> int main() { int i = 0; srand((unsigned int)time(NULL)); do { printf("输入1则继续下去:"); scanf("%d", &i); printf("%d\\n", rand()); } while (i); }5.上面成功生成随机数了,可若还想进一步使得随机数的范围控制在1~100之间,其实也不难rand()%100+1;这样就成了。代码如下:
#include<stdio.h> #include<stdlib.h> #include<time.h> int main() { int i = 0; srand((unsigned int)time(NULL)); do { printf("输入1则继续下去:"); scanf("%d", &i); printf("%d\\n", rand() % 100 + 1); } while (i); }讲到这该如何创建随机数,我想你应该已经有很深的见解了吧!!!
这份博客👍如果对你有帮助,给博主一个免费的点赞以示鼓励欢迎各位🔎点赞👍评论收藏⭐️,谢谢!!! 如果有什么疑问或不同的见解,欢迎评论区留言欧👀。
版权声明:本文标题:C语言如何设置随机数 内容由林淑君副主任自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.xiehuijuan.com/baike/1686625865a87865.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论