leetcode c程序总提示主函数_Matlab系列之函数嵌套
昨天的那一篇讲的几个函数,不知道你们理解的如何,是否懂得怎么去使用了,如果还没懂,一定要再多看几遍,并且去在软件上进行实操,今天的话,将要介绍一下函数的嵌套,不过在正式讲嵌套之前,先对主函数和子函数做下了解。
主函数
一般来说,函数M文件中的第一个函数就是主函数,之后任意数量的函数都是子函数,主函数也就是以其函数名命名的函数,因此可以被该文件外的其他文件中的函数或者脚本调用。
子函数
一个函数M文件中,除主函数之外的都是子函数,子函数只能够被该文件中的其他函数调用,每个子函数都是以“function”开始,直至下一个函数的定义或者文件的结尾才结束,子函数的顺序可以随意,但是主函数一定是要最开始出现的。
接下来对主函数和子函数的格式编写一个程序,然后简单调用看下其运行结果:
程序:
function [avg,med] = newstats(u)%主函数%返回数组的均值和中间值n=length(u);avg=mean(u,n);med=median(u,n);function a=mean(v,n)%子函数%计算平均值a=sum(v)/n;function m=median(v,n)%子函数%计算中值w=sort(v);if rem(n,2)==1 m=w((n+1)/2);else m=(w(n/2)+w(n/2+1))/2;end
结果:
再说一下在M文件中调用函数的流程,调用时遇到函数,会先判断是否为子函数。然后判断是否为私有函数,最后才判断是不是当前目录下的其他函数M文件或者系统内置的函数。
私有函数
刚好讲到私有函数,就顺便对它简单介绍下,私有函数就是MATLAB安装目录下,位于“private”这个目录下的函数M文件,构造和我们自己创建的函数一个样,不过私有文件只可以被private目录的上级目录下的函数M文件调用,而不能被脚本文件调用,也不能被其他目录下的任何M文件调用。
嵌套函数
讲完主函数和子函数,现在开始嵌套函数的记录,这个理解起来就很简单了,最容易理解的就是多层嵌套结构,就相当于套纸杯,一个套一个的感觉,看下它的程序结构就知道了:
function x=A(p1,p2)...... function y=B(p3) ...... function z=C(pN) ...... end ....... end.......end
除了这种多层嵌套的结构,还有一种平级嵌套结构,就相当于一堆小球放一个纸箱子里,纸箱子就是级别最高的那个函数,然后其他小球都是同级别的函数,再来看看它的程序结构:
function x=A(p1,p2)...... function y=B(p3) ... end function y=C(p4) ... end function y=N(pN) ... endend
嵌套规则
讲完了两种嵌套的结构,或许你们在想,这些函数嵌套后,函数之间的调用会有什么规则吗?
没错,有一定规则的,嵌套函数可以被该嵌套函数的上一层函数使用、也可以是同一个母函数的同级嵌套函数使用、甚至可以被任意一个低级别的函数调用,如果没太看懂意思,来看一个简单的示例,再理解上面讲的嵌套函数被调用的规则:
程序:
function A(x,y)B(x,y);D(x,y); function B(x,y) C(x); D(x); function C(x) B(x,y); D(x,y); end end function D(x,y) B(x,y); E(x); function E(x) B(x,y); D(x,y); end endend
该程序中可以很明显的看出,函数A能调用B和D,但是不能调用C和E;函数B可以调用C和D;函数D可以调用B和E,函数C可以调用B和D,函数E也可以调用B和D;看完这段程序后,再返回看调用规则就可以学会使用了。
夜未深,人未眠,继续刚
夜未深,人未眠,就用上一篇讲到的函数参数配上今天讲的嵌套玩一玩吧,顺便加深下大家的印象。
因为嵌套函数和主函数是使用的相同的函数工作区,所以,varargin和varargout既可以表示为嵌套函数的输入输出变量,也可表示为主函数的输入输出变量。
那该怎么进行区分呢?
这就需要写好程序中的变量声明了,如果嵌套函数在函数声明里包含了varargin或varargout,则在函数内部调用这两个变量时,变量内容为该函数的输入输出变量;如果声明中没有包含,但是在其上层的函数声明有包含,就当在该嵌套函数内部调用这两个变量的时候,变量内容是上层函数的输入输出变量,不知道现在的你有没有被绕晕,来看程序再理一理吧。
程序:
function y=A(x,varargin)B(nargin,x*rand(4)) function B(argsIn,z) if argsIn>=2 C(z,varargin{1},4.512,1.729) end function C(varargin) if nargin>=2 y=varargin{1} end end endend
结果:
分析:
函数A调用nargin即“B(nargin,x*rand(4))”,表示函数A的输入变量个数,函数C调用的nargin代表的就是函数C的输入变量个数;
在函数A中,函数C嵌套在B中,函数B嵌套在A中,函数B中调用varargin{1}表示的是主函数A传入的第二个变量,因为A的第一个变量是x,之后才是varargin,而在函数C中的varargin{1}表示的就是函数B传给C的第一个变量,即z,也就是A传给B的”x*rand(4)”。
坚持看到这篇文章的你,现在是否已经对这几篇分享的内容有很好的理解了呢?
没有就继续品吧……
阅读本文共使用 秒
⬇️长按指纹关注电子狂人⬇️
电子知识
一些电路设计与DIY作品
电子设计技巧与经验
FPGA
System Generator系列教程
算法介绍
通信协议分析
资料分享
Matlab系列记录
建设中~
点个赞
再走吧
leetcode c程序总提示主函数_Matlab系列之函数嵌套相关推荐
- leetcode c程序总提示主函数_帅气中国小哥出“大招”,程序员跳槽面试刷题必备...
整理 | 一一 出品 | AI科技大本营 春节刚过,年终奖收入囊中,属于工程师们一年一度的跳槽季也来了. 跳槽后薪水翻倍自然爽歪歪,但最怕的是面试翻车,那就悲剧了.可想而知,想要跳槽或者为春招准备的毕 ...
- c 调用上层类中函数_Matlab系列之函数嵌套
昨天的那一篇讲的几个函数,不知道你们理解的如何,是否懂得怎么去使用了,如果还没懂,一定要再多看几遍,并且去在软件上进行实操,今天的话,将要介绍一下函数的嵌套,不过在正式讲嵌套之前,先对主函数和子函数做 ...
- demod函数_MATLAB信号处理工具箱函数 | 学步园
函数 说明 波形产生和绘图 chirp 产生扫描频率余弦 diric 产生Dirichlet或周期sinc信号 gauspuls 产生高斯调制正弦脉冲 rulstran 产生脉冲串 rectpuls ...
- matlab里inline定义矩阵,Matlab中的inline函数_matlab中inline函数
Matlab中的inline函数 1.有时为了描述某个数学函数的方便,可以用inline()函数来直接编写该函数,形式相当于M-函数,但无编写一个真正的MATLAB文件,就可以描述出某种数学关系.其调 ...
- 计算机一级电子表格TF函数,TFG1000系列DDS函数信号发生器基本操作
TFG1000系列DDS函数信号发生器基本操作 来源:华强电子网 作者:华仔 浏览:848 时间:2016-08-10 14:18 标签: 摘要: ;;; 可满足一般使用需要的基本操作方法,下面举例说 ...
- Win7运行程序总提示出现一个问题,导致程序停止正常工作。请关闭该程序?原来GreenBrowser下载有问题……
前段时间借了一位朋友的电脑来用.那台电脑里原有的浏览器不顺手,就先下载安装GreenBrowser,再运行GreenBrowser下载其它的应用程序. 首先下载EditPlus,结果运行时提示: 出现 ...
- Win7运行程序总提示出现一个问题,导致程序停止正常工作 请关闭该程序 原来GreenBrowser下载有问题
前段时间借了一位朋友的电脑来用.那台电脑里原有的浏览器不顺手,就先下载安装GreenBrowser,再运行GreenBrowser下载其它的应用程序. 首先下载EditPlus,结果运行时提示: 出现 ...
- Win7运行程序总提示出现一个问题 导致程序停止正常工作 请关闭该程序 原来GreenBrowser下载有问题
分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 前段时间 ...
- matlab函数fftshift,matlab中fft算法_matlab中fftshift函数_matlab中fft函数的用法(2)
plot([0 : PointNum/2 - 1], x1(1:PointNum/2)); grid on subplot(3,1,2); % [REX IMX] am = sqrt(abs(REX. ...
最新文章
- C# 泛型可能导致的装箱操作陷阱
- JavaScript 技术篇-js检测原生对象类型实例演示,js的3种对象类型
- 哈工大 c语言测试与系统控制 ad,哈工大——c语言在测量与控制中应用实验报告.pdf...
- Spring Boot 2.0 迁移指南
- VScode使用gitbash的配置方法
- Python使用Condition对象实现多线程同步
- 新零售大潮下 联想与BHG Mall签约共建智慧商城
- 运行 jar 文件_如何运行JAR文件
- 根据银行卡账号获取所属银行php代码
- 卸载网易邮箱大师邮件从服务器删除,如何卸载网易邮箱大师 网易邮箱大师卸载教程...
- 计算机相关英语论文,计算机相关英文论文.doc
- TF卡格式化8G格式化时候变成128KB的解决办法
- conan入门(二):conan 服务配置-密码管理及策略
- word标尺工具应用:如何快速调整版面距离参数
- Figma#4:图片填充
- OpenCV函数库查询手册(python)
- HPB芯链正式发布其测试网络,软硬件结合突破性能瓶颈
- 花生壳内网穿透步骤详解,感兴趣的小伙伴可以自己去尝试哦~
- F5 分布式云:设置阻断列表/放行列表
- 控件的属性、事件和方法
热门文章
- 安卓使用jdbc连接mysql_Android:使用JDBC连接MySql
- android 静态广播无效,Android8.0静态广播接收静态注册无效,并实现全局网络监听...
- java tomcat原理图,浅谈tomcat工作原理
- java取消按钮_Java Swing-单击取消按钮时不循环
- P6365 众数出现的次数(水)
- Super-palindrome(思维)
- XKC's basketball team(2019徐州站网络赛E线段树)
- Books Queries(codeforces 1066)
- 服务器位置缩写,服务器地区缩写
- mysql回滚与错误提示_对mysql事务提交、回滚的错误理解 – jae – 博客园