
1.5 MATLAB程序流程控制结构
计算机语言程序控制模式主要有三大类:顺序结构、选择结构和循环结构。这一点MATLAB与其他编程语言完全一致。
1.5.1 顺序结构
顺序结构是指所有组成程序源代码的语句按照由上至下的次序依次执行,直到程序的最后一个语句。这种结构优点是容易编制;缺点是结构单一,能够实现的功能有限。
在MATLAB语言的函数中,变量主要有输入变量、输出变量及函数内所使用的变量。
1.数据输入
从键盘输入数据,则可以使用input函数来进行,该函数的调用格式如下:
A=input(提示信息,选项);
其中提示信息为一个字符串,用于提示用户输入什么样的数据。
如果在input函数调用时采用's'选项,则允许用户输入一个字符串。例如,想输入一个人的姓名,可采用以下命令:
xm=input('hello world','s');
2.数据输出
MATLAB提供的命令窗口输出函数主要有disp函数,其调用格式如下:
disp(输出项)
其中输出项既可以为字符串,也可以为矩阵。
【例1-4】 数据输出示例。
程序命令如下:

运行结果如下:

【例1-5】 输入x和y的值,并将它们的值互换后输出。
程序命令如下:

运行结果如下:

【例1-6】 对任一自然数m,按如下法则进行运算:若m为偶数,则将m除2;若m为奇数,则将m乘3加1。将运算结果按上面法则继续运算,重复若干次后计算结果最终是1。
程序命令如下:

运行结果如下:

3.程序的暂停
暂停程序的执行可以使用pause函数,其调用格式如下:
pause(延迟秒数)
如果省略延迟时间,直接使用pause,则将暂停程序,直到用户按任意一个按键后程序继续执行。若要强行中止程序的运行可使用Ctrl+C命令。
1.5.2 选择结构
在MATLAB中,选择结构依照不同的判断条件进行判断,然后根据判断的结果选择某一种方法来解决某一个问题。
使用选择结构语句时,要用条件表达式来描述条件,MATLAB语言中的条件判断语句主要是if-else-end语句,格式有3种:
(1)单分支if语句:

当条件成立时,则执行语句组,执行完之后继续执行if语句的后续语句,若条件不成立,则直接执行if语句的后续语句。
(2)双分支if语句:

当条件成立时,执行语句组1;否则执行语句组2。语句组1或语句组2执行后,再执行if语句的后续语句。
在程序设计中,也经常碰到需要进行多重逻辑选择的问题,这时可以采用if-else-end语句的嵌套形式:

(3)多分支if语句:

语句用于实现多分支选择结构。
if-else-end语句所对应的是多重判断选择,而有时也会遇到多分支判断选择的问题。MATLAB语言为解决多分支判断选择提供了switch-case语句。
switch语句根据表达式的取值不同,分别执行不同的语句,其语句格式为

与其他的程序设计语言的switch-case语句不同的是,在MATLAB语言中,当其中一个case语句后的条件为真时,switch-case语句不对其后的case语句进行判断,也就是说在MATLAB语言中,即使有多条case判断语句为真,也只执行所遇到的第一条为真的语句。这样就不必像C语言那样,在每条case语句后加上break语句以防止继续执行后面为真的case条件语句。
【例1-7】 计算分段函数的值。
程序命令如下:

运行结果如下:

【例1-8】 输入三角形的三条边,求面积。
程序命令如下:

运行结果如下:

【例1-9】 输入一个字符,若为大写字母,则输出其后续字符;若为小写字母,则输出其前导字符;若为其他字符则原样输出。
程序命令如下:

运行结果如下:

【例1-10】 switch语句示例。
程序命令如下:

运行结果如下:

1.5.3 循环结构
在MATLAB中,循环结构就是程序中某一条或多条语句重复多次的运行。
在MATLAB中,包含两种循环结构:循环次数不确定的while循环;循环次数确定的for循环。这两种不完全相同,各有特色。
for循环语句是流程控制语句中的基础,使用该循环语句可以以指定的次数重复执行循环体内的语句。
(1)for语句
for语句的格式为

其中表达式1的值为循环变量的初值,表达式2的值为步长,表达式3的值为循环变量的终值。步长为1时,表达式2可以省略。
(2)while循环结构
while语句可以实现“当”型的循环结构,格式为
while(表达式)
MATLAB语句
end
其中循环判断语句为某种形式的逻辑判断表达式,当该表达式的值为真时,就执行循环体内的语句;当表达式的逻辑值为假时,就退出当前的循环体。
在while循环语句中,在语句内必须有可以修改循环控制变量的命令,否则该循环语言将陷入死循环中,除非循环语句中有控制退出循环的命令,例如break语句和continue命令。当程序流程运行至该命令时,则不论循环控制变量是否满足循环判断语句均将退出当前循环,执行循环后的其他语句。
【例1-11】 水仙花数是指一个n位数(n≥3),它的每个位上的数字的n次幂之和等于它本身。输出全部水仙花数。
程序命令如下:

运行结果如下:

【例1-12】 输入若干个数,当输入0时结束输入,求这些数的平均值和它们之和。
程序命令如下:

运行结果如下:

1.5.4 程序流程控制语句及其他常用命令
1.break命令
在MATLAB中,break命令通常用于for或while循环语句中,与if语句一起使用,中止本次循环,跳出最内层循环。
【例1-13】 break命令示例。
程序命令如下:

运行结果如下:

2.continue命令
通常用于for或while循环语句中,与if语句一起使用,达到跳过本次循环,去执行下一轮循环的目的。
【例1-14】 continue命令示例。
程序命令如下:

运行结果如下:

3.try指令
try语句是MATLAB特有的语句,它先试探性地执行语句1,如果出错,则将错误信息存入系统保留变量lasterr中,然后再执行语句2;如果不出错,则转向执行end后面的语句。此语句可以提高程序的容错能力,增加编程的灵活性。该指令的一般结构为
try
语句1
catch
语句2
end
【例1-15】 已知某图像文件,但不知其存储格式为.bmp还是.jpg,试编程正确读取该图像文件。
程序命令如下:

运行结果如下:

【例1-16】 先求两矩阵的乘积,若出错,则自动转去求两矩阵的点乘。
程序命令如下:

运行结果如下:
