首页 > 其他分享 >C语言生成随机数问题

C语言生成随机数问题

时间:2023-09-02 12:01:50浏览次数:63  
标签:rand int srand 生成 num 随机数 time C语言

(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()中传1 srand()中传2

  • 所以我们为了得到不同的随机值,我们要给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

相关文章

  • 东方博宜OJ 打印星号三角形 C语言版
    题目描述打印星号三角形。输入输入只有一行,包括 11 个整数 n , n 代表行数。输出输出 n 行。样例输入5输出************************************************************************......
  • 『学习笔记』狄利克雷生成函数
    定义一般地,对于一个函数\(f\),定义它的狄利克雷生成函数(简写为DGF)为:\[\tilde{F}(x)=\sum_{i\ge1}^\infty\dfrac{f_i}{i^x}.\]即:\[\tilde{F}(x)=f_1+\dfrac{f_2}{i^2}+\dfrac{f_3}{i^3}+\dfrac{f_4}{i^4}+\cdots.①\]性质若\(f\)是积性函数,则一定满足:......
  • 东方博宜OJ1000 熟悉一下Online Judge的环境 C语言版
    题目描述请不要笑。用来适应环境的题目,自然比较简单些。计算 22个整数的和,这两个整数都在 11到 100之间。输入输入只有一行,包括 22 个整数 a , b ,之间用一个空格分开。输出输出只有一行,包括 11 个整数。样例输入12输出3说明使用O......
  • 东方博宜OJ1002 编程求解1+2+3+...+n C语言版
    题目描述编程求解下列式子的值:n=1+2+3+⋯+n。输入输入一行,只有一个整数n(1≤n≤1000) 。输出输出只有一行(这意味着末尾有一个回车符号),包括 1 个整数。样例输入100输出5050来源简单循环代码  ......
  • 东方博宜OJ1003 - 编程求1+3+5+...+n C语言版
    题目描述编程求 1+3+5+⋯+n 。输入输入一行,只有一个整数 )n(1≤n<10000) 这里 n 为奇数。输出输出只有一行。样例输入99输出2500来源简单循环代码  ......
  • 东方博宜OJ1004 编程求1*2*3*...*n C语言版
    题目描述编程求 1×2×3×⋯×n 。输入输入一行,只有一个整数 n(1≤n≤10);输出输出只有一行(这意味着末尾有一个回车符号),包括 11 个整数。样例输入5输出120来源简单循环代码  ......
  • 东方博宜OJ1005 已知一个圆的半径,求解该圆的面积和周长 C语言版
    题目描述已知一个圆的半径,求解该圆的面积和周长。输入输入只有一行,只有 11 个整数。输出输出只有两行,一行面积,一行周长。(保留两位小数)。令 paˋi=3.1415926。样例输入1输出3.146.28说明圆的面积和周长求解公式分别如下;圆的面积 S=π× ......
  • C语言实现MACD指标
    只有实现了EMA,才能取得MACDEMA,指数移动平均线是一种IIR滤波器,很容易用C语言实现,并且使用最少的资源。与简单的移动平均线不同,它不需要RAM缓冲区来存储先前的样本。它只需要存储一个值(前一个平均值)。 指数移动平均线表示为以下等式:avg[n]=(in*alpha)+avg[n-1]*(1-a......
  • 使用 Amazon SageMaker 的生成式 AI 定制个性化头像
    生成式AI已经成为各行业创意过程增强和加速的常用工具,包括娱乐、广告和平面设计。它可以为观众创造更个性化的体验,并提高最终产品的整体质量。亚马逊云科技开发者社区为开发者们提供全球的开发技术资源。这里有技术文档、开发案例、技术专栏、培训视频、活动与竞赛等。帮......
  • VIM如何取消生成Undo 文件
    在使用vim编辑文件后,总是会有一个以.un~结尾的文件自动生成,看着让人心烦。 其实这是vim的undofile和备份文件,可以让你在关闭文件后再次打开时还可以撤销上次的更改,<!--more-->但是有了git之类的工具,这个功能实在有点多余,那么如何取消这个功能呢? 方法其实很简单,找到你的vim配置......