![MATLAB基础及应用(第5版)](https://wfqqreader-1252317822.image.myqcloud.com/cover/30/36862030/b_36862030.jpg)
2.2 程序流程语句
MATLAB的程序流程语句主要包括选择结构和循环结构两种语句。选择结构是根据给定的条件成立或不成立,分别执行不同的语句,主要有 if语句、switch 语句和 try 语句;循环结构是根据给定的条件来决定执行语句的次数,主要有 while 语句和 for 语句。MATLAB的程序流程语句都以end为结束标志。
2.2.1 if语句
MATLAB语言中,if语句有3种不同的格式。
1.单分支if语句
最简单的选择结构语句,其基本格式为:
![](https://epubservercos.yuewen.com/510DF2/19549638008901206/epubprivate/OEBPS/Images/978-7-111-64601-3_45_01.jpg?sign=1738836023-M3vTJivFlcxh9gSX1ais9iH2CWIzdpcI-0-92adc866b7a901f2471fdf970c07e162)
说明:表达式多为关系或逻辑表达式。如果表达式为真(非零),就执行if和end之间的语句组,然后再执行end之后的语句;如果表达式为假(零),就直接执行end之后的语句。
【例2-2】 输入一个数,如果此数小于10就输出这个数,否则没有输出。
![](https://epubservercos.yuewen.com/510DF2/19549638008901206/epubprivate/OEBPS/Images/978-7-111-64601-3_45_02.jpg?sign=1738836023-8lZRQK1MXAZyEpdx9D1wzIpArorjY2oL-0-9988e799ab383bb5b0b3c1c0e9fc3fda)
单击 〈F5〉 键运行后激活命令行窗口,通过键盘输入数字 “9”。
![](https://epubservercos.yuewen.com/510DF2/19549638008901206/epubprivate/OEBPS/Images/978-7-111-64601-3_45_03.jpg?sign=1738836023-Fd835bxMSgdiPZiiqrXiysKOErZ1ZuPg-0-9310e6965800c31300931be235194afc)
按 〈Enter〉 键后运行结果为:
![](https://epubservercos.yuewen.com/510DF2/19549638008901206/epubprivate/OEBPS/Images/978-7-111-64601-3_45_04.jpg?sign=1738836023-ZcwO1TX4nb1KSEgmaDoqYNfwhwDrmMMx-0-3d68fa46fd171de43c724c7727e730a6)
再次运行M文件后,激活命令行窗口,通过键盘输入数字 “15”。
![](https://epubservercos.yuewen.com/510DF2/19549638008901206/epubprivate/OEBPS/Images/978-7-111-64601-3_45_05.jpg?sign=1738836023-mWrFTvD7BFxViYsZ1R4IzZLooymJ8Y5j-0-8c4657364dd15547325956763e9d8b61)
按 〈Enter〉 键后,没有输出。
![](https://epubservercos.yuewen.com/510DF2/19549638008901206/epubprivate/OEBPS/Images/978-7-111-64601-3_45_06.jpg?sign=1738836023-DDOFTkG3lJIdM2HTR0qELKBReFt7ZQpL-0-1278c9da41573567ec3cd78751baa951)
2.双分支if语句
前面提供的单分支if语句只能处理较简单的条件,功能不全面。为此MATLAB还提供了双分支if语句结构。其基本格式为:
![](https://epubservercos.yuewen.com/510DF2/19549638008901206/epubprivate/OEBPS/Images/978-7-111-64601-3_45_07.jpg?sign=1738836023-1BrhravwPHS2zbXmZdUTzjyEj67Lj8OP-0-8e0a5fcf725afef4d0c94c9df8470856)
说明:如果表达式为真(非零),则执行语句组1,再执行end 后面的语句;如果表达式为假(为零),则先执行语句组2,再执行end后面的语句。
【例2-3】 给定两个实数,按代数值的大小输出其中的大数。
![](https://epubservercos.yuewen.com/510DF2/19549638008901206/epubprivate/OEBPS/Images/978-7-111-64601-3_45_08.jpg?sign=1738836023-cOBhwFVCqt9pivkbNC1P750QA6EdikOY-0-4b3d2f3433074cdea29f9b4bcffb428d)
![](https://epubservercos.yuewen.com/510DF2/19549638008901206/epubprivate/OEBPS/Images/978-7-111-64601-3_46_01.jpg?sign=1738836023-869yB0xiqGig5MD4U82fgb0oEBotetNt-0-d599469ec388c4c10ab4d32258c65cb4)
单击 〈F5〉 键运行后激活命令行窗口,通过键盘输入数字 “9”,单击 〈Enter〉 键后再输入数字 “6”,观看运行结果为:
![](https://epubservercos.yuewen.com/510DF2/19549638008901206/epubprivate/OEBPS/Images/978-7-111-64601-3_46_02.jpg?sign=1738836023-MWvcBuHVmiy5EjdKknEUGLieNunvcDgR-0-879723997bc77dff7bf47153b67c6a2a)
3.多分支if语句
当有3个或更多的选择时,可采用if语句的嵌套,也可以采用多分支if语句。其基本格式为:
![](https://epubservercos.yuewen.com/510DF2/19549638008901206/epubprivate/OEBPS/Images/978-7-111-64601-3_46_03.jpg?sign=1738836023-f0xa5X9OGwDiqapp9er36QuQo4YIlDUW-0-51c64695ccc72becc31ccff46c43c093)
说明:先判断表达式1的值,若为真,则执行语句组1,执行完语句组1 后,跳出该选择结构,继续执行end后的语句;当表达式1的值为假时,跳过语句组1,进而判断表达式2,若为真,则执行语句组2,然后继续执行end后的语句;如果表达式 2 的值也为假,则跳过语句组2,继续判断表达式3,如此下去,若所有表达式都为假,则执行else后的语句组n+1,再执行end后的语句。else语句可以缺省。
【例2-4】 将百分制的学生成绩转化为五级制的成绩输出。
![](https://epubservercos.yuewen.com/510DF2/19549638008901206/epubprivate/OEBPS/Images/978-7-111-64601-3_46_04.jpg?sign=1738836023-5NwrjLEeJPw0DL5BCjTX1wP4mLqY7IF4-0-fa65b967a75bbf06a0d490ce912b3e2b)
![](https://epubservercos.yuewen.com/510DF2/19549638008901206/epubprivate/OEBPS/Images/978-7-111-64601-3_47_01.jpg?sign=1738836023-v3iPE9B8O3o9YosH1pLfnyZ9OX1TC2ed-0-61b59980c1fa93c924e89b1490bf7814)
单击 〈F5〉 键运行后激活命令行窗口,通过键盘输入数字 “75”,单击 〈Enter〉 键后观看运行结果为:
![](https://epubservercos.yuewen.com/510DF2/19549638008901206/epubprivate/OEBPS/Images/978-7-111-64601-3_47_02.jpg?sign=1738836023-kfGR8kCLGPgXPKhgSvK0wGDsVhbA4uHV-0-013e72bbe3da247c9b84ba8aa194d43d)
2.2.2 switch语句
if语句只有两个分支可供选择,如果分支较多,则嵌套的if语句层数多,程序冗长而且可读性降低,这种情况可使用switch语。switch语句是多分支选择语句,其基本格式为:
![](https://epubservercos.yuewen.com/510DF2/19549638008901206/epubprivate/OEBPS/Images/978-7-111-64601-3_47_03.jpg?sign=1738836023-nQ1BhgwGhGKVBI6Jq1oALErZJWCQwcu2-0-bd3641a9c02c15de971922ee1a1b3232)
说明:先计算表达式的值,再按顺序与case语句后面的数组值进行比较,如果相等则执行该组语句,然后执行end后的语句,不再继续比较。当表达式的值不等于任何一个 case语句后面的数组值时,程序将执行otherwise语句后的语句组,再执行 end后的语句。
注意:这种情况下缺省otherwise语句,程序会提示出错。
【例2-5】 某商场对顾客所购买的商品实行打折销售,标准如下(商品价格用price 来表示):
![](https://epubservercos.yuewen.com/510DF2/19549638008901206/epubprivate/OEBPS/Images/978-7-111-64601-3_47_04.jpg?sign=1738836023-DFA5sO26STqUsMekAbkkvnWtFCYwke5f-0-e12ae4fc7fa741089136d3c13973d49e)
输入某件商品的价格,求所售商品的实际销售价格。
![](https://epubservercos.yuewen.com/510DF2/19549638008901206/epubprivate/OEBPS/Images/978-7-111-64601-3_47_05.jpg?sign=1738836023-5355sYUlaPINlaCtKhnRFd93Qi2mgv2A-0-14c7242b4397ab7e253c947bbc5c2c6a)
![](https://epubservercos.yuewen.com/510DF2/19549638008901206/epubprivate/OEBPS/Images/978-7-111-64601-3_48_01.jpg?sign=1738836023-0Y3aUyWCKO6IjVFRekvUh1cggcbrumNV-0-02202752e705604ecf4aac52237b392e)
运行后激活命令行窗口,通过键盘输入数字 “2000”,观看运行结果为:
![](https://epubservercos.yuewen.com/510DF2/19549638008901206/epubprivate/OEBPS/Images/978-7-111-64601-3_48_02.jpg?sign=1738836023-I3p6tyWZRG3PanHQDSNnETZqtp2Rztd9-0-94102d03a6a0ee9bd960a62136ed09de)
2.2.3 while语句
while语句是条件循环语句,在条件(多为关系表达式)控制下重复执行,直到条件不成立为止。while循环的一般形式是:
![](https://epubservercos.yuewen.com/510DF2/19549638008901206/epubprivate/OEBPS/Images/978-7-111-64601-3_48_03.jpg?sign=1738836023-6VWh8W78hGluorz025aSewOujckvrYrM-0-7aca6b1e66a0c77802e55fc0b1182f01)
说明:先计算表达式的值,如果非零,语句体就执行一次;执行完毕再次计算表达式的值,如果仍然非零,语句体就再执行一次;如此循环,直到表达式的值为零。如果表达式的值总是非零,该循环将无休止地进行(即死循环),程序设计时一定要避免。
【例2-6】 求1+2+3+…+100的和。
![](https://epubservercos.yuewen.com/510DF2/19549638008901206/epubprivate/OEBPS/Images/978-7-111-64601-3_48_04.jpg?sign=1738836023-58pnB3zwdkQz2gyjyan9th9zxLm7aZQP-0-af280528eb5eb9eec9564da86f1a5d72)
![](https://epubservercos.yuewen.com/510DF2/19549638008901206/epubprivate/OEBPS/Images/978-7-111-64601-3_49_01.jpg?sign=1738836023-JgDsKwLwEKZJE6SGMYbaJpsnsUewJP8U-0-80708e61b7118eadd1291f6e692f35a7)
运行后激活命令行窗口,观看运行结果为:
![](https://epubservercos.yuewen.com/510DF2/19549638008901206/epubprivate/OEBPS/Images/978-7-111-64601-3_49_02.jpg?sign=1738836023-MMwcVcGOXS8FBsrd4yc9urXweRlwTUPF-0-5089e8f094f2b944cfd30153b9fecd3b)
2.2.4 for语句
for语句为计数循环语句,在许多情况下,循环条件是有规律变化的,通常把循环条件初值、终值和变化步长放在循环语句的开头,这种形式就是for语句的循环结构。for循环的一般形式如下:
![](https://epubservercos.yuewen.com/510DF2/19549638008901206/epubprivate/OEBPS/Images/978-7-111-64601-3_49_03.jpg?sign=1738836023-1VYs7xouZZltYQ53RoSt0VoT2YS0mp8C-0-9af1a259fd60bc89d0faaee4a1501c72)
说明:表达式1的值是循环变量的初值,表达式2的值是循环步长,表达式3的值是循环变量的终值。初值、步长和终值可以取整数、小数、正数和负数,步长可以缺省,默认值为1。
【例2-7】 利用for语句,求解例2-6。
![](https://epubservercos.yuewen.com/510DF2/19549638008901206/epubprivate/OEBPS/Images/978-7-111-64601-3_49_04.jpg?sign=1738836023-vENMWVL2ykkOCEhauEVSszNYwpCd4hbH-0-4c63393f458e8cc271564a22db704be7)
运行后激活命令行窗口,观看运行结果为:
![](https://epubservercos.yuewen.com/510DF2/19549638008901206/epubprivate/OEBPS/Images/978-7-111-64601-3_49_05.jpg?sign=1738836023-X0JHuOiETMJI7UZaTIjGJxgdlXZJEl0U-0-a2e1121557f20b70e35344e2556c39e6)
for语句与while语句的区别:已知循环次数时使用 for 语句,不知道循环次数时使用while语句。例如在100本书中找到其中一本有特殊标记的书,不知道要看多少本书才会找到,需要用while语句,循环的条件是找到书为止(可能看两本就找到了);如果要在这100本书中挑出全部有破损的书,要用for循环,因为需要每本都看,即看100次。
2.2.5 循环的嵌套
![](https://epubservercos.yuewen.com/510DF2/19549638008901206/epubprivate/OEBPS/Images/978-7-111-64601-3_49_06.jpg?sign=1738836023-jYX4RphUTmbFUMpWz8L8HmM1x4w6bFYi-0-67ec367bc195d54fba876ec6567aecbe)
如果一个循环结构的循环体又包括一个循环结构就称为循环的嵌套,或称为多重循环。任一种循环语句的循环体部分都可以包含另一个循环语句,多重循环嵌套的层数可以是任意的。习惯上按照嵌套层数,分别叫作二重循环、三重循环等。处于内部的循环叫作内循环,处于外部的循环叫作外循环。在设计多重循环时,要特别注意内、外循环之间的关系,以及语句放置次序,不要搞错。
【例2-8】 有一数列:11+12+13…+110+21+22+23+…+210+31+32+33+…+310 ,求这些项的和。
![](https://epubservercos.yuewen.com/510DF2/19549638008901206/epubprivate/OEBPS/Images/978-7-111-64601-3_50_01.jpg?sign=1738836023-vi0MlZr9qL4OJkWiOnWc7S4AH9riUhP9-0-33e213217aba03b439d15a0e211b3345)
运行后激活命令行窗口,观看运行结果为:
![](https://epubservercos.yuewen.com/510DF2/19549638008901206/epubprivate/OEBPS/Images/978-7-111-64601-3_50_02.jpg?sign=1738836023-uK3OLrmzBJYjXnBuOYMoteAf3i5kU6A1-0-a7a23444ec3d4c9394d92b4157947c85)
注意:在嵌套过程中每一个for都必须与其下方最近的一个end相匹配,否则程序将出错。
2.2.6 其他语句
1.continue语句
continue语句用于控制for循环或while循环跳过某些执行语句,当出现continue语句时,则跳过循环体中所有剩余的语句,继续下一次循环,即结束本次循环。
【例2-9】 输出100~120的能被7整除的整数。
![](https://epubservercos.yuewen.com/510DF2/19549638008901206/epubprivate/OEBPS/Images/978-7-111-64601-3_50_03.jpg?sign=1738836023-uYV7YvOcejwhyROWk9tI2YI8HmMVM2Y6-0-b588223141af025f3f6f9b1aedfd3d0c)
运行后激活命令行窗口,观看运行结果为:
![](https://epubservercos.yuewen.com/510DF2/19549638008901206/epubprivate/OEBPS/Images/978-7-111-64601-3_50_04.jpg?sign=1738836023-M5GcfeKs1FvsV3nNoN4UmCyUd77OKaaS-0-ed5242f409590b2813b4d5c11594b918)
2.break语句
break语句用于终止for循环和while循环的执行。当遇到break语句时,则退出循环体,继续执行循环体外的下一个语句,即中止循环。在嵌套循环中,break 往往存在于内层的循环中。
【例2-10】 输出100~120第一个能被7整除的整数。
![](https://epubservercos.yuewen.com/510DF2/19549638008901206/epubprivate/OEBPS/Images/978-7-111-64601-3_51_01.jpg?sign=1738836023-2fwVPxWt3jslds5PfGcYwbF3LRpYYP3x-0-1ae9e708d7cfbf0a06288d7c335381bc)
运行后激活命令行窗口,观看运行结果为:
![](https://epubservercos.yuewen.com/510DF2/19549638008901206/epubprivate/OEBPS/Images/978-7-111-64601-3_51_02.jpg?sign=1738836023-N1Ypih3DFjkwl3jjbeFzgoA2QXH7auKj-0-06ac52c7f4691f6a893a626172f4b0e1)
3.try语句
MATLAB从5.2版开始提供了try语句,这是一种试探性执行语句。语句格式为:
![](https://epubservercos.yuewen.com/510DF2/19549638008901206/epubprivate/OEBPS/Images/978-7-111-64601-3_51_03.jpg?sign=1738836023-gZZsc6teiSwqxi5G8Vg5qXeX2tRKl2E8-0-4475e5e57f0b2a3e34a083b8a16d8ef6)
说明:先试探性执行语句组1,如果语句组1在执行过程中出现错误,则将错误信息赋给保留的lasterr变量,并转去执行语句组2。
【例2-11】 矩阵乘法运算要求两矩阵的维数相容,否则会出错。先求两矩阵的乘积,若出错,则自动转去求两矩阵的点乘(数组乘法)。
![](https://epubservercos.yuewen.com/510DF2/19549638008901206/epubprivate/OEBPS/Images/978-7-111-64601-3_51_04.jpg?sign=1738836023-5yMVpaclYrV4257A9hkKHvxkgik1UEWG-0-56ec6acab003961dbff9cf89d77aa65a)
运行后激活命令行窗口,观看运行结果为:
![](https://epubservercos.yuewen.com/510DF2/19549638008901206/epubprivate/OEBPS/Images/978-7-111-64601-3_52_01.jpg?sign=1738836023-PKmwl1qDSVkAZAhe3DkfSegcyR966hph-0-b2f8ef1bd3518be412acb6d0b69b811c)
将上例的程序改为:
![](https://epubservercos.yuewen.com/510DF2/19549638008901206/epubprivate/OEBPS/Images/978-7-111-64601-3_52_02.jpg?sign=1738836023-AtOsM9bxJyzsT2tGH4YJbeVdZupmuoKv-0-d2e9f49491d5e05cac886eb4edb5828c)
运行后激活命令行窗口,观看运行结果为:
![](https://epubservercos.yuewen.com/510DF2/19549638008901206/epubprivate/OEBPS/Images/978-7-111-64601-3_52_03.jpg?sign=1738836023-obpqQZgz9G8KAJhHmo3aed5Kis0kgvLf-0-b8039460c100e84fd1d69c20e5bc6c16)