![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=1739153318-wxitt0kV01ohVu8gaQdHcE6iaXMJHXhd-0-90077d03fca6a7b47f024aab0d2e17cc)
说明:表达式多为关系或逻辑表达式。如果表达式为真(非零),就执行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=1739153318-tQJPXAzPYWWnD71VbhjBWybZ4mJ70pnR-0-73a2b3066acfb1586751c0052b572d4d)
单击 〈F5〉 键运行后激活命令行窗口,通过键盘输入数字 “9”。
![](https://epubservercos.yuewen.com/510DF2/19549638008901206/epubprivate/OEBPS/Images/978-7-111-64601-3_45_03.jpg?sign=1739153318-x1IrLchHnNKp8gMAcrYc535oTgfVZwEr-0-c0573edbe78eb3b6ecf1c00b808659fa)
按 〈Enter〉 键后运行结果为:
![](https://epubservercos.yuewen.com/510DF2/19549638008901206/epubprivate/OEBPS/Images/978-7-111-64601-3_45_04.jpg?sign=1739153318-B05Gu2CQVbP40FIllN9y5oAY6gLgyGfx-0-38aed1970caeddf68e494c0186052a52)
再次运行M文件后,激活命令行窗口,通过键盘输入数字 “15”。
![](https://epubservercos.yuewen.com/510DF2/19549638008901206/epubprivate/OEBPS/Images/978-7-111-64601-3_45_05.jpg?sign=1739153318-Rbwpan9qYUBEa66jZ10cFQ9rc8SQDmDr-0-e6d4aee2a98a23313f9e1f3195a68f54)
按 〈Enter〉 键后,没有输出。
![](https://epubservercos.yuewen.com/510DF2/19549638008901206/epubprivate/OEBPS/Images/978-7-111-64601-3_45_06.jpg?sign=1739153318-yqfJ7idMVeCbGTM6oKqtwrVsDYjV7amU-0-6aac90f60b03093502a0aa3c98d216cd)
2.双分支if语句
前面提供的单分支if语句只能处理较简单的条件,功能不全面。为此MATLAB还提供了双分支if语句结构。其基本格式为:
![](https://epubservercos.yuewen.com/510DF2/19549638008901206/epubprivate/OEBPS/Images/978-7-111-64601-3_45_07.jpg?sign=1739153318-fIkabFtjCQYD09soIRtVVhRP4fQhYrPp-0-453fa21d8a1d137a1b52691c55cd65ba)
说明:如果表达式为真(非零),则执行语句组1,再执行end 后面的语句;如果表达式为假(为零),则先执行语句组2,再执行end后面的语句。
【例2-3】 给定两个实数,按代数值的大小输出其中的大数。
![](https://epubservercos.yuewen.com/510DF2/19549638008901206/epubprivate/OEBPS/Images/978-7-111-64601-3_45_08.jpg?sign=1739153318-AsC5XudhLmquySMukHZ4IZS618xtE2BL-0-7b93103bd1a630f30dbeaa5df69b8149)
![](https://epubservercos.yuewen.com/510DF2/19549638008901206/epubprivate/OEBPS/Images/978-7-111-64601-3_46_01.jpg?sign=1739153318-ZKZLzHHP4JJCqS3B5pumTaSDqJIRjqi2-0-0653cdd0caf8b1c96f4bd87e913d3edd)
单击 〈F5〉 键运行后激活命令行窗口,通过键盘输入数字 “9”,单击 〈Enter〉 键后再输入数字 “6”,观看运行结果为:
![](https://epubservercos.yuewen.com/510DF2/19549638008901206/epubprivate/OEBPS/Images/978-7-111-64601-3_46_02.jpg?sign=1739153318-NKPnwZruggVVQCU9IzXyjvqIoDxFfyKt-0-7c7809465826f97b81b574d369f4e0a2)
3.多分支if语句
当有3个或更多的选择时,可采用if语句的嵌套,也可以采用多分支if语句。其基本格式为:
![](https://epubservercos.yuewen.com/510DF2/19549638008901206/epubprivate/OEBPS/Images/978-7-111-64601-3_46_03.jpg?sign=1739153318-4Wx3URJGO63rOBulcsmZtfUqCb4u21xi-0-a21c34ac8b88df8b1bc87c658e6b5696)
说明:先判断表达式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=1739153318-5n5RfNz4tFhVNOXVjXt2F4MRuGZOmDkV-0-87d816adc55e3797f7662ac3456b1d1f)
![](https://epubservercos.yuewen.com/510DF2/19549638008901206/epubprivate/OEBPS/Images/978-7-111-64601-3_47_01.jpg?sign=1739153318-Ai6heYyPjLve4TgrVdBdbs76TeCYdrKe-0-46025a39ea35ce5f6949868379946b67)
单击 〈F5〉 键运行后激活命令行窗口,通过键盘输入数字 “75”,单击 〈Enter〉 键后观看运行结果为:
![](https://epubservercos.yuewen.com/510DF2/19549638008901206/epubprivate/OEBPS/Images/978-7-111-64601-3_47_02.jpg?sign=1739153318-mC6k0Z6RnoM3no6w9GpmAvBffaIQxJDb-0-4b4a5a68f13c72782f500ba9909dad8a)
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=1739153318-dtw18sblYqlux3TyCigwKMthh4oVHI2b-0-4dd1f2379cd40ba90253e3882b1906c0)
说明:先计算表达式的值,再按顺序与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=1739153318-BcplR8dNZrazRZLd22odOKoCRmhh1eXw-0-05fa40747ebbfb6c22dfa6097adaa897)
输入某件商品的价格,求所售商品的实际销售价格。
![](https://epubservercos.yuewen.com/510DF2/19549638008901206/epubprivate/OEBPS/Images/978-7-111-64601-3_47_05.jpg?sign=1739153318-vsXKmbSSEtPmwd4GjRlVi815opWayR0x-0-41fc101b3d4a9f657daa468c8829cdbd)
![](https://epubservercos.yuewen.com/510DF2/19549638008901206/epubprivate/OEBPS/Images/978-7-111-64601-3_48_01.jpg?sign=1739153318-DG37ZuoaLFDA6vWec4ga98UGRooKSCTO-0-4c97d76f389dd0dcddda99cc9752732a)
运行后激活命令行窗口,通过键盘输入数字 “2000”,观看运行结果为:
![](https://epubservercos.yuewen.com/510DF2/19549638008901206/epubprivate/OEBPS/Images/978-7-111-64601-3_48_02.jpg?sign=1739153318-RgbCFfnlgNm3Uitz3XhX9fDk6iVgb6sU-0-1c75d7e32f355be2796b877b3bc2ab84)
2.2.3 while语句
while语句是条件循环语句,在条件(多为关系表达式)控制下重复执行,直到条件不成立为止。while循环的一般形式是:
![](https://epubservercos.yuewen.com/510DF2/19549638008901206/epubprivate/OEBPS/Images/978-7-111-64601-3_48_03.jpg?sign=1739153318-fj4WOUQXGUWKynJBAuJVFjpUT0f9vzP8-0-761decde1dcc8eb52030131a856284db)
说明:先计算表达式的值,如果非零,语句体就执行一次;执行完毕再次计算表达式的值,如果仍然非零,语句体就再执行一次;如此循环,直到表达式的值为零。如果表达式的值总是非零,该循环将无休止地进行(即死循环),程序设计时一定要避免。
【例2-6】 求1+2+3+…+100的和。
![](https://epubservercos.yuewen.com/510DF2/19549638008901206/epubprivate/OEBPS/Images/978-7-111-64601-3_48_04.jpg?sign=1739153318-HavV2MM7TrMjput9k7bJAaqY42iWvDAA-0-1dac7f091b204abb7139c0a016c8eedb)
![](https://epubservercos.yuewen.com/510DF2/19549638008901206/epubprivate/OEBPS/Images/978-7-111-64601-3_49_01.jpg?sign=1739153318-aRkOSBNU89I2OVz2XAJRON5foEnmk4aO-0-edf35398e543dff62f94e827ed4815bd)
运行后激活命令行窗口,观看运行结果为:
![](https://epubservercos.yuewen.com/510DF2/19549638008901206/epubprivate/OEBPS/Images/978-7-111-64601-3_49_02.jpg?sign=1739153318-StdrsqKpt2l3AUPwvf1MUS6vPZZ3z80u-0-f9b2c4e403fe4d83c1dc639d21b58c10)
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=1739153318-uomjgjKY6aRLUvHxgY4Da4CYRzrAd2pL-0-43c67d0595febcd64b472bd1452cab34)
说明:表达式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=1739153318-FY7rWeKrTrz3VAC4R4ZoB3U3CGPbL9g2-0-8edf5780a3cd5f90264517b2ead9ba8f)
运行后激活命令行窗口,观看运行结果为:
![](https://epubservercos.yuewen.com/510DF2/19549638008901206/epubprivate/OEBPS/Images/978-7-111-64601-3_49_05.jpg?sign=1739153318-uZLWCb4FSt83RehDVGU7tlQ55ane6Znn-0-c9be369c00bb17186ed0edc2b31d65d4)
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=1739153318-vPwaseSym2KoDX1UNNpLP0ZLW8V6H7gm-0-6293c609a96f808eab3cfa5f95f421fc)
如果一个循环结构的循环体又包括一个循环结构就称为循环的嵌套,或称为多重循环。任一种循环语句的循环体部分都可以包含另一个循环语句,多重循环嵌套的层数可以是任意的。习惯上按照嵌套层数,分别叫作二重循环、三重循环等。处于内部的循环叫作内循环,处于外部的循环叫作外循环。在设计多重循环时,要特别注意内、外循环之间的关系,以及语句放置次序,不要搞错。
【例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=1739153318-0IfQGRSQaoabhmMI9wc2LmZ49ItSw84f-0-c6221ab96a02abed03b1994e43385b2d)
运行后激活命令行窗口,观看运行结果为:
![](https://epubservercos.yuewen.com/510DF2/19549638008901206/epubprivate/OEBPS/Images/978-7-111-64601-3_50_02.jpg?sign=1739153318-sHRqcy14ii9Eg8NwyjX1UtKWegN4kdEJ-0-ce723f9893a495c6613aa259a79881d2)
注意:在嵌套过程中每一个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=1739153318-66oMy159xukUj8bjTB4jsZUnAKJbcY3H-0-5f27f05cde05d922000c810027202eeb)
运行后激活命令行窗口,观看运行结果为:
![](https://epubservercos.yuewen.com/510DF2/19549638008901206/epubprivate/OEBPS/Images/978-7-111-64601-3_50_04.jpg?sign=1739153318-jSuX1MaN20ON8I7vsvf2R3OPYvA19cVt-0-f1f8ab09e207c8ca19904ed9a5ef718f)
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=1739153318-GWbGb3M5Smx9hqnABO0DP6aSsy3euUrF-0-5aa5e86be8c449733d9a05965bed1cdf)
运行后激活命令行窗口,观看运行结果为:
![](https://epubservercos.yuewen.com/510DF2/19549638008901206/epubprivate/OEBPS/Images/978-7-111-64601-3_51_02.jpg?sign=1739153318-YHOWuU9MHg9iReTmPpv3TsQ5fZOG3MU2-0-71a0659be02454612532214f8115f7bf)
3.try语句
MATLAB从5.2版开始提供了try语句,这是一种试探性执行语句。语句格式为:
![](https://epubservercos.yuewen.com/510DF2/19549638008901206/epubprivate/OEBPS/Images/978-7-111-64601-3_51_03.jpg?sign=1739153318-8I4B94HtYc2rgXHFtfCwN5yfppfvgZfO-0-558ce9ceccc6b95dc45e4763c0be77d1)
说明:先试探性执行语句组1,如果语句组1在执行过程中出现错误,则将错误信息赋给保留的lasterr变量,并转去执行语句组2。
【例2-11】 矩阵乘法运算要求两矩阵的维数相容,否则会出错。先求两矩阵的乘积,若出错,则自动转去求两矩阵的点乘(数组乘法)。
![](https://epubservercos.yuewen.com/510DF2/19549638008901206/epubprivate/OEBPS/Images/978-7-111-64601-3_51_04.jpg?sign=1739153318-yaB9738VmEcRKw3QD6uoQrd4z5vBhsom-0-8407897c6b484878ca51be733fa5d074)
运行后激活命令行窗口,观看运行结果为:
![](https://epubservercos.yuewen.com/510DF2/19549638008901206/epubprivate/OEBPS/Images/978-7-111-64601-3_52_01.jpg?sign=1739153318-cJt7qH5btTdNZW2cbX5iqukorK0HYemY-0-83a0a185ce9d576a03350ef17667fdf1)
将上例的程序改为:
![](https://epubservercos.yuewen.com/510DF2/19549638008901206/epubprivate/OEBPS/Images/978-7-111-64601-3_52_02.jpg?sign=1739153318-MlxPjnvaOMHYL179IIV78YNgzF4JKQ3A-0-1e3127e0bfbe62cad58cae2fc6433d50)
运行后激活命令行窗口,观看运行结果为:
![](https://epubservercos.yuewen.com/510DF2/19549638008901206/epubprivate/OEBPS/Images/978-7-111-64601-3_52_03.jpg?sign=1739153318-5E9WpXkPcrhmM1myVccE63zgNtqNldXG-0-6119a67bd1d90db958a26b1f3461f9d4)