(C语言生成随机数问题)
rand函数
rand - C++ Reference (cplusplus.com)
rand()
函数是专门用来生成随机数的rand()
返回的是0~RAND_MAX(32767)之间的随机数rand()
函数在头文件stdlib.h
中,使用前要导入这个头文件- 因为
rand
默认生成随机数范围是0~32767,这是一段很大的范围,所以我们需要限制随机数范围:rand()%100+1
范围:1~ 100 因为任何一个数字,模100,得到结果的范围是0~99,在加1,范围就是1 ~ 100
int num = rand()%100+1;
printf("%d", num);
- 此时rand的确生成了随机数,但是每次生成的随机数都是固定值,所以我们要在
rand()
前使用一个srand
函数,来设置随机数生成器
srand函数
srand - C++ Reference (cplusplus.com)
srand
函数的定义(官方):
void srand (unsigned int seed);
srand
函数也在头文件stdlib.h
中srand
的使用
srand(1);
int num = rand();
printf("%d", num);
-
在srand中传不同的值,rand会生成不同的值
-
所以我们为了得到不同的随机值,我们要给
srand()
传一个时刻变化的值——时间
时间戳和time()函数
- 定义:时间戳是从1970年1月1日(UTC/GMT的午夜)开始所经过的秒数,不考虑闰秒。
- 在C语言中,
time()
会返回时间戳 time - C++ Reference (cplusplus.com) time()
的定义(官方):
time_t time (time_t* timer);
time()
函数在time.h
的头文件里,使用前要导入这个头文件time()
函数的使用:
srand(time(NULL));
int num = rand();
printf("%d", num);
//这时,每次都会生成不同的随机数
- 但是这里会发现,每次生成的随机数都很相近,所以如果有循环生成随机数的要求,srand在程序中只需调用一次即可,不用重复调用,即把
srand
语句放到主函数里,生成随机数部分放到函数中
最终代码:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void test()
{
int num = rand()%100+1;
printf("%d\n", num);
}
int main()
{
int n = 0;
srand(time(NULL));
printf("输入要生成随机数的个数:");
scanf("%d", &n);
for (int i = 0; i < n; i++)
{
test();
}
}
结果:
标签:rand,int,srand,生成,num,随机数,time,C语言 From: https://blog.51cto.com/u_16237630/7331789