C语言生成随机数

news2025/1/11 15:10:34

目录

概念:

具体运用

实战

1.只使用rand()函数

2.使用rand()函数和srand() 函数


概念:

       在实践中,找到真正的随机数字是困难的。数字计算机只能在⼀个限定的范围内和有限的精度下去处理数字。在⼤多数情况下,最好的⽅法是产⽣伪随机数,这不是真正意义的随机数,它的意义是:单次产⽣的数列是⽆法预测的,但是每次都会⽣成同样的⼀组随机数列。 

        C语⾔的标准函数库提供有⼀个随机数函数, rand()函数,它返回0 ~ rand_max均匀分布的伪随机整数。rand()函数不接受参数默认以1为种⼦(即起始值),它总是以相同的种⼦开始,所以形成的伪随机数列也相同,不是真正的随机。这是有意设计的,⽬的是为了便于程序的调试。另⼀个函数是 srand()可以使⽤该函数指定不同的数(⽆符号整数)为种⼦。但是如果种⼦相同,么伪随机数列也相同。有两种⽅法可以采⽤:⼀种是让⽤户输⼊种⼦,但效果不是很理想;另⼀种⽐较想的是采⽤变化的数,常⽤时间来作为随机数⽣成器的种⼦。这样,种⼦不同,产⽣的随机数也就不同。rand 函数包含在头文件stdlib.h中。

rand()函数没有参数,它返回⼀个从0到最⼤数之间的随机数。要⽣成⼀个[ab]范围内的随机数,可以表⽰为:

int n=a+srand()%(b-a+1);

要想每次产生的随机数不一样,那么,我们就要用到 srand 函数。

srand() 函数原型是:void srand (usigned int seed);
rand() 产生随机数时,如果用srand(seed) 播下种子之后,一旦种子相同,产生的随机数将是相同的。当然很多时候刻意让rand() 产生的随机数随机化,用时间作种srand(time(NULL)) ,这样每次运行程序的时间肯定是不相同的,产生的随机数肯定就不一样了。通常可以利用 time(0)getpid(0) 作为seed的返回值,下面我们只介绍用time(0)实现随机数。此外需要添include<time.h>头文件

srand((unsigned)time(NULL));   //用时间作种子
srand((unsigned)getpid(NULL)); 

具体运用

#include <stdio.h>
#include <stdlib.h>//包含转换和存储头⽂件 #include <time.h>//包含⽇期和时间处理头⽂件 #define max 100

int main() {
    srand((unsigned)time(NULL));//随机数播种函数
    for (int i = 0; i < 20; i++)//产⽣20个随机数
        printf("%d\n", rand() % max);//设定随机数范围并输出
}    

实战

描述:系统随机生成一个随机数,用户通过键盘输入与之匹配,通过提醒最后找到准确答案。

1.只使用rand()函数

#include<stdio.h>
#include <stdlib.h>
int main(){
	
	int myguess;
	unsigned int ra = rand()%100;
	printf("%d",ra);
	while(1){
		printf("pls guess:");
		scanf("%d",&myguess);
		if(myguess > ra){
			printf("your input big\n");
		}else if(myguess <ra){
			printf("your input little\n");
		}else if(myguess == ra){
			printf("your guess success\n");
			break;
		}
	}
	
}

运行结果

运行结果每次都一样,不是真正意义上的随机数。 

2.使用rand()函数和srand() 函数

#include<stdio.h>
#include <stdlib.h>
#include<time.h>
int main(){
	
	int myguess;
   //srand((unsigned)getpid(NULL)); 
	 srand((unsigned)time(NULL));
	 int ra = rand()%100;
	printf("%d",ra);
	while(1){
		printf("pls guess:");
		scanf("%d",&myguess);
		if(myguess > ra){
			printf("your input big\n");
		}else if(myguess <ra){
			printf("your input little\n");
		}else if(myguess == ra){
			printf("your guess success\n");
			break;
		}
	}
	
}

运行结果

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/561447.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【AI 孙燕姿】歌声转换技术原理浅析

最近打开B站&#xff0c;首页会推荐很多以【AI 孙燕姿】开头的视频&#xff0c;内容是用孙燕姿的音色去唱其他歌手的歌。出于好(ceng)奇(re)心(du)&#xff0c;作者去了解下歌声转换&#xff08;Singing Voice Conversion&#xff0c;SVC&#xff09;这个任务。不看不知道&…

比亲妈都细,从0-1手把手教你搭建Elasticsearch+kibana+IK分词器

前言&#xff1a; 最近用到了ElasticsearchkibanaIK分词器&#xff0c;但是基本上能搜到的所有教程、视频都用的是老版本的&#xff0c;奈何我又空有一身反骨&#xff0c;我就不爱用老版本的&#xff0c;结果就一个一个的踩坑。 Elasticsearch是我用过的最坑的软件之一了&#…

通过ChatGPT跟MetaHuman对话,Android/iOS兼容

一、申请ChatGPT的API-KEY 1.通过 openAI官网申请API-KEY 2.参考使用腾讯云函数一分钟搭建 OpenAI 免翻墙代理搭建openAI免翻墙代理 3.通过Postman测试一下openAI函数是否可被调用,传入BearerToken和Body参数,ChatGPT即可返回应答数据 二、启用必要的插件 1.启用文字转语…

5.24黄金短线上涨能否继续做空?今日如何布局

近期有哪些消息面影响黄金走势&#xff1f;今日黄金多空该如何研判&#xff1f; ​黄金消息面解析&#xff1a;黄金消息面解析&#xff1a;周二(5月23日)&#xff0c;国际金价延续隔夜跌势&#xff0c;因在美联储官员的鹰派言论推动下&#xff0c;美元重启涨势&#xff0c;尽管…

chatgpt赋能Python-python_padding

Python中Padding的介绍 在Python编程中&#xff0c;Padding是一种在字符串或序列前后添加空格或其他占位符来实现对齐的技术。这种技术常用于数据格式化、打印输出、加密等场合&#xff0c;具有很高的实用性。 Python中Padding技术主要由三种函数实现&#xff1a;rjust, ljus…

当系统部署到测试环境,或线上时,该如何查看当前FastJson的版本

当系统部署到测试环境&#xff0c;或线上时&#xff0c;该如何查看当前FastJson的版本 提示&#xff1a;看见网上很多方法&#xff0c;有的不是很实用了&#xff0c;近日自己将fastJson版本升级到了1.2.76&#xff1b;需要在系统中查看版本信息&#xff1b;用到了如下方法&…

Java——《面试题——JVM篇》

前文 java——《面试题——基础篇》CSDN博客 1.知识点汇总 JVM是Java运行基础,面试时一定会遇到JVM的有关问题,内容相对集中,但对只是深度要求较高. 其中内存模型&#xff0c;类加载机制&#xff0c;GC是重点方面.性能调优部分更偏向应用&#xff0c;重点突出实践能力。编译…

网络安全技能差距的高成本

犯罪分子总是利用我们的无能为他们谋取利益。根据&#xff08;ISC&#xff09;的一份报告&#xff0c;全球网络安全专业人员短缺近 300 万。导致网络安全专家短缺的原因是多方面的&#xff0c;例如网络安全威胁的复杂性越来越高&#xff0c;技术进步的速度越来越快&#xff0c;…

C++继承技术

方法覆盖 virtual关键字 只有在基类中声明为 virtual 的方法才能被派生类正确覆盖。关键字位于方法声明的开头&#xff0c;如下面的 Base 的修改版本所示&#xff1a; class Base {public:virtual void someMethod() {}protected:int m_protectedInt { 0 };private:int m_pr…

一图看懂 dis 模块:将 python 字节码反汇编为助记符,资料整理+笔记(大全)

本文由 大侠(AhcaoZhu)原创&#xff0c;转载请声明。 链接: https://blog.csdn.net/Ahcao2008 一图看懂 dis 模块&#xff1a;将 python 字节码反汇编为助记符&#xff0c;资料整理笔记&#xff08;大全&#xff09; &#x1f9ca;摘要&#x1f9ca;模块图&#x1f9ca;类关系图…

chatgpt赋能Python-python_plt_散点图

Python plt散点图&#xff1a;学习数据可视化的有力武器 Python是一种广泛使用的编程语言&#xff0c;广泛应用于数据科学&#xff0c;数据分析&#xff0c;计算机视觉等领域。而在数据可视化方面&#xff0c;Python也提供了很多强大的工具&#xff0c;其中plt散点图是一种非常…

Chatbot UI老外在用的gpt网页版 搭建方法分享!

新建了一个网站 https://ai.weoknow.com/ 每天给大家更新可用的国内可用chatGPT资源 Chatbot UI 高仿ChatGPT官网&#xff0c;中文还支持贼好&#xff0c;界面美观度间距还需要打磨。是老外做的吗&#xff1f; ​ 环境部署 更新环境 apt update -y && apt upg…

09 - 进程长参数编程

---- 整理自狄泰软件唐佐林老师课程 查看所有文章链接&#xff1a;&#xff08;更新中&#xff09;Linux系统编程训练营 - 目录 文章目录 1. 短选项扩展编程1.1 再论进程参数&#xff08;短选项&#xff09;1.2 进程短选项示例 2. 进程长参数编程2.1 进程长参数示例2.2 进程长参…

MATLAB NAN或INF无效点去除 (14)

MATLAB NAN或INF无效点去除 (14) 一、算法介绍二、算法实现1.代码(含注释说明)2.效果(无效点去除前后点坐标展示)一、算法介绍 仅就一般情况来说,激光点云受到测量影响,可能会产生无效点,即坐标值为NAN或者INF等,这种点会严重干扰一些几何特征,例如法向等的计算,因…

HummerRisk V1.1.0 发布

HummerRisk V1.1.0发布&#xff1a; 重构了新的Dashboard&#xff0c;新增报告中心&#xff0c;增加新的 Linux 主机系统的安全扫描、安全审计功能。增加部分Docker相关的主机检测&#xff0c;镜像仓库新增公有云阿里云、腾讯云类型&#xff0c;新增镜像分组管理等功能&#x…

chatgpt赋能Python-python_os拷贝文件

Python os拷贝文件 – 从简介到实现 Python os库是一个经常使用的工具&#xff0c;它是Python的标准库&#xff0c;提供了与操作系统进行交互的函数和方法。其中&#xff0c;os拷贝文件是其常用的功能之一&#xff0c;可以用来实现文件备份、文件复制等等操作。接下来&#xf…

pthread多线程: 线程泄漏的检测

文章目录 1. 目的2. 什么是线程泄漏3. pthread 线程泄漏例子3.1 代码3.2 编译和运行3.3 简要分析 4. 检测线程泄漏4.1 编译链接时传入参数 -fsanitizethread4.2 确认 TSAN_OPTIONS 环境变量 5. 修复线程泄漏5.1 方法1&#xff1a; 主线程等待子线程5.2 方法2&#xff1a;子线程…

k8s网络如何连接?

在k8s中网络连接可以分为 容器与容器: 所有在pod中的容器表现为在同一个host&#xff0c;他们之间可以通过端口进行连接 pod与pod: 因为每个pod都有一个ip&#xff0c;因此pod可以通过ip进行直接连接 在不同主机上pod究竟是如何连接的呢&#xff1f;毕竟pod ip只是虚拟的&…

Vue+Element-ui实现表格导出和导入

表格导出&#xff0c;填写数据&#xff0c;导入表格 需求&#xff1a;表格导出&#xff0c;填写数据&#xff0c;导入数据表格文件存储在前端表格文件不存储 需求&#xff1a;表格导出&#xff0c;填写数据&#xff0c;导入数据 分析需求&#xff1a; &#xff08;1&#xff0…

【Leetcode60天带刷】day01——704.二分查找、27.移除元素

题目&#xff1a; 704. 二分查找 Leetcode原题链接&#xff1a;力扣704.二分查找 思考历程与知识点&#xff1a; 考查二分查找能力&#xff0c;注意mid的取值。 注意&#xff1a; 右端点的大小&#xff0c;需要在数组长度上-1。也就是nums.size()-1&#xff0c;因为下标是从…