《MATLAB图像处理375例》——1.8 MATLAB程序流程控制结构
本節書摘來自異步社區《MATLAB圖像處理375例》一書中的第1章,第1.8節,作者:MATLAB技術聯盟著,更多章節內容可以訪問云棲社區“異步社區”公眾號查看
1.8 MATLAB程序流程控制結構
MATLAB圖像處理375例
作為計算機語言,編程是必需的,編程靠的是程序控制語句。計算機語言程序控制模式主要有三大類:順序結構、選擇結構和循環結構。這一點MATLAB與其他編程語言完全一致。
1.8.1 順序結構
順序結構是指所有組成程序源代碼的語句按照由上至下的次序依次執行,直到程序的最后一個語句。這種程序的優點是容易編制;缺點是結構單一,能夠實現的功能有限。
在MATLAB語言的函數中,變量主要有輸入變量、輸出變量及函數內所使用的變量。
(1)數據輸入。
從鍵盤輸入數據,可以使用input函數來進行,該函數的調用格式為:
A=input(提示信息,選項);其中提示信息為一個字符串,用于提示用戶輸入什么樣的數據。
如果在input函數調用時采用's'選項,則允許用戶輸入一個字符串。例如,想輸入一個人的姓名,可采用命令:
xm=input('hello world','s');(2)數據輸出。
MATLAB提供的命令窗口輸出函數主要有disp函數,其調用格式為:
disp(輸出項)其中輸出項既可以為字符串,也可以為矩陣。
【例1-64】數據輸出示例。
A='MATLAB'; disp(A)運行結果如下:
MATLAB【例1-65】輸入x,y的值,并將它們的值互換后輸出。
x=input('Input x.'); y=input('Input y.'); z=x; x=y; y=z; disp(x); disp(y);運行結果如下:
Input x.1 Input y.221【例1-66】對任一自然數n,按如下法則進行運算:若n為偶數,則將n除2;若n為奇數,則將n乘2加1。將運算結果按上面法則繼續運算,重復若干次后計算結果最終是1。
n=input('input n='); %輸入數據 while n~=1 r=rem(n,2); %求n/2的余數if r ==0n=n/2 %第一種操作elsen=2*n+1 %第二種操作end end運行結果如下:
input n=5 n =32 n =16 n =8 n =4 n =2 n =1(3)程序的暫停。
暫停程序的執行可以使用pause函數,其調用格式為:
pause(延遲秒數)如果省略延遲時間,直接使用pause,則將暫停程序,直到用戶按任一鍵后程序繼續執行。若要強行中止程序的運行,則可使用Ctrl+C命令。
1.8.2 選擇結構
在MATLAB中,選擇結構依照不同的判斷條件進行判斷,然后根據判斷的結果選擇某一種方法來解決某一個問題。
在MATLAB中,if語句有3種格式。
(1)單分支if語句。
if 條件語句組end當條件成立時,則執行語句組,執行完之后繼續執行if語句的后繼語句,若條件不成立,則直接執行if語句的后繼語句。
(2)條件判斷語句也是程序設計語言中流程控制語句之一。使用該語句,可以選擇執行指定的命令,MATLAB語言中的條件判斷語句是if-else-end語句。
雙分支if語句:
if 條件語句組1else語句組2end當條件成立時,執行語句組1,否則執行語句組2,語句組1或語句組2執行后,再執行if語句的后繼語句。
在程序設計中,也經常碰到需要進行多重邏輯選擇的問題,這時可以采用if-else-end語句的嵌套形式:
if〈邏輯判斷語句1〉邏輯值1為“真”時的執行語句 elseif〈邏輯判斷語句2〉邏輯值2為“真”時的執行語句 elseif〈邏輯判斷語句3〉 …… else當以上所有的邏輯值均為假時的執行語句
end
(3)多分支if語句。
用于實現多分支選擇結構。
(4)if-else-end語句所對應的是多重判斷選擇,而有時也會遇到多分支判斷選擇的問題。MATLAB語言為解決多分支判斷選擇提供了switch-case語句。
switch語句根據表達式的取值不同,分別執行不同的語句,其語句格式為:
switch 表達式case 表達式1語句組1case 表達式2語句組2……case 表達式m語句組motherwise語句組nend與其他的程序設計語言的switch-case語句不同的是,在MATLAB語言中,當其中一個case語句后的條件為真時,switch-case語句不對其后的case語句進行判斷,也就是說在MATLAB語言中,即使有多條case判斷語句為真,也只執行所遇到的第一條為真的語句。這樣就不必像C語言那樣,在每條case語句后加上break語句以防止繼續執行后面為真的case條件語句。
【例1-67】計算分段函數的值。
程序如下:
x=input('請輸入x的值:'); if x<=0y= (x+sqrt(pi))/exp(2) elsey=sin(x+sqrt(1+x*x))/2 end運行結果如下:
請輸入x的值:1 y =0.3325【例1-68】輸入三角形的三條邊,求面積。
程序如下:
A=input('請輸入三角形的三條邊:');if A(1)+A(2)>A(3) & A(1)+A(3)>A(2) & A(2)+A(3)>A(1)p=(A(1)+A(2)+A(3))/2;s=sqrt(p*(p-A(1))*(p-A(2))*(p-A(3)));disp(s);elsedisp('不能構成一個三角形。')end運行結果如下:
請輸入三角形的三條邊:[6 8 10]24 請輸入三角形的三條邊:[1 1 2]不能構成一個三角形。
【例1-69】輸入一個字符,若為大寫字母,則輸出其后繼字符,若為小寫字母,則輸出其前導字符,若為其他字符則原樣輸出。
程序如下:
E=input('','s');If E>='A' & E<='Z'disp(setstr(abs(E)+1));elseif E>='a'& E<='z'disp(setstr(abs(E)-1));elsedisp(c);end運行結果如下:
A B b a a ` * *【例1-70】switch語句示例。
程序如下:
a=input('a=?'); switch a case 1 disp('a=1');case {2,3,4} disp('a=2or3or4');case 5disp('a=5');otherwise disp('other value'); end;運行結果如下:
a=?3 a=2or3or4 a=?6 other value1.8.3 循環結構
在MATLAB中,循環結構就是在程序中某一條語句或多條語句重復多次的運行。
在MATLAB中,包含兩種循環結構:循環次數不確定的while循環,循環次數確定的for循環。這兩種不完全相同,各有特色。
(1)for循環結構。
for循環語句是流程控制語句中的基礎,使用該循環語句可以以指定的次數重復執行循環體內的語句,其格式為:
for 循環變量=表達式1:表達式2:表達式3
循環體語句
end
其中,表達式1的值為循環變量的初值,表達式2的值為步長,表達式3的值為循環變量的終值。步長為1時,表達式2可以省略。
(2)while循環結構。
while語句可以實現“當”型的循環結構,格式為:
while(表達式)MATLAB語句end其中,循環判斷語句為某種形式的邏輯判斷表達式,當該表達式的值為真時,就執行循環體內的語句;當表達式的邏輯值為假時,就退出當前的循環體。
在while循環語句中,必須有可以修改循環控制變量的命令,否則該循環語言將陷入死循環,除非循環語句中有控制退出循環的命令,如break語句、continue命令。當程序流程運行至該命令時,不論循環控制變量是否滿足循環判斷語句均將退出當前循環,執行循環后的其他語句。
【例1-71】水仙花數是指一個n位數(n≥3),它每個位上的數字的n次冪之和等于它本身。輸出全部水仙花數。
程序如下:
for m=100:999 m1=fix(m/100); %求m的百位數字 m2=rem(fix(m/10),10); %求m的十位數字 m3=rem(m,10); %求m的個位數字 if m==m1*m1*m1+m2*m2*m2+m3*m3*m3 disp(m) end end運行結果如下:
153370371407【例1-72】輸入若干個數,當輸入0時結束輸入,求這些數的平均值和它們的和。
程序如下:
sum=0; n=0; val=input('請輸入數字 (輸入0結束):'); while (val~=0)sum=sum+val;n=n+1;val=input('請輸入數字 (輸入0結束):'); end if (n > 0)summean=sum/n end運行結果如下:
請輸入數字 (輸入0結束):1 請輸入數字 (輸入0結束):2 請輸入數字 (輸入0結束):3 請輸入數字 (輸入0結束):4 請輸入數字 (輸入0結束):5 請輸入數字 (輸入0結束):0 sum =15 mean =31.8.4 程序流程控制語句及其他常用命令
1.break命令
在MATLAB中,break命令通常用于for或while循環語句中,與if語句一起使用,中止本次循環,跳出最內層循環。
【例1-73】break命令示例。
a=5;b=8; for i=1:4b=b+1;if i>2break %當if條件滿足時不再執行循環enda=a+2 end運行結果如下:
a =7 a =92.continue命令
通常用于for或while循環語句中,與if語句一起使用,達到跳過本次循環,去執行下一輪循環的目的。
【例1-74】continue命令示例。
a=5;b=8; for i=1:4b=b+1;if i<2continue %當if條件滿足時不再執行后面語句enda=a+2 %當i<2時不執行該語句 end運行結果如下:
a =7 a =9 a =113.try指令
try語句是MATLAB特有的語句,先試探性地執行語句1,如果出錯,就將錯誤信息存入系統保留變量lasterr中;然后再執行語句2,如果不出錯,就轉向執行end后面的語句。此語句可以提高程序的容錯能力,增加編程的靈活性。該指令的一般結構是:
【例1-75】已知某圖像文件,但不知其存儲格式為.bmp還是.jpg,試編程正確讀取該圖像文件。
trypicture=imread('tire.bmp','bmp');filename='tire.bmp'; catchpicture=imread('tire.tif','tif');filename='tire. tif '; end filename運行結果如下:
filename filename = tire.bmp【例1-76】先求兩矩陣的乘積,若出錯,則自動轉去求兩矩陣的點乘。
A=magic(2); B=[7,8;10,11]; tryC=A*B; catchC=A.*B; end C lasterr %顯示出錯原因運行結果如下:
C =37 4148 54 ans = SWITCH 表達式必須為標量或字符串常量總結
以上是生活随笔為你收集整理的《MATLAB图像处理375例》——1.8 MATLAB程序流程控制结构的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 《深入理解Hadoop(原书第2版)》—
- 下一篇: ROS机器人程序设计(原书第2版)3.4