2.2 程序流程语句
MATLAB的程序流程语句主要包括选择结构和循环结构两种语句。选择结构是根据给定的条件成立或不成立,分别执行不同的语句,主要有 if语句、switch 语句和 try 语句;循环结构是根据给定的条件来决定执行语句的次数,主要有 while 语句和 for 语句。MATLAB的程序流程语句都以end为结束标志。
2.2.1 if语句
MATLAB语言中,if语句有3种不同的格式。
1.单分支if语句
最简单的选择结构语句,其基本格式为:
说明:表达式多为关系或逻辑表达式。如果表达式为真(非零),就执行if和end之间的语句组,然后再执行end之后的语句;如果表达式为假(零),就直接执行end之后的语句。
【例2-2】 输入一个数,如果此数小于10就输出这个数,否则没有输出。
单击 〈F5〉 键运行后激活命令行窗口,通过键盘输入数字 “9”。
按 〈Enter〉 键后运行结果为:
再次运行M文件后,激活命令行窗口,通过键盘输入数字 “15”。
按 〈Enter〉 键后,没有输出。
2.双分支if语句
前面提供的单分支if语句只能处理较简单的条件,功能不全面。为此MATLAB还提供了双分支if语句结构。其基本格式为:
说明:如果表达式为真(非零),则执行语句组1,再执行end 后面的语句;如果表达式为假(为零),则先执行语句组2,再执行end后面的语句。
【例2-3】 给定两个实数,按代数值的大小输出其中的大数。
单击 〈F5〉 键运行后激活命令行窗口,通过键盘输入数字 “9”,单击 〈Enter〉 键后再输入数字 “6”,观看运行结果为:
3.多分支if语句
当有3个或更多的选择时,可采用if语句的嵌套,也可以采用多分支if语句。其基本格式为:
说明:先判断表达式1的值,若为真,则执行语句组1,执行完语句组1 后,跳出该选择结构,继续执行end后的语句;当表达式1的值为假时,跳过语句组1,进而判断表达式2,若为真,则执行语句组2,然后继续执行end后的语句;如果表达式 2 的值也为假,则跳过语句组2,继续判断表达式3,如此下去,若所有表达式都为假,则执行else后的语句组n+1,再执行end后的语句。else语句可以缺省。
【例2-4】 将百分制的学生成绩转化为五级制的成绩输出。
单击 〈F5〉 键运行后激活命令行窗口,通过键盘输入数字 “75”,单击 〈Enter〉 键后观看运行结果为:
2.2.2 switch语句
if语句只有两个分支可供选择,如果分支较多,则嵌套的if语句层数多,程序冗长而且可读性降低,这种情况可使用switch语。switch语句是多分支选择语句,其基本格式为:
说明:先计算表达式的值,再按顺序与case语句后面的数组值进行比较,如果相等则执行该组语句,然后执行end后的语句,不再继续比较。当表达式的值不等于任何一个 case语句后面的数组值时,程序将执行otherwise语句后的语句组,再执行 end后的语句。
注意:这种情况下缺省otherwise语句,程序会提示出错。
【例2-5】 某商场对顾客所购买的商品实行打折销售,标准如下(商品价格用price 来表示):
输入某件商品的价格,求所售商品的实际销售价格。
运行后激活命令行窗口,通过键盘输入数字 “2000”,观看运行结果为:
2.2.3 while语句
while语句是条件循环语句,在条件(多为关系表达式)控制下重复执行,直到条件不成立为止。while循环的一般形式是:
说明:先计算表达式的值,如果非零,语句体就执行一次;执行完毕再次计算表达式的值,如果仍然非零,语句体就再执行一次;如此循环,直到表达式的值为零。如果表达式的值总是非零,该循环将无休止地进行(即死循环),程序设计时一定要避免。
【例2-6】 求1+2+3+…+100的和。
运行后激活命令行窗口,观看运行结果为:
2.2.4 for语句
for语句为计数循环语句,在许多情况下,循环条件是有规律变化的,通常把循环条件初值、终值和变化步长放在循环语句的开头,这种形式就是for语句的循环结构。for循环的一般形式如下:
说明:表达式1的值是循环变量的初值,表达式2的值是循环步长,表达式3的值是循环变量的终值。初值、步长和终值可以取整数、小数、正数和负数,步长可以缺省,默认值为1。
【例2-7】 利用for语句,求解例2-6。
运行后激活命令行窗口,观看运行结果为:
for语句与while语句的区别:已知循环次数时使用 for 语句,不知道循环次数时使用while语句。例如在100本书中找到其中一本有特殊标记的书,不知道要看多少本书才会找到,需要用while语句,循环的条件是找到书为止(可能看两本就找到了);如果要在这100本书中挑出全部有破损的书,要用for循环,因为需要每本都看,即看100次。
2.2.5 循环的嵌套
如果一个循环结构的循环体又包括一个循环结构就称为循环的嵌套,或称为多重循环。任一种循环语句的循环体部分都可以包含另一个循环语句,多重循环嵌套的层数可以是任意的。习惯上按照嵌套层数,分别叫作二重循环、三重循环等。处于内部的循环叫作内循环,处于外部的循环叫作外循环。在设计多重循环时,要特别注意内、外循环之间的关系,以及语句放置次序,不要搞错。
【例2-8】 有一数列:11+12+13…+110+21+22+23+…+210+31+32+33+…+310 ,求这些项的和。
运行后激活命令行窗口,观看运行结果为:
注意:在嵌套过程中每一个for都必须与其下方最近的一个end相匹配,否则程序将出错。
2.2.6 其他语句
1.continue语句
continue语句用于控制for循环或while循环跳过某些执行语句,当出现continue语句时,则跳过循环体中所有剩余的语句,继续下一次循环,即结束本次循环。
【例2-9】 输出100~120的能被7整除的整数。
运行后激活命令行窗口,观看运行结果为:
2.break语句
break语句用于终止for循环和while循环的执行。当遇到break语句时,则退出循环体,继续执行循环体外的下一个语句,即中止循环。在嵌套循环中,break 往往存在于内层的循环中。
【例2-10】 输出100~120第一个能被7整除的整数。
运行后激活命令行窗口,观看运行结果为:
3.try语句
MATLAB从5.2版开始提供了try语句,这是一种试探性执行语句。语句格式为:
说明:先试探性执行语句组1,如果语句组1在执行过程中出现错误,则将错误信息赋给保留的lasterr变量,并转去执行语句组2。
【例2-11】 矩阵乘法运算要求两矩阵的维数相容,否则会出错。先求两矩阵的乘积,若出错,则自动转去求两矩阵的点乘(数组乘法)。
运行后激活命令行窗口,观看运行结果为:
将上例的程序改为:
运行后激活命令行窗口,观看运行结果为: