c语言rand()、srand()函数

1、rand()生成随机数:

  • rand():产生一个随机数,返回介于0和之间的伪随机整数RAND_MAX(32767).
  • rand() 函数虽然可以产生一个随机数,但这不是真正意义的随机数,是一个伪随机数,

所谓的“伪随机数”指的并不是假的随机数,是通过一定的算法得到一种假想状态的随机数,计算机只能生成相对的随机数,而这些随机数既是随机的又是有规律的,一部分遵守一定规律,一部分则不遵守任何规律

  • rand()函数在使用的时候需调用srand(seed)函数,也就是提供一个种子,使用如果没用调用srand(),那么系统就会自动给seed赋值,即srand(1)。
  • 在调用rand()和srand()的时候需要引入<stdlib.h>头文件

2、rand()生成一点范围的随机数

在实际开发,我们往往需要的是一定范围内的随机数,那么我们常用的方法就是取余运算,在进行一个加法运算。

  • 想要产生一个0-99的随机数,那么用法如下:

int num = rand() % 100;

  • 想要产生一个1-100之间的随机数,用法如下:

int num = rand() % 100 +1

  • 想如果我们像产生一个80-120的随机数

int num = rand() % 41 +80

//用代码演示一下 
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<windows.h>

#include<stdlib.h>
int main(){
    
    
	for (int i = 0; i < 20; i++){
    
    
		int num = rand() % 41 + 80;
		printf("%d\t",num);
	}
	system("pause");
	return 0;
}
//运行结果为
80      97      100     94      102     101     119     82      105     108     86      99      114     97      119
        120     82      91      110     104     请按任意键继续. . .

3 srand()函数

  • srand()函数需要的头文件仍然是:<stdlib.h>
  • srand()函数原型:void srand (usigned int seed);
  • srand ()函数是初始化随机数生成器。伪随机数生成器使用作为seed传递的参数进行初始化。

如果使用相同的种子,rand()函数后面还会出现一样的随机数,上面我们提到默认的srand(1),直接使用1来初始化种子,得到的随机数还是伪随机。

  • 在实际开发中,我们可以用时间作为参数,只要每次播种的时间不同,那么生成的种子就不同,最终的随机数也就不同,通常我们采用
    <time.h> 头文件中的 time 函数即可得到一个精确到秒的时间作为种子。
//我们在代码中实现随机数结果
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<windows.h>
#include<time.h>
#include<stdlib.h>
int main(){
    
    
	srand(time(0));
	for (int i = 0; i < 20; i++){
    
    
		int num = rand() % 41 + 80;
		printf("%d\t",num);
	}
	system("pause");
	return 0;
}
  • 第一次运行结果
103     95      113     118     89      91      83      92      99      92      117     97      91      82      97
        91      83      89      91      109     请按任意键继续. . .
  • 第二次运行结果
81      80      85      84      114     96      110     107     102     83      83      109     113     96      90
        82      105     102     81      114     请按任意键继续. . .


猜你喜欢

转载自blog.csdn.net/supermanman_/article/details/109201869