C语言生成随机数-基础篇

话不多说先上程序。

1
2
3
4
5
6
7
8
9
//生成100以内的随机数
#include<stdio.h>
#include<stdlib.h>
int main(){
int a = 0;
a=rand()%100;
printf("a的值为%d\n",a);
return 0;
}

可以看出本程序有几行崭新没学过的内容。下面就来分别介绍一下它们。

头文件stdlib.h

本程序引用了头文件stdlib.h主要是rand函数所需。

函数rand()

函数原型: int rand(void);

函数功能: 产生0到32767间的随机整数(0到0x7fff之间)

函数返回: 随机整数

rand()是生成伪随机数的函数,它会按照一定的序列来生成随机数,但是它序列是固定的:

程序每次执行它都将按照这个序列来给出随机数,所以在对rand()不加限制条件的话,生成的随机数不够随机。

现在我们来解释一下这个程序

1
2
3
4
5
6
7
8
9
10
11
//生成100以内的随机数
#include<stdio.h>//引用头文件stdio.h
#include<stdlib.h>//引用头文件stdlib.h(为下方rand函数的调用提供前置条件)
int main(){
int a = 0;//定义变量a为整数int类型并初始化值为0
a=rand()%100;//给a赋值为100以内的随机数
//注:rand()会随机生成整数范围在0到32767间,在后面加上%所需范围即可限制生成范围
//此处%100即是将随机数生成范围控制在0到100之间,可根据自身需求更改。
printf("a的值为%d\n",a);//打印输出a的值
return 0;//返回结果0
}

C语言生成随机数-高级篇

上段说到rand函数每次生成随机数的序列是固定的,所以直接调用rand函数生成随机数是不严谨的,生成的也不是完全随机的数,所以我们需要给它定义一个在不停改变的起点,来使得序列不固定。

下面来看看升级版的随机数生成函数。

1
2
3
4
5
6
7
8
9
10
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main(){
int a = 0;
srand((int)time(NULL));
a=rand()%100;
printf("a的值为%d\n",a);
return 0;
}

可以看出我们又使用了一些没有见过的语句,下面我们再来分别介绍一下它们。

头文件time.h

本程序引用了头文件time.h主要是time函数所需。

函数time()

函数原型: time_t time(time_t *timer)

函数功能: 得到系统当前的日历时间

函数返回: 系统当前日历时间,如果不能获得当前日历时间,则返回-1

函数srand()

用于初始化随机种子,使得rand函数的序列随机。

现在我们来解释一下这个程序

1
2
3
4
5
6
7
8
9
10
11
12
13
//生成100以内的随机数
#include<stdio.h>//引用头文件stdio.h
#include<stdlib.h>//引用头文件stdlib.h(为下方rand函数的调用提供前置条件)
#include<time.h>//引用头文件time.h(为下方time函数的调用提供前置条件)
int main(){
int a = 0;//定义变量a为整数int类型并初始化值为0
srand((int)time(NULL));//根据当前系统时间初始化随机种子(使得rand函数的序列随机)
a=rand()%100;//给a赋值为100以内的随机数
//注:rand()会随机生成整数范围在0到32767间,在后面加上%所需范围即可限制生成范围
//此处%100即是将随机数生成范围控制在0到100之间,可根据自身需求更改。
printf("a的值为%d\n",a);//打印输出a的值
return 0;//返回结果0
}