日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

《MATLAB图像处理375例》——1.8 MATLAB程序流程控制结构

發(fā)布時間:2024/1/17 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 《MATLAB图像处理375例》——1.8 MATLAB程序流程控制结构 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

本節(jié)書摘來自異步社區(qū)《MATLAB圖像處理375例》一書中的第1章,第1.8節(jié),作者:MATLAB技術(shù)聯(lián)盟著,更多章節(jié)內(nèi)容可以訪問云棲社區(qū)“異步社區(qū)”公眾號查看

1.8 MATLAB程序流程控制結(jié)構(gòu)

MATLAB圖像處理375例
作為計算機語言,編程是必需的,編程靠的是程序控制語句。計算機語言程序控制模式主要有三大類:順序結(jié)構(gòu)、選擇結(jié)構(gòu)和循環(huán)結(jié)構(gòu)。這一點MATLAB與其他編程語言完全一致。

1.8.1 順序結(jié)構(gòu)
順序結(jié)構(gòu)是指所有組成程序源代碼的語句按照由上至下的次序依次執(zhí)行,直到程序的最后一個語句。這種程序的優(yōu)點是容易編制;缺點是結(jié)構(gòu)單一,能夠?qū)崿F(xiàn)的功能有限。

在MATLAB語言的函數(shù)中,變量主要有輸入變量、輸出變量及函數(shù)內(nèi)所使用的變量。

(1)數(shù)據(jù)輸入。

從鍵盤輸入數(shù)據(jù),可以使用input函數(shù)來進行,該函數(shù)的調(diào)用格式為:

A=input(提示信息,選項);

其中提示信息為一個字符串,用于提示用戶輸入什么樣的數(shù)據(jù)。

如果在input函數(shù)調(diào)用時采用's'選項,則允許用戶輸入一個字符串。例如,想輸入一個人的姓名,可采用命令:

xm=input('hello world','s');

(2)數(shù)據(jù)輸出。

MATLAB提供的命令窗口輸出函數(shù)主要有disp函數(shù),其調(diào)用格式為:

disp(輸出項)

其中輸出項既可以為字符串,也可以為矩陣。

【例1-64】數(shù)據(jù)輸出示例。

A='MATLAB'; disp(A)

運行結(jié)果如下:

MATLAB

【例1-65】輸入x,y的值,并將它們的值互換后輸出。

x=input('Input x.'); y=input('Input y.'); z=x; x=y; y=z; disp(x); disp(y);

運行結(jié)果如下:

Input x.1 Input y.221

【例1-66】對任一自然數(shù)n,按如下法則進行運算:若n為偶數(shù),則將n除2;若n為奇數(shù),則將n乘2加1。將運算結(jié)果按上面法則繼續(xù)運算,重復(fù)若干次后計算結(jié)果最終是1。

n=input('input n=');  %輸入數(shù)據(jù) while n~=1      r=rem(n,2);  %求n/2的余數(shù)if r ==0n=n/2  %第一種操作elsen=2*n+1  %第二種操作end end

運行結(jié)果如下:

input n=5 n =32 n =16 n =8 n =4 n =2 n =1

(3)程序的暫停。

暫停程序的執(zhí)行可以使用pause函數(shù),其調(diào)用格式為:

pause(延遲秒數(shù))

如果省略延遲時間,直接使用pause,則將暫停程序,直到用戶按任一鍵后程序繼續(xù)執(zhí)行。若要強行中止程序的運行,則可使用Ctrl+C命令。

1.8.2 選擇結(jié)構(gòu)
在MATLAB中,選擇結(jié)構(gòu)依照不同的判斷條件進行判斷,然后根據(jù)判斷的結(jié)果選擇某一種方法來解決某一個問題。

在MATLAB中,if語句有3種格式。

(1)單分支if語句。

if 條件語句組end

當(dāng)條件成立時,則執(zhí)行語句組,執(zhí)行完之后繼續(xù)執(zhí)行if語句的后繼語句,若條件不成立,則直接執(zhí)行if語句的后繼語句。

(2)條件判斷語句也是程序設(shè)計語言中流程控制語句之一。使用該語句,可以選擇執(zhí)行指定的命令,MATLAB語言中的條件判斷語句是if-else-end語句。

雙分支if語句:

if 條件語句組1else語句組2end

當(dāng)條件成立時,執(zhí)行語句組1,否則執(zhí)行語句組2,語句組1或語句組2執(zhí)行后,再執(zhí)行if語句的后繼語句。

在程序設(shè)計中,也經(jīng)常碰到需要進行多重邏輯選擇的問題,這時可以采用if-else-end語句的嵌套形式:

if〈邏輯判斷語句1〉邏輯值1為“真”時的執(zhí)行語句 elseif〈邏輯判斷語句2〉邏輯值2為“真”時的執(zhí)行語句 elseif〈邏輯判斷語句3〉 …… else

當(dāng)以上所有的邏輯值均為假時的執(zhí)行語句
end
(3)多分支if語句。

if 條件1語句組1elseif 條件2語句組2……elseif 條件m語句組melse語句組nend

用于實現(xiàn)多分支選擇結(jié)構(gòu)。

(4)if-else-end語句所對應(yīng)的是多重判斷選擇,而有時也會遇到多分支判斷選擇的問題。MATLAB語言為解決多分支判斷選擇提供了switch-case語句。

switch語句根據(jù)表達式的取值不同,分別執(zhí)行不同的語句,其語句格式為:

switch 表達式case 表達式1語句組1case 表達式2語句組2……case 表達式m語句組motherwise語句組nend

與其他的程序設(shè)計語言的switch-case語句不同的是,在MATLAB語言中,當(dāng)其中一個case語句后的條件為真時,switch-case語句不對其后的case語句進行判斷,也就是說在MATLAB語言中,即使有多條case判斷語句為真,也只執(zhí)行所遇到的第一條為真的語句。這樣就不必像C語言那樣,在每條case語句后加上break語句以防止繼續(xù)執(zhí)行后面為真的case條件語句。

【例1-67】計算分段函數(shù)的值。

程序如下:

x=input('請輸入x的值:'); if x<=0y= (x+sqrt(pi))/exp(2) elsey=sin(x+sqrt(1+x*x))/2 end

運行結(jié)果如下:

請輸入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('不能構(gòu)成一個三角形。')end

運行結(jié)果如下:

請輸入三角形的三條邊:[6 8 10]24 請輸入三角形的三條邊:[1 1 2]

不能構(gòu)成一個三角形。
【例1-69】輸入一個字符,若為大寫字母,則輸出其后繼字符,若為小寫字母,則輸出其前導(dǎo)字符,若為其他字符則原樣輸出。

程序如下:

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

運行結(jié)果如下:

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;

運行結(jié)果如下:

a=?3 a=2or3or4 a=?6 other value

1.8.3 循環(huán)結(jié)構(gòu)
在MATLAB中,循環(huán)結(jié)構(gòu)就是在程序中某一條語句或多條語句重復(fù)多次的運行。

在MATLAB中,包含兩種循環(huán)結(jié)構(gòu):循環(huán)次數(shù)不確定的while循環(huán),循環(huán)次數(shù)確定的for循環(huán)。這兩種不完全相同,各有特色。

(1)for循環(huán)結(jié)構(gòu)。

for循環(huán)語句是流程控制語句中的基礎(chǔ),使用該循環(huán)語句可以以指定的次數(shù)重復(fù)執(zhí)行循環(huán)體內(nèi)的語句,其格式為:

for 循環(huán)變量=表達式1:表達式2:表達式3
    循環(huán)體語句
  end
其中,表達式1的值為循環(huán)變量的初值,表達式2的值為步長,表達式3的值為循環(huán)變量的終值。步長為1時,表達式2可以省略。

(2)while循環(huán)結(jié)構(gòu)。

while語句可以實現(xiàn)“當(dāng)”型的循環(huán)結(jié)構(gòu),格式為:

while(表達式)MATLAB語句end

其中,循環(huán)判斷語句為某種形式的邏輯判斷表達式,當(dāng)該表達式的值為真時,就執(zhí)行循環(huán)體內(nèi)的語句;當(dāng)表達式的邏輯值為假時,就退出當(dāng)前的循環(huán)體。

在while循環(huán)語句中,必須有可以修改循環(huán)控制變量的命令,否則該循環(huán)語言將陷入死循環(huán),除非循環(huán)語句中有控制退出循環(huán)的命令,如break語句、continue命令。當(dāng)程序流程運行至該命令時,不論循環(huán)控制變量是否滿足循環(huán)判斷語句均將退出當(dāng)前循環(huán),執(zhí)行循環(huán)后的其他語句。

【例1-71】水仙花數(shù)是指一個n位數(shù)(n≥3),它每個位上的數(shù)字的n次冪之和等于它本身。輸出全部水仙花數(shù)。

程序如下:

for m=100:999 m1=fix(m/100);          %求m的百位數(shù)字 m2=rem(fix(m/10),10);      %求m的十位數(shù)字 m3=rem(m,10);          %求m的個位數(shù)字 if m==m1*m1*m1+m2*m2*m2+m3*m3*m3 disp(m) end end

運行結(jié)果如下:

153370371407

【例1-72】輸入若干個數(shù),當(dāng)輸入0時結(jié)束輸入,求這些數(shù)的平均值和它們的和。

程序如下:

sum=0; n=0; val=input('請輸入數(shù)字 (輸入0結(jié)束):'); while (val~=0)sum=sum+val;n=n+1;val=input('請輸入數(shù)字 (輸入0結(jié)束):'); end if (n > 0)summean=sum/n end

運行結(jié)果如下:

請輸入數(shù)字 (輸入0結(jié)束):1 請輸入數(shù)字 (輸入0結(jié)束):2 請輸入數(shù)字 (輸入0結(jié)束):3 請輸入數(shù)字 (輸入0結(jié)束):4 請輸入數(shù)字 (輸入0結(jié)束):5 請輸入數(shù)字 (輸入0結(jié)束):0 sum =15 mean =3

1.8.4 程序流程控制語句及其他常用命令
1.break命令
在MATLAB中,break命令通常用于for或while循環(huán)語句中,與if語句一起使用,中止本次循環(huán),跳出最內(nèi)層循環(huán)。

【例1-73】break命令示例。

a=5;b=8; for i=1:4b=b+1;if i>2break   %當(dāng)if條件滿足時不再執(zhí)行循環(huán)enda=a+2 end

運行結(jié)果如下:

a =7 a =9

2.continue命令
通常用于for或while循環(huán)語句中,與if語句一起使用,達到跳過本次循環(huán),去執(zhí)行下一輪循環(huán)的目的。

【例1-74】continue命令示例。

a=5;b=8; for i=1:4b=b+1;if i<2continue   %當(dāng)if條件滿足時不再執(zhí)行后面語句enda=a+2      %當(dāng)i<2時不執(zhí)行該語句 end

運行結(jié)果如下:

a =7 a =9 a =11

3.try指令
try語句是MATLAB特有的語句,先試探性地執(zhí)行語句1,如果出錯,就將錯誤信息存入系統(tǒng)保留變量lasterr中;然后再執(zhí)行語句2,如果不出錯,就轉(zhuǎn)向執(zhí)行end后面的語句。此語句可以提高程序的容錯能力,增加編程的靈活性。該指令的一般結(jié)構(gòu)是:

try 語句1 catch 語句2 end

【例1-75】已知某圖像文件,但不知其存儲格式為.bmp還是.jpg,試編程正確讀取該圖像文件。

trypicture=imread('tire.bmp','bmp');filename='tire.bmp'; catchpicture=imread('tire.tif','tif');filename='tire. tif '; end filename

運行結(jié)果如下:

filename filename = tire.bmp

【例1-76】先求兩矩陣的乘積,若出錯,則自動轉(zhuǎn)去求兩矩陣的點乘。

A=magic(2); B=[7,8;10,11]; tryC=A*B; catchC=A.*B; end C lasterr  %顯示出錯原因

運行結(jié)果如下:

C =37  4148  54 ans = SWITCH 表達式必須為標量或字符串常量

總結(jié)

以上是生活随笔為你收集整理的《MATLAB图像处理375例》——1.8 MATLAB程序流程控制结构的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。