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系列之函数嵌套的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 支持 Sub-6GHz 5G 网络,联想
- 下一篇: resnet keras 结构_Day1