官术网_书友最值得收藏!

3.1 程序結(jié)構(gòu)

MATLAB語言有三種常用的程序控制結(jié)構(gòu):順序結(jié)構(gòu)、選擇結(jié)構(gòu)和循環(huán)結(jié)構(gòu)。MATLAB語言里的任何復(fù)雜程序都可以由這三種基本結(jié)構(gòu)組成。

3.1.1 順序結(jié)構(gòu)

順序結(jié)構(gòu)是MATLAB語言程序的最基本的結(jié)構(gòu),是指按照程序中的語句排列順序依次執(zhí)行,每行語句是從左往右執(zhí)行,不同行語句是從上往下執(zhí)行。一般數(shù)據(jù)的輸入和輸出、數(shù)據(jù)的計算和處理程序都是順序結(jié)構(gòu)。順序結(jié)構(gòu)的基本流程如圖3-1所示,程序先執(zhí)行語句A,然后執(zhí)行語句B,最后執(zhí)行語句C。

圖3-1 順序結(jié)構(gòu)流程圖

1.?dāng)?shù)據(jù)的輸入

MATLAB語言要從鍵盤輸入數(shù)據(jù),可以使用input函數(shù),該函數(shù)的調(diào)用格式有如下兩種。

1)x=input('提示信息')

其中,提示信息表示字符串,用于提示用戶輸入什么樣的數(shù)據(jù),等待用戶從鍵盤輸入數(shù)據(jù),賦值給變量x。

例如,從鍵盤中輸入變量x,可以用下面的命令實現(xiàn):

執(zhí)行該語句時,命令行窗口顯示提示信息“輸入變量x:”,然后等待用戶從鍵盤輸入x的值。

2)str=input('提示信息','s')

其中,該格式用于用戶輸入一個字符串,賦值給字符變量str。

例如,用戶想從鍵盤輸入自己的名字,賦值給字符變量str,可以采用下面命令:

執(zhí)行該語句時,命令行窗口顯示提示信息“what's your name?”,然后等待用戶從鍵盤輸入字符變量str的值。

2.?dāng)?shù)據(jù)的輸出

MATLAB語言可以在命令窗口顯示輸出信息,可以用函數(shù)disp實現(xiàn),該函數(shù)的調(diào)用格式如下:

其中,輸出信息可以是字符串,也可以是矩陣信息。例如:

需要注意,用disp函數(shù)顯示矩陣信息將不顯示矩陣的變量名,輸出格式更緊湊,沒有空行。

【例3-1】 從鍵盤輸入abc的值,求解一元二次方程ax2bxc=0的根。

程序代碼如下:

程序運行結(jié)果是:

再一次運行程序后的結(jié)果是:

由上面程序結(jié)果可知,MATLAB語言的數(shù)據(jù)輸入、數(shù)據(jù)處理和數(shù)據(jù)輸出命令都是按照順序結(jié)構(gòu)執(zhí)行的。

3.1.2 選擇結(jié)構(gòu)

MATLAB語言的選擇結(jié)構(gòu)是根據(jù)選定的條件成立或者不成立,分別執(zhí)行不同的語句。選擇結(jié)構(gòu)有下面三種常用語句:if語句、switch語句和try語句。

1.if語句

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

1)單項選擇結(jié)構(gòu)

單項選擇語句的格式如下:

當(dāng)條件成立時,執(zhí)行語句組,執(zhí)行完后繼續(xù)執(zhí)行end后面的語句;若條件不成立,則直接執(zhí)行end后面的語句。單項選擇程序結(jié)構(gòu)流程圖如圖3-2所示。

圖3-2 單項選擇結(jié)構(gòu)流程圖

【例3-2】 從鍵盤輸入一個值x,判斷當(dāng)x>0時,計算的值并顯示。

程序代碼如下:

程序運行結(jié)果如下:

再一次運行程序,輸入x=﹣2,程序結(jié)果是:

由上面的程序結(jié)果可知,當(dāng)條件不滿足時,就直接執(zhí)行end后面的語句。

2)雙項選擇結(jié)構(gòu)

雙項選擇語句的格式如下:

當(dāng)條件1成立時,執(zhí)行語句組1,否則執(zhí)行語句組2,之后繼續(xù)執(zhí)行end后面的語句。雙項選擇程序結(jié)構(gòu)流程圖如圖3-3所示。

圖3-3 雙項選擇結(jié)構(gòu)流程圖

【例3-3】 從鍵盤輸入一個值x,計算下面分段函數(shù)的值并顯示。

程序代碼如下:

程序運行結(jié)果是:

再一次運行程序,輸入x=﹣2,程序結(jié)果是:

該例題如果用單項選擇結(jié)構(gòu)也可以實現(xiàn),程序代碼如下:

3)多項選擇結(jié)構(gòu)

多項選擇語句的格式如下:

當(dāng)條件1成立時,執(zhí)行語句組1;否則當(dāng)條件2成立時,執(zhí)行語句組2;以此類推,最后執(zhí)行end后面的語句。需要注意,if和end必須配對使用。多項選擇程序的結(jié)構(gòu)流程圖如圖3-4所示。

圖3-4 多項選擇結(jié)構(gòu)流程圖

【例3-4】 從鍵盤輸入一個值x,用下面的分段函數(shù)實現(xiàn)符號函數(shù)的功能。

程序代碼如下:

程序運行結(jié)果如下:

若用MATLAB的符號函數(shù)sign驗證,可以得到同樣的結(jié)果:

2.switch語句

在MATLAB語言中,switch語句也用于多項選擇。根據(jù)表達式的值的不同,分別執(zhí)行不同的語句組。該語句的格式如下:

switch語句結(jié)構(gòu)流程圖如圖3-5所示。當(dāng)表達式的值等于表達式1的值時,執(zhí)行語句組1;當(dāng)表達式的值等于表達式2的值時,執(zhí)行語句組2;以此類推,當(dāng)表達式的值等于表達式m的值時,執(zhí)行語句組m;當(dāng)表達式的值不等于case所列表達式的值時,執(zhí)行語句組n。需要注意,當(dāng)任意一個case表達式為真,執(zhí)行完其后的語句組,直接執(zhí)行end后面的語句。

圖3-5 switch語句結(jié)構(gòu)流程圖

【例3-5】 某商場“十一”假期搞促銷活動,對顧客所購商品總價打折,折扣率標(biāo)準(zhǔn)如下,從鍵盤輸入顧客所購商品總價,計算打折后總價。

程序代碼如下:

num2cell函數(shù)的功能是將數(shù)值矩陣轉(zhuǎn)換為單元矩陣。程序運行結(jié)果如下:

3.try語句

在MATLAB語言里,try語句是一種試探性執(zhí)行語句,該語句的格式如下:

try語句先試探執(zhí)行語句組1,如果語句組1在執(zhí)行過程中出錯,則將錯誤信息賦值給系統(tǒng)變量lasterr,并轉(zhuǎn)去執(zhí)行語句組2。

【例3-6】 試用try語句求函數(shù)y=x?sin(x)的值,自變量的范圍為0≤x≤pi,步長為pi/10。

程序代碼如下:

程序運行結(jié)果如下:

3.1.3 循環(huán)結(jié)構(gòu)

循環(huán)結(jié)構(gòu)是MATLAB語言的一種非常重要的程序結(jié)構(gòu),是按照給定的條件,重復(fù)執(zhí)行指定的語句。MATLAB語言提供兩種循環(huán)結(jié)構(gòu)語句:循環(huán)次數(shù)確定的for循環(huán)語句和循環(huán)次數(shù)不確定的while循環(huán)語句。

1.for循環(huán)語句

for循環(huán)語句是MATLAB語言的一種重要的程序結(jié)構(gòu),是以指定次數(shù)重復(fù)執(zhí)行循環(huán)體內(nèi)的語句。for循環(huán)語句的格式如下:

其中

(1)表達式1的值為循環(huán)變量的初始值,表達式2的值為步長,表達式3的值為循環(huán)變量的終值;

(2)當(dāng)步長為1時,可以省略表達式2;

(3)當(dāng)步長為負值時,初值大于終值;

(4)循環(huán)體內(nèi)不能對循環(huán)變量重新設(shè)置;

(5)for循環(huán)允許嵌套使用;

(6)for和end配套使用,且小寫。

for循環(huán)語句的流程圖如圖3-6所示。首先計算3個表達式的值,將表達式1的值賦給循環(huán)變量k,然后判斷k值是否介于表達式1和表達式3的值之間,如果不是,結(jié)束循環(huán),如果是,則執(zhí)行循環(huán)體語句,k增加一個表達式2的步長,然后再判斷k值是否介于表達式1和表達式3的值之間,直到條件不滿足,結(jié)束循環(huán)為止。

【例3-7】 利用for循環(huán)語句,求解1~100的數(shù)字之和。

程序代碼如下:

圖3-6 for循環(huán)語句流程圖

程序運行結(jié)果如下:

【例3-8】 利用for循環(huán)語句,驗證當(dāng)n等于1000和1 000 000時,y的值。

程序代碼如下:

程序運行結(jié)果如下:

MATLAB是一種基于矩陣的語言,為了提高程序執(zhí)行速度,也可以用向量的點運算來代替循環(huán)操作。可以用下面的程序代替:

程序運行結(jié)果:

由以上程序結(jié)果可知,當(dāng)n都取值1 000 000時,用后一種方法編寫的程序比前一種方法的運算速度快很多。

循環(huán)的嵌套是指在一個循環(huán)結(jié)構(gòu)的循環(huán)體中又包含另一個循環(huán)結(jié)構(gòu),或稱為多重循環(huán)結(jié)構(gòu)。設(shè)計多重循環(huán)時要注意外循環(huán)和內(nèi)循環(huán)之間的關(guān)系,以及各循環(huán)體語句的放置位置。總的循環(huán)次數(shù)是外循環(huán)次數(shù)與內(nèi)循環(huán)次數(shù)的乘積。可以用多個for和end配套實現(xiàn)多重循環(huán)。

【例3-9】 利用for循環(huán)的嵌套語句,求解xij)=i2j2i∈[1:4],j∈[5:1]。

程序代碼如下:

程序運行結(jié)果如下:

【例3-10】 若一個整數(shù)等于它的各個真因子之和,則稱該數(shù)為完數(shù)。利用for雙重循環(huán)語句,求解[1,10000]之間的所有完數(shù)。

程序代碼如下:

程序運行結(jié)果如下:

2.while循環(huán)語句

while循環(huán)語句是MATLAB語言的一種重要的程序結(jié)構(gòu),是在滿足條件下重復(fù)執(zhí)行循環(huán)體內(nèi)的語句,循環(huán)次數(shù)一般是不確定的。while循環(huán)語句的格式如下:

其中,當(dāng)條件表達式為真,就執(zhí)行循環(huán)體語句;否則,就結(jié)束循環(huán)。while和end匹配使用。

while循環(huán)結(jié)構(gòu)的流程圖如圖3-7所示。當(dāng)條件表達式為真,執(zhí)行循環(huán)體語句,修改循環(huán)控制變量,再次判斷表達式是否為真,直至條件表達式為假,跳出循環(huán)體。

圖3-7 while循環(huán)結(jié)構(gòu)流程圖

【例3-11】 利用while循環(huán)語句,求解sum=1+2+…+n≥800時,最小正整數(shù)n的值。

程序代碼如下:

程序運行結(jié)果如下:

【例3-12】 所謂水仙花數(shù)是指一個三位數(shù),各位數(shù)字的立方和等于該數(shù)本身,例如153=1 3+5 3+3 3,所以153是一個水仙花數(shù)。試用while循環(huán)語句編程找出100~999所有的水仙花數(shù)。

程序代碼如下:

程序運行結(jié)果如下:

3.1.4 程序控制命令

MATLAB語言有許多程序控制命令,主要有pause暫停命令、continue繼續(xù)命令、break中斷命令和return退出命令等。

1.pause命令

在MATLAB語言中,pause命令可以使程序運行停止,等待用戶按任意鍵繼續(xù),也可設(shè)定暫停時間。該命令的調(diào)用格式如下:

2.continue命令

MATLAB語言的continue命令一般用于for或while循環(huán)語句中,與if語句配套使用,達到跳出本次循環(huán),執(zhí)行下次循環(huán)的目的。

例如:

程序運行結(jié)果如下:

3.break命令

MATLAB語言的break命令一般用于for或while循環(huán)語句中,與if語句配套使用終止循環(huán),或跳出最內(nèi)層循環(huán)。

例如:

程序運行結(jié)果如下:

4.return命令

MATLAB語言的return命令一般用于直接退出程序,與if語句配套使用。

例如:

程序運行結(jié)果如下:

主站蜘蛛池模板: 阆中市| 北碚区| 南京市| 乐山市| 雷山县| 嘉祥县| 拉孜县| 河北区| 清河县| 任丘市| 大城县| 察隅县| 侯马市| 昌图县| 南京市| 安西县| 察雅县| 云安县| 南安市| 张北县| 城口县| 侯马市| 东兰县| 金溪县| 托克逊县| 乐东| 松潘县| 丰台区| 周口市| 绥芬河市| 平顶山市| 镇坪县| 阳谷县| 宁武县| 南京市| 张家港市| 隆子县| 泾阳县| 丹凤县| 阜康市| 锡林浩特市|