数学建模-------MATLAB分支循环断点调试

1.if语句

(1)分段函数的引入(这里的数据表示的是分数的不同区间对应的等级)

(1)这个就是一个十分简单的if语句,无论是if还是elseif后面都是不能添加任何分号的,这个例子就是一个分段的函数,在不同的区间赋予不同的等级,这里划分了1,2,3,4一共4个等级,只有前面的三个全部都不满足的时候,才会执行第四个语句,另外if,elseif的后面都需要添加判断的条件的,但是else的后面不需要添加任何的条件,这个需要注意,后面我们会使用到;

(2)实际上的代码这样写就已经是我们简化以后的代码了,因为我们想要表达的是80~90之间dengji(等级)是2,但是我们只需要写大于80就会进行判断,为什么呢?因为我们的循环从上向下执行,当x>90不满足的时候,就已经把我们的判断区间定位在了90分以下,这个时候我们只写x>80实际上表达的就是80~90这个分数段的等级;

(2)数组元素大小的判断

我们这个要实现的就是一个简单的数组里面的两个元素比较大小,并且按照从大到小排列;

我们下面展示的是两种不同的写法,你能发现它们之间的差别吗?

我们这个只是使用了if,else语句,十分简洁;

这段代码我们使用了if,elseif语句,这样同样可以实现这个排序的功能;

其实对于初学者而言,第二种的代码多了一些,但是他的阅读以及对于程序的理解会更加的直观,我们需要知道的是使用elseif语句,后面是必须要有判断的条件的,但是如果直接使用else,就不需要添加任何的条件了;

(3)代码风格

对于我们的语句,尤其是循环语句,好的代码风格能够让人赏心悦目,我们在写代码的时候一定要注意缩进以及留白,这样更有利于读者的理解,MATLAB里面也有对于我们写的代码进行缩进的功能:智能缩进这个指令能够让我们的代码更加的清晰;

(4)if语句的嵌套

我们的案例是计算a,b,c三个数里面的最大值,这个有多种方法,我们可以借助函数max,我们也是可以使用if,elseif,elseif,else语句进行判断,但是这个地方我们使用嵌套的if语句判断(只是为了介绍嵌套if语句的用法);

根据上面的思路,我们使用下面的嵌套if语句进行求解最大值;

显然,这样的嵌套更加复杂,一般我们不会建议使用,但是我们应该能够理解看懂。

2.switch--case语句

(1)基本的用法

这个就是switch的一个简单的适用的场景,我们使用case找到与之相互匹配的条件,最后打印是这个季度,我们推荐使用的是函数disp:

实际上,因为这个季节是随机生成的,我们经过多组测试就可以发现会有不同的打印结果;

disp函数的主要的作用就是把其后面的括号里面的内容打印显示在我们的屏幕上面,我们都知道,如果在一条语句的末尾加上冒号,其实语句的结果可以计算,但是不会再命令行的窗口进行显示,disp克服了这个问题,我们这里实在disp这条语句的末尾加上了冒号,实际上,无论我们加或者不加,结果都会显示在屏幕上面的(读者下去可以自行的尝试)

当然,实现打印的方式肯定不止disp这一种方法,我们可以定义变量,最后打印变量,但是这样做以后,打印的结果不会很干净,不像我们的disp函数,他只会打印我们语句里面的内容,但是如果定义变量的话,变量和语句都会打印,显然就不如disp的效果好(打印结果如下所示);

(2)switch易错题目总结

这里的答案是只有n=0时,才会打印成绩合格,相信有很多的小伙伴和我一样,认为只要n时一个大于60的数,就会打印成绩合格,实际上并非如此,这里主要的原因是case后面的语句真值要么是0,要么是1,当n=0时,switch后面的值是0,case后面的n>=60显然不符合题意,所以也是假的(我们用0进行表示),n=1时候,case后面的语句是假的,但是switch后面的判断n=1,两者是不等的,就不会打印成绩合格;

这个程序显然不是我们想要表达的意思,我们想要表达的是60分以上的都打印成绩合格,否则打印不合格,我们想要达到这个效果,只需要把switch语句后面的n改写为1或者是true,这样我们输入的n只要大于60就是true,这样就和我们switch后面的开关匹配了,就符合我们的想法了。掌握了这个,我们就可以在if语句和switch语句之间做到灵活的转换了。

(3)switch语句&&元胞数组


元胞数组里面的数据,可以是不同类型,不同大小的数据;我们前面使用的普通矩阵就是一个数值数组,里面数据的类型是一样的,使用的是中括号:


元胞数组是使用的大括号括起来的:

显然元胞数组就会显示cell标志,这个在普通的数组里面是不会显示的;


元胞数组和普通数组之间的相互转换:

上面的是普通的数组(实质就是一个矩阵),打印的就是一个1*7的矩阵;

下面的是使用我们的num2cell函数把一个普通的数组转换为元胞数组;


元胞数组和普通数组在存储上面的区别:

我们可以发现,普通数组就是一个数组,里面有很多个元素,元胞数组可以理解为是很多数组的结合(因为我们通过打印元胞数组可以发现元胞数组里面的每个元素都是数组);


细节声明不同点:

我们比较一下下面的两种不同的写法打印的效果,显然,我们在2:8这个矩阵外面加或者不加都不影响打印结果,因为系统会自动识别它的类型,我们需要知道的是num2cell是一个函数,后面的括号就是要写函数参数,我们的中括号就是要声明我们加入的数据就是矩阵,我们不加的话也不会影响打印的结果(这个是我初学的时候比较疑惑的问题,上机运行才发现打印的结果是一样的)

其实这样的例子还有许多:

这个就是随机生成1~12的数字作为月份,我们可以发现正确的生成方法就是在1,12的外面加上中括号,表示数据的生成范围,但是如果我们不加中括号,就表示的生成数字全是1的矩阵,维度是12(行数和列数都是12,我们只写了一个,两个12都写打印的结果是相同的),打印的结果就会截然不同了;

小结:相同的省略(都是省略中括号),打印的结果截然不同(第一个不影响,第二个就完全不同),我们平时在使用的时候,应当注意比较这些异同点;


2个具体的实例:

这个案例就是利用这个随机生成的数据,匹配case后面的元胞数组里面的月份;最后显示季节;

第二个案例:

这个案例使用元胞数组打印成绩的等级(因为90~100都是A等级,所以元胞数组就是{9,10}),fix函数的作用就是取整函数,就是把小数部分给舍掉;

这里把switch后面的开关改写为了a,这个时候的91如果想要打印A等级,就需要改写case后面的语句,这个案例提供了3种写法,第一种会被理解为一个元胞数组,所以不会打印A等级,第二种就是枚举所有的可能情况,可以打印对应的等级;第三种就是使用num2cell把数组转换为元胞数组,这里比较容易想的是第一种写法,但是这个想法是不对的(后面的case后的8,7,6也可以按照这个进行改写,这里只演示一个);


3.for语句断点调试功能

我们要想知道这个循环的具体的执行过程,就可以进行调试,下面我是以2023a的版本进行实现的

(1)首先我们认识一下运行节,运行,和步进

在我们的实时脚本里面,我们可以划分不同的运行节,我们选择运行节(就是上面的1)就只会运行我们所打的断点那个运行节里面的内容,我们点击运行就会运行实时脚本里面所有的代码(一般不会这样做,除非是大型的项目,一般我们练习的调试都是运行节),步进就是一步一步地执行,这个步进就是在调试的过程中使用的,来控制调试;

(2)打断点:就是在行号上面点击出现红色的方框,这个表示设置断点成功:

(3)运行的过程:我们设置断点过以后,程序就会从断点的位置开始运行,我们点击步进就会一步一步地执行,循环的过程以及变量的值变化的过程都可以看见:

这里我设置了2个断点,调试开始以后,我们就会发现,上方的实时编辑器增加了新的功能:

继续:我们只有设置多个断点的时候,继续这个选项才会发生作用,我的设置270,274行2个断点,如果开始以后箭头指向270行,这个时候如果是步进,就会一步一步地执行循环,每一步的结果都可以看到(下面会讲到),但是如果执行的是“继续”,就会直接跳到下一个断点的位置,也就是274行,直接打印s的数值(这个和我们不调试直接运行其实就没有区别了,因为这样就会直接打印结果);

步进:和上面的一样,控制调试的过程执行;

步入步出:这个后续在自定义函数会用到,这个后续介绍,了解即可;

停止:这个就很直接了,直接停止我们调试的过程;

(4)工作区观察循环的每个步骤:

右边的工作区可以直观地观察调试的时候,每个变量的大小的变化的情况,这里显示的是ii=6,这个是因为循环已经结束了,如果开始调试每一次循环,ii的数值都会加一,s的数值一直在累加,所以它的数值随着循环的进行也会不断地发生变化;

(5)变式解决

我们上面的使用逗号隔开,是行向量,如果使用分号隔开,就变成了列向量,发现循环以后打印的是列向量的本身;

这个是因为我们每次循环时,会取出一列参加运算,如果是行向量,每次取出来一列(相当于就是一个数字,因为一个数字可以看作是行数为1的列向量),如果是列向量,直接取出一列,相当于循环就直接进行了一次,就把列向量输出了,并不是我们想要的结果;

解决方案:

第二种:

这种做法就比较无脑了,就是无论你是行向量还是列向量,我都把你转换成列向量,然后进行转置,最后经过循环输出结果。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

空间数据结构(四叉树,八叉树,BVH树,BSP树,K-d树)

下文参考:https://www.cnblogs.com/KillerAery/p/10878367.html 游戏编程知识课程 - 四分树(quadtree)_哔哩哔哩_bilibili 利用空间数据结构可以加速计算,是重要的优化思想。空间数据结构常用于场景管理,渲染,物理,游…

Jamba: A Hybrid Transformer-Mamba Language Model

Jamba: A Hybrid Transformer-Mamba Language Model 相关链接:arXiv 关键字:hybrid architecture、Transformer、Mamba、mixture-of-experts (MoE)、language model 摘要 我们介绍了Jamba,一种新的基于新颖混合Transformer-Mamba混合专家&am…

VMware配置环境(安装运行问题)及系列dns端口网络类型IP远程连接学习之(详谈8000字)

安装vmware快速配置步骤 下载VMware安装包 在下载好VMware安装包之后双击运行 接受条款 关闭VMware自动更新 勾选快捷键方式 安装VMware安装 输入许可证(有需要私信小编) 安装完成 重启电脑即可 最终成功界面: 安装Linux系统 创建虚拟机 选择…

工业互联网网关软件分析与设计

一、 案例软件分析 一、总体目标 工业互联网是新一代信息技术与制造业深度融合形成的新兴业态和应用模式,其发展前景广阔。工业互联网网关是将各采集监测点的数据通过无线或有线传感网络进行数据汇集,进行统一有效的监管。在工业互联网体系架构中&…

聚焦丨酷雷曼亮相文旅虚拟现实应用推广活动

图片来源:虚拟现实与元宇宙产业联盟XRMA 2024年3月21日,由文化和旅游部产业发展司主办的数字赋能文旅场景建设行动——文化和旅游虚拟现实应用推广交流活动在北京市石景山区首钢园举办。 酷雷曼市场总监刘方磊出席活动,并在活动现场展示酷雷…

【云呐】固定资产盘点报告表怎么填

报告表以表述清晰为主,避免繁琐,重要数据及问题使用表格形式展示。通过签字对报告负责认同度。内容应全面反映本次盘点,提供参考依据。一、标题 包含单位名称、报告期间等基本信息二、前言 概括本次盘点的目的和任务签署三、盘点范围与时间 明确盘点的固定资产项目和时…

【C语言】2048小游戏【附源码】

欢迎来到英杰社区https://bbs.csdn.net/topics/617804998 一、游戏描述: 2048是一款数字益智类游戏,玩家需要使用键盘控制数字方块的移动,合并相同数字的方块,最终达到数字方块上出现“2048”的目标。 每次移动操作,所…

C++心决之内联函数+auto关键字+指针空值

目录 7.内联函数 7.1 概念 7.2 特性 8. auto关键字(C11) 8.1 类型别名思考 8.2 auto简介 8.3 auto的使用细则 8.4 auto不能推导的场景 9. 基于范围的for循环(C11) 9.1 范围for的语法 9.2 范围for的使用条件 10. 指针空值nullptr(C11) 10.1 C98中的指针空值 7.内联…

RK3568驱动指南|第十四篇 单总线-第165章DS18B20驱动使用ioctl读取分辨率

瑞芯微RK3568芯片是一款定位中高端的通用型SOC,采用22nm制程工艺,搭载一颗四核Cortex-A55处理器和Mali G52 2EE 图形处理器。RK3568 支持4K 解码和 1080P 编码,支持SATA/PCIE/USB3.0 外围接口。RK3568内置独立NPU,可用于轻量级人工…

门户系统商城模块

商城系统:快递商品本地团购到店核销购物场景全覆盖,全新商销解决方案 商城系统是指一套用于构建和运营电商平台的软件系统,可以帮助企业快速搭建网上商城,实现商品销售、订单管理、客户服务等功能。 商城系统的功能:…

蓝桥杯-dfs搜索模板题(二)

蓝桥杯-dfs搜索模板题(二) P1683 入门P1596[USACO10OCT] Lake Counting S1114 棋盘 acwingP1025 [NOIP2001 提高组] 数的划分P1019 [NOIP2000 提高组] 单词接龙结语 P1683 入门 这道题没有回溯的必要,重复走也不计数。最开始的部分要补上。 …

UTAustin最新提出!无相机姿态40秒重建3DGS方法

作者:小柠檬 | 来源:3DCV 在公众号「3DCV」后台,回复「原论文」可获取论文pdf 添加微信:dddvision,备注:3D高斯,拉你入群。文末附行业细分群 详细内容请关注3DCV 3D视觉精品课程:…

lombok与idea版本不兼容问题解决

lombok与idea版本不兼容问题,可以选择更改lombok版本;也可以选择加配置来解决此问题 1、选择 setting->Build,Execution,Deployment->compiler 2、在 Shared build process VM options中加入如下配置,即可解决此问题 -Djps.track.ap.…

uniapp,文字超出几行显示省略号...,展开显示更多

效果图&#xff1a; 代码&#xff1a; <template><view class"text-container"><text class"text-content" click"showDetail">{{ text }}</text><text v-if"showMore" class"view-detail" cli…

Redis 全景图(2)---- 关于 Redis 的三“高”

前言 我们继续写第一篇文章没写完的。其实我也不想将我写的一篇 Redis 文章分成几篇中短文来写&#xff0c;但是没办法&#xff0c;我一次写个1万字&#xff0c;会限流&#xff0c;所以将就一下吧。 上篇文章我用了 Redis 的6大模块这个思路来描绘我脑子中的 Redis。其实这6大…

WPF-基础及进阶扩展合集(持续更新)

目录 一、基础 1、GridSplitter分割线 2、x:static访问资源文件 3、wpf触发器 4、添加xaml资源文件 5、Convert转换器 6、多路绑定与多路转换器 二、进阶扩展 1、HierarchicalDataTemplate 2、XmlDataProvider从外部文件获取源 3、TextBox在CellTemplate中的焦点问题…

这些策略助力打造多元化、公平和包容性招聘流程

多样性、公平和包容(DEI)是企业招聘员工的最佳策略。顾名思义&#xff0c;DEI描述了三个关键组成部分: “多元化”&#xff0c;这取决于吸引、招聘、雇佣和留住多元化的员工队伍; “公平”部分是指确保不歧视和平等就业机会; “包容”要求建立一个尊重、支持和包容的环境&am…

【学习】兼容性测试为何如此重要

兼容性测试是软件测试中非常重要的一环&#xff0c;旨在确保软件在不同的平台、浏览器、操作系统等环境下能够正常运行&#xff0c;并且不会出现兼容性问题。本文将介绍兼容性测试的概念、重要性、实施步骤及实践案例&#xff0c;帮助读者更好地理解兼容性测试在软件开发中的重…

【解决问题】排查linux手动删除文件,但是文件标记为deleted,资源未释放

背景&#xff1a; 生产环境我们把程序生成的数据文件手动删除后&#xff0c;但是空间并没有释放&#xff0c;导致硬盘被占用&#xff0c;不够用 问题排查&#xff1a; 1.查看占用文件状态 使用命令&#xff1a; lsof | grep deleted 查看 文件已经删除了&#xff0c;但是都是…

人事管理系统的设计与实现|Springboot+ Mysql+Java+ B/S结构(可运行源码+数据库+设计文档)请假加班招聘考勤

本项目包含可运行源码数据库LW&#xff0c;文末可获取本项目的所有资料。 推荐阅读300套最新项目持续更新中..... 最新ssmjava项目文档视频演示可运行源码分享 最新jspjava项目文档视频演示可运行源码分享 最新Spring Boot项目文档视频演示可运行源码分享 2024年56套包含ja…