C程序设计--随机函数(rand())

版权声明:本文由 Micheal 超 博客 创作,转载请附带链接,有问题欢迎交流。 https://blog.csdn.net/qq_42887760/article/details/84801524

随机函数

1. 概念 ( 随机函数 r a n d ( ) rand() )

库函数中系统提供了两个函数用于产生随机数:srand()和rand()。

函数原型 含义
int rand(void); 返回一个[0,RAND_MAX]间的随机整数。
void srand(unsigned seed); 参数seed是srand()的种子,用来初始化srand()的起始值。
  • 一个最简单的随机函数代码:
#include<stdio.h>
#include <stdlib.h>
int main(){
	for(int i=0;i<5;i++){
		printf("%d\n",rand());//需要头文件stdlib.h
	}
	return 0;
}

运行结果:
在这里插入图片描述

2. 注意点(也是该函数使用时的难点)

  • “伪随机数”
  1. 问题引出:

如果读者多次运行上述程序,会发现:上述代码虽然每个数字都是随机数,但是每次运行的结果都一样。即:

在这里插入图片描述

  1. 概念解释:
    1)系统在调用rand()之前都会自动调用srand(),
    2) 如果在srand()里给参数seed指定了一个值,那么 rand()就会将seed的值作为产生伪随机数的初始值;
    3)而如果用户在rand()前没有调用过srand(),那么系统默认将1作为伪随机数的初始值,
    4) 如果初始值是此时的1或是其他定值,那么每次rand()产生的随机数序列都是一样的,这也就是所谓的“伪随机数”。
  2. 解决办法:
    配合srand函数使用:
#include<stdio.h>
#include <stdlib.h>
#include<time.h>
int main(){
	srand(time(0));//需要头文件time.h
	for(int i=0;i<5;i++){
		printf("%d\n",rand());//需要头文件stdlib.h
	}
	return 0;
}

  1. 代码解释
    1)srand()里给参数seed指定了一个值(我们通常使用 time(NULL) 或者写成 time(0) 作为 seed ,因为时间值每秒都不同,)
    2)值得注意的是,如果srand()括号中没有参数的话,程序是会报错的,因为在函数原型中,srand()函数是要求加上内容的。
  • 头文件
    在上述代码中额外使用了两个头文件,需要注意
语句 所需头文件 作用
srand(time(NULL)); #include<time.h> 保证随机序列种子不同
rand() #include <stdlib.h> 能够生成随机数
  • 具体使用规则
    在实际应用中,我们往往需要产生某一区间内的随机数,怎么办呢?
    例如:用rand()函数产生 10~20 的随机整数
    解决思路:10~20共有11个数字,所以是 rand()%11+10;
    又如:用rand()函数产生学生成绩 score 属于[0,100]区间内
    解决思路:0-100共有101个数字,所以是 rand()%101;
    又如:用rand()生成-5~5的随机数
    -5~5共有11个数字,所以是 rand()%11-5;
    总结:用rand()生成 m~n (或者[m,n]) 的随机数
    m~n共有m-n+1个数字,所以是 rand()%(m-n+1)+m;

猜你喜欢

转载自blog.csdn.net/qq_42887760/article/details/84801524