在学习C语言过程中,有的时候我们需要随机生成一些数字,不按照我们人为的意识随机生成,就需要借助C语言的两个函数帮我们实现,就是rand和srand函数,使用这个两个函数需要首先包含头文件<stdlib.h>,下面给大家展示使用方法
首先是rand函数,它的作用就是生成一个0~RAND_MAX之间一个数字,RAND_MAX和EOF本质一样是一个宏定义,不同编译器定义的大小不一样,如有的编译器表示十六进制 0x7fff(对应十进制为32767),如下图:
rand函数的原型也很简单:int rand(void); 即不需要传参直接使用即可通过返回值的方式生成,我们可以简单敲出完整代码,如下:
#include <stdio.h> #include <stdlib.h> int main() { int a = rand(); printf("%d\n",a); return 0; }
大家可以自行上机运行试验,但是呢,不管打印出来的数字是多少,大家多运行几次就会发现,好像每次运行的出来的数值都一样!其实rand函数每次随机出来的数字其实与所谓的“种子”有关,rand函数生成随机数其实并非真正意义上的随机,即真正我们理解的像“用手随机抛硬币”的随机,这个函数当然是模拟随机的效果,是按照一定的“公式”实现出来的,这个“公式”中的变量即前面提到的种子,在前面的例子中,我们并没有用到“种子”,那么系统会自动给1,因此你会得到每次都是一样的随机值。所以要想改变这一问题,将需要用第二个函数srand来帮我们种种子,来达到每次不一样的效果。
srand的函数的原型为:void srand(unsigned seed); 即需要传入一个无符号整形的数值,比较聪明的做法呢就是传入系统时间,通过time函数(需要加time.h的头文件)获取时间然后传入,这样每次种子都不一样,因此rand得到的随机数也将不同,所以呢就有了这样的写法:
srand((unsigned)time(NULL));
因此,我们只要在用rand函数生成随机数之前,先执行srand函数即可,完整代码如下:
#include<stdio.h> #include<stdlib.h> #include<time.h> int main() { int r=0; int i=0; srand((unsigned)time(NULL)); while(i++<10) { printf("r = %d\n",rand()); } return 0; }
大家可以上机运行观察,每次得到的数字就不同了,请大家亲自上机实验。
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程