C语言怎么生成随机数?

在学习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;
}

大家可以上机运行观察,每次得到的数字就不同了,请大家亲自上机实验。






本文固定URL:https://www.dotcpp.com/qa/4

上一页:什么是原码? 下一页:什么是补码?