![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=1738825679-P95csij3eXFpr3aXoC3VeYA8fzFeR5x6-0-a4c65814c843d5d834cf051410c8ec63)
说明:表达式多为关系或逻辑表达式。如果表达式为真(非零),就执行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=1738825679-6oBeeLRVLRy3AEVqeXctZf785dNp6ukN-0-a090e4eb5e0f8c1b57cfd7061d5beb11)
单击 〈F5〉 键运行后激活命令行窗口,通过键盘输入数字 “9”。
![](https://epubservercos.yuewen.com/510DF2/19549638008901206/epubprivate/OEBPS/Images/978-7-111-64601-3_45_03.jpg?sign=1738825679-UkObCicpGi2U1ugzRGd3URSvlsxjsuN5-0-af3896bb4058f68b5f3de1e43877359c)
按 〈Enter〉 键后运行结果为:
![](https://epubservercos.yuewen.com/510DF2/19549638008901206/epubprivate/OEBPS/Images/978-7-111-64601-3_45_04.jpg?sign=1738825679-CXdZqm30js5okshoU52Il2tvMF15UjU7-0-a156bb679e6c1b08b67eef33e7889fea)
再次运行M文件后,激活命令行窗口,通过键盘输入数字 “15”。
![](https://epubservercos.yuewen.com/510DF2/19549638008901206/epubprivate/OEBPS/Images/978-7-111-64601-3_45_05.jpg?sign=1738825679-0ljdF4BaIXGNlNhfnS8DHdbzedV3oIzI-0-612956d20ec1a483e72d05a9726938ef)
按 〈Enter〉 键后,没有输出。
![](https://epubservercos.yuewen.com/510DF2/19549638008901206/epubprivate/OEBPS/Images/978-7-111-64601-3_45_06.jpg?sign=1738825679-00AebV9VpijTz1jEs1JTx3leAIECyrs7-0-b713951d3ce816ecf01175650ff9acf1)
2.双分支if语句
前面提供的单分支if语句只能处理较简单的条件,功能不全面。为此MATLAB还提供了双分支if语句结构。其基本格式为:
![](https://epubservercos.yuewen.com/510DF2/19549638008901206/epubprivate/OEBPS/Images/978-7-111-64601-3_45_07.jpg?sign=1738825679-9v9dt2hVBMqkTOKypTosM0aCXnpHj7TM-0-4c83375356859ae7325bd0a7ac05e22b)
说明:如果表达式为真(非零),则执行语句组1,再执行end 后面的语句;如果表达式为假(为零),则先执行语句组2,再执行end后面的语句。
【例2-3】 给定两个实数,按代数值的大小输出其中的大数。
![](https://epubservercos.yuewen.com/510DF2/19549638008901206/epubprivate/OEBPS/Images/978-7-111-64601-3_45_08.jpg?sign=1738825679-MxIuAc1YJGe8BY1qiCKKXjzDeT9Bu3ox-0-546cdc5f9ee5b8318c16acb717a4b727)
![](https://epubservercos.yuewen.com/510DF2/19549638008901206/epubprivate/OEBPS/Images/978-7-111-64601-3_46_01.jpg?sign=1738825679-mITX6VY0Z84alhhnMqMHOSxxIrXKyGbB-0-9e0a363956f964b5b976d985631c8d66)
单击 〈F5〉 键运行后激活命令行窗口,通过键盘输入数字 “9”,单击 〈Enter〉 键后再输入数字 “6”,观看运行结果为:
![](https://epubservercos.yuewen.com/510DF2/19549638008901206/epubprivate/OEBPS/Images/978-7-111-64601-3_46_02.jpg?sign=1738825679-0ZLEjgIaYfbQpZR6jLdQtGBOZc1hQIMu-0-c0900fc18f9d8611175069be707aefc3)
3.多分支if语句
当有3个或更多的选择时,可采用if语句的嵌套,也可以采用多分支if语句。其基本格式为:
![](https://epubservercos.yuewen.com/510DF2/19549638008901206/epubprivate/OEBPS/Images/978-7-111-64601-3_46_03.jpg?sign=1738825679-tYAe37cnKalxLiwM6avNLivza4W47hmu-0-7ee9640c2948dccbf06bd8aa01211afd)
说明:先判断表达式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=1738825679-5NIQ4y2iENPrJmYUIP0O5Lno1T6vzFiP-0-983b87363201073a158736e990a5a04b)
![](https://epubservercos.yuewen.com/510DF2/19549638008901206/epubprivate/OEBPS/Images/978-7-111-64601-3_47_01.jpg?sign=1738825679-NQPgHYMTiR2XKfIraUPwEM0goA6qNgyE-0-c2fa92efc33008c740fb6c73828bf9e2)
单击 〈F5〉 键运行后激活命令行窗口,通过键盘输入数字 “75”,单击 〈Enter〉 键后观看运行结果为:
![](https://epubservercos.yuewen.com/510DF2/19549638008901206/epubprivate/OEBPS/Images/978-7-111-64601-3_47_02.jpg?sign=1738825679-th3RRoTQEn0VF9QQTL25bkwpaSMabM5O-0-02772c84b25fc5aee2b10464aab8b34c)
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=1738825679-LojYOYFki78ySVod2qtSyzJJGFzNXqu1-0-2966b4655d7a086f491efd89f6479c3e)
说明:先计算表达式的值,再按顺序与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=1738825679-ylHz10BO2vrO81j7CwpC1qihlT9j9rlO-0-738059a02e7f3e9a67156cc0ab753996)
输入某件商品的价格,求所售商品的实际销售价格。
![](https://epubservercos.yuewen.com/510DF2/19549638008901206/epubprivate/OEBPS/Images/978-7-111-64601-3_47_05.jpg?sign=1738825679-E3FpHqj0wWDKJ3gCjaKOmL6w6tqkoOL6-0-f937a92a623bd5784bfd68d6fcbd8a3b)
![](https://epubservercos.yuewen.com/510DF2/19549638008901206/epubprivate/OEBPS/Images/978-7-111-64601-3_48_01.jpg?sign=1738825679-SQ7X2AalXozYvuhYEpq5lAA4HmI3jDmm-0-e101b984d7ee73983443cf1d7af009f8)
运行后激活命令行窗口,通过键盘输入数字 “2000”,观看运行结果为:
![](https://epubservercos.yuewen.com/510DF2/19549638008901206/epubprivate/OEBPS/Images/978-7-111-64601-3_48_02.jpg?sign=1738825679-wwLn8KLA1XNxgZoPjP18uQ7LwWzaP4qv-0-5ad25dc2beca40fbfb97af47dd4cc6a2)
2.2.3 while语句
while语句是条件循环语句,在条件(多为关系表达式)控制下重复执行,直到条件不成立为止。while循环的一般形式是:
![](https://epubservercos.yuewen.com/510DF2/19549638008901206/epubprivate/OEBPS/Images/978-7-111-64601-3_48_03.jpg?sign=1738825679-y8jk28Ct5zIke1ZQmxFXyoR7fuqokUwi-0-17dc51be8473fdafdb8b32012ea756d8)
说明:先计算表达式的值,如果非零,语句体就执行一次;执行完毕再次计算表达式的值,如果仍然非零,语句体就再执行一次;如此循环,直到表达式的值为零。如果表达式的值总是非零,该循环将无休止地进行(即死循环),程序设计时一定要避免。
【例2-6】 求1+2+3+…+100的和。
![](https://epubservercos.yuewen.com/510DF2/19549638008901206/epubprivate/OEBPS/Images/978-7-111-64601-3_48_04.jpg?sign=1738825679-WlRuchhdfAvUpiv8OtKKqBhylzLHs290-0-abcd0b73c628d0eac398662d13b6ab0b)
![](https://epubservercos.yuewen.com/510DF2/19549638008901206/epubprivate/OEBPS/Images/978-7-111-64601-3_49_01.jpg?sign=1738825679-lsMgHF9m4JIdsUgvIk41ERjxphO09k6C-0-66feaabaab323f596f373f924cd866b5)
运行后激活命令行窗口,观看运行结果为:
![](https://epubservercos.yuewen.com/510DF2/19549638008901206/epubprivate/OEBPS/Images/978-7-111-64601-3_49_02.jpg?sign=1738825679-bOE9LLP8KzLKoartntHQRVQchyQX50q9-0-c72a9ac923332fe419bd5c689dedf816)
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=1738825679-Sz7j3yLipYTYscRtLc7IaqvwZ9YP5clZ-0-7d2cb1908f91d825f0b47ef005961fac)
说明:表达式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=1738825679-9ZSjG7W0pd3OKTg39jQutmLOuY7ZxH7A-0-9372810afd82a4761b12e7e48f4a4a55)
运行后激活命令行窗口,观看运行结果为:
![](https://epubservercos.yuewen.com/510DF2/19549638008901206/epubprivate/OEBPS/Images/978-7-111-64601-3_49_05.jpg?sign=1738825679-e9R5Y92pKPt6s5QRaapsqrOJuubY8Ewu-0-c595d34536ecae3edc0e80e3cdb3f9b7)
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=1738825679-NYT6sBwgXtCamECxol6lvblls8icObuf-0-02d816bb55f90359c0cb8dfb11c05dc4)
如果一个循环结构的循环体又包括一个循环结构就称为循环的嵌套,或称为多重循环。任一种循环语句的循环体部分都可以包含另一个循环语句,多重循环嵌套的层数可以是任意的。习惯上按照嵌套层数,分别叫作二重循环、三重循环等。处于内部的循环叫作内循环,处于外部的循环叫作外循环。在设计多重循环时,要特别注意内、外循环之间的关系,以及语句放置次序,不要搞错。
【例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=1738825679-RMSEJoLqs1skESiDklo0cR6MFjCYVj4R-0-c726d07ae96a12744442366f183bedaf)
运行后激活命令行窗口,观看运行结果为:
![](https://epubservercos.yuewen.com/510DF2/19549638008901206/epubprivate/OEBPS/Images/978-7-111-64601-3_50_02.jpg?sign=1738825679-aDjXZoKJLDxjrQX4A9krPI5JMx076MQX-0-febd8e8d75f6d9a503a03607ec24c18d)
注意:在嵌套过程中每一个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=1738825679-GXFUl0dP3KWkM7BJOJP937xjVtf9XwUi-0-23426267d246651de7b0af5a58c42354)
运行后激活命令行窗口,观看运行结果为:
![](https://epubservercos.yuewen.com/510DF2/19549638008901206/epubprivate/OEBPS/Images/978-7-111-64601-3_50_04.jpg?sign=1738825679-sQ8FlMmidus5FsQQYC71Yqmdq7t977YK-0-44fb961e9be461d1e1715cc929dc113c)
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=1738825679-mzvCmO8gibpNu4ucKRi78TqaFC4JRkgY-0-bf9b5ba52ffa72e9f55f7c7d122b533a)
运行后激活命令行窗口,观看运行结果为:
![](https://epubservercos.yuewen.com/510DF2/19549638008901206/epubprivate/OEBPS/Images/978-7-111-64601-3_51_02.jpg?sign=1738825679-5L5Sk0WsCWrApCrJMQJ94m66fNkAFQyT-0-905072fdfa0dcd7061c5e4a664b98df7)
3.try语句
MATLAB从5.2版开始提供了try语句,这是一种试探性执行语句。语句格式为:
![](https://epubservercos.yuewen.com/510DF2/19549638008901206/epubprivate/OEBPS/Images/978-7-111-64601-3_51_03.jpg?sign=1738825679-8mfwJ8XU81pAVcoT3IIofnAMsqBr1MUo-0-b3a406b36572df439adbb8a38b421d7e)
说明:先试探性执行语句组1,如果语句组1在执行过程中出现错误,则将错误信息赋给保留的lasterr变量,并转去执行语句组2。
【例2-11】 矩阵乘法运算要求两矩阵的维数相容,否则会出错。先求两矩阵的乘积,若出错,则自动转去求两矩阵的点乘(数组乘法)。
![](https://epubservercos.yuewen.com/510DF2/19549638008901206/epubprivate/OEBPS/Images/978-7-111-64601-3_51_04.jpg?sign=1738825679-nqA9csjCyea0Bkr8tvQMQ4Qv6IcGOoTi-0-c1cfde927b37b3147443fa48a148ae8d)
运行后激活命令行窗口,观看运行结果为:
![](https://epubservercos.yuewen.com/510DF2/19549638008901206/epubprivate/OEBPS/Images/978-7-111-64601-3_52_01.jpg?sign=1738825679-9tqKKOqrj61JZcHzpcxBmMYtqyLgImqf-0-41318cdf175f15d001c8ae86306a6e34)
将上例的程序改为:
![](https://epubservercos.yuewen.com/510DF2/19549638008901206/epubprivate/OEBPS/Images/978-7-111-64601-3_52_02.jpg?sign=1738825679-aPeWI0Cdpq7NerwnNDx7IpmOqO34lUn4-0-d8d51a4ca91c9fc08b42f41c4ef6ecbd)
运行后激活命令行窗口,观看运行结果为:
![](https://epubservercos.yuewen.com/510DF2/19549638008901206/epubprivate/OEBPS/Images/978-7-111-64601-3_52_03.jpg?sign=1738825679-VtZZ1wPbIE17Q4B8vPtvkodMjMrYEPnV-0-f4ad382eb4162e7a038cac676450be6b)