
3.1 程序结构
MATLAB语言有三种常用的程序控制结构:顺序结构、选择结构和循环结构。MATLAB语言里的任何复杂程序都可以由这三种基本结构组成。
3.1.1 顺序结构
顺序结构是MATLAB语言程序的最基本的结构,是指按照程序中的语句排列顺序依次执行,每行语句是从左往右执行,不同行语句是从上往下执行。一般数据的输入和输出、数据的计算和处理程序都是顺序结构。顺序结构的基本流程如图3-1所示,程序先执行语句A,然后执行语句B,最后执行语句C。

图3-1 顺序结构流程图
1.数据的输入
MATLAB语言要从键盘输入数据,可以使用input函数,该函数的调用格式有如下两种。
1)x=input('提示信息')
其中,提示信息表示字符串,用于提示用户输入什么样的数据,等待用户从键盘输入数据,赋值给变量x。
例如,从键盘中输入变量x,可以用下面的命令实现:

执行该语句时,命令行窗口显示提示信息“输入变量x:”,然后等待用户从键盘输入x的值。
2)str=input('提示信息','s')
其中,该格式用于用户输入一个字符串,赋值给字符变量str。
例如,用户想从键盘输入自己的名字,赋值给字符变量str,可以采用下面命令:

执行该语句时,命令行窗口显示提示信息“what's your name?”,然后等待用户从键盘输入字符变量str的值。
2.数据的输出
MATLAB语言可以在命令窗口显示输出信息,可以用函数disp实现,该函数的调用格式如下:

其中,输出信息可以是字符串,也可以是矩阵信息。例如:

需要注意,用disp函数显示矩阵信息将不显示矩阵的变量名,输出格式更紧凑,没有空行。
【例3-1】 从键盘输入a、b和c的值,求解一元二次方程ax2+bx+c=0的根。
程序代码如下:

程序运行结果是:

再一次运行程序后的结果是:

由上面程序结果可知,MATLAB语言的数据输入、数据处理和数据输出命令都是按照顺序结构执行的。
3.1.2 选择结构
MATLAB语言的选择结构是根据选定的条件成立或者不成立,分别执行不同的语句。选择结构有下面三种常用语句:if语句、switch语句和try语句。
1.if语句
在MATLAB语言中,if语句有三种格式。
1)单项选择结构
单项选择语句的格式如下:

当条件成立时,执行语句组,执行完后继续执行end后面的语句;若条件不成立,则直接执行end后面的语句。单项选择程序结构流程图如图3-2所示。

图3-2 单项选择结构流程图
【例3-2】 从键盘输入一个值x,判断当x>0时,计算的值并显示。
程序代码如下:

程序运行结果如下:

再一次运行程序,输入x=﹣2,程序结果是:

由上面的程序结果可知,当条件不满足时,就直接执行end后面的语句。
2)双项选择结构
双项选择语句的格式如下:

当条件1成立时,执行语句组1,否则执行语句组2,之后继续执行end后面的语句。双项选择程序结构流程图如图3-3所示。

图3-3 双项选择结构流程图
【例3-3】 从键盘输入一个值x,计算下面分段函数的值并显示。

程序代码如下:

程序运行结果是:

再一次运行程序,输入x=﹣2,程序结果是:

该例题如果用单项选择结构也可以实现,程序代码如下:

3)多项选择结构
多项选择语句的格式如下:

当条件1成立时,执行语句组1;否则当条件2成立时,执行语句组2;以此类推,最后执行end后面的语句。需要注意,if和end必须配对使用。多项选择程序的结构流程图如图3-4所示。

图3-4 多项选择结构流程图
【例3-4】 从键盘输入一个值x,用下面的分段函数实现符号函数的功能。

程序代码如下:

程序运行结果如下:

若用MATLAB的符号函数sign验证,可以得到同样的结果:

2.switch语句
在MATLAB语言中,switch语句也用于多项选择。根据表达式的值的不同,分别执行不同的语句组。该语句的格式如下:

switch语句结构流程图如图3-5所示。当表达式的值等于表达式1的值时,执行语句组1;当表达式的值等于表达式2的值时,执行语句组2;以此类推,当表达式的值等于表达式m的值时,执行语句组m;当表达式的值不等于case所列表达式的值时,执行语句组n。需要注意,当任意一个case表达式为真,执行完其后的语句组,直接执行end后面的语句。

图3-5 switch语句结构流程图
【例3-5】 某商场“十一”假期搞促销活动,对顾客所购商品总价打折,折扣率标准如下,从键盘输入顾客所购商品总价,计算打折后总价。

程序代码如下:

num2cell函数的功能是将数值矩阵转换为单元矩阵。程序运行结果如下:

3.try语句
在MATLAB语言里,try语句是一种试探性执行语句,该语句的格式如下:

try语句先试探执行语句组1,如果语句组1在执行过程中出错,则将错误信息赋值给系统变量lasterr,并转去执行语句组2。
【例3-6】 试用try语句求函数y=x∗sin(x)的值,自变量的范围为0≤x≤pi,步长为pi/10。
程序代码如下:

程序运行结果如下:

3.1.3 循环结构
循环结构是MATLAB语言的一种非常重要的程序结构,是按照给定的条件,重复执行指定的语句。MATLAB语言提供两种循环结构语句:循环次数确定的for循环语句和循环次数不确定的while循环语句。
1.for循环语句
for循环语句是MATLAB语言的一种重要的程序结构,是以指定次数重复执行循环体内的语句。for循环语句的格式如下:

其中
(1)表达式1的值为循环变量的初始值,表达式2的值为步长,表达式3的值为循环变量的终值;
(2)当步长为1时,可以省略表达式2;
(3)当步长为负值时,初值大于终值;
(4)循环体内不能对循环变量重新设置;
(5)for循环允许嵌套使用;
(6)for和end配套使用,且小写。
for循环语句的流程图如图3-6所示。首先计算3个表达式的值,将表达式1的值赋给循环变量k,然后判断k值是否介于表达式1和表达式3的值之间,如果不是,结束循环,如果是,则执行循环体语句,k增加一个表达式2的步长,然后再判断k值是否介于表达式1和表达式3的值之间,直到条件不满足,结束循环为止。
【例3-7】 利用for循环语句,求解1~100的数字之和。
程序代码如下:

图3-6 for循环语句流程图

程序运行结果如下:

【例3-8】 利用for循环语句,验证当n等于1000和1 000 000时,y的值。

程序代码如下:

程序运行结果如下:

MATLAB是一种基于矩阵的语言,为了提高程序执行速度,也可以用向量的点运算来代替循环操作。可以用下面的程序代替:

程序运行结果:

由以上程序结果可知,当n都取值1 000 000时,用后一种方法编写的程序比前一种方法的运算速度快很多。
循环的嵌套是指在一个循环结构的循环体中又包含另一个循环结构,或称为多重循环结构。设计多重循环时要注意外循环和内循环之间的关系,以及各循环体语句的放置位置。总的循环次数是外循环次数与内循环次数的乘积。可以用多个for和end配套实现多重循环。
【例3-9】 利用for循环的嵌套语句,求解x(i,j)=i2+j2,i∈[1:4],j∈[5:1]。
程序代码如下:

程序运行结果如下:

【例3-10】 若一个整数等于它的各个真因子之和,则称该数为完数。利用for双重循环语句,求解[1,10000]之间的所有完数。
程序代码如下:

程序运行结果如下:

2.while循环语句
while循环语句是MATLAB语言的一种重要的程序结构,是在满足条件下重复执行循环体内的语句,循环次数一般是不确定的。while循环语句的格式如下:

其中,当条件表达式为真,就执行循环体语句;否则,就结束循环。while和end匹配使用。
while循环结构的流程图如图3-7所示。当条件表达式为真,执行循环体语句,修改循环控制变量,再次判断表达式是否为真,直至条件表达式为假,跳出循环体。

图3-7 while循环结构流程图
【例3-11】 利用while循环语句,求解sum=1+2+…+n≥800时,最小正整数n的值。
程序代码如下:

程序运行结果如下:

【例3-12】 所谓水仙花数是指一个三位数,各位数字的立方和等于该数本身,例如153=1 3+5 3+3 3,所以153是一个水仙花数。试用while循环语句编程找出100~999所有的水仙花数。
程序代码如下:

程序运行结果如下:

3.1.4 程序控制命令
MATLAB语言有许多程序控制命令,主要有pause暂停命令、continue继续命令、break中断命令和return退出命令等。
1.pause命令
在MATLAB语言中,pause命令可以使程序运行停止,等待用户按任意键继续,也可设定暂停时间。该命令的调用格式如下:

2.continue命令
MATLAB语言的continue命令一般用于for或while循环语句中,与if语句配套使用,达到跳出本次循环,执行下次循环的目的。
例如:

程序运行结果如下:

3.break命令
MATLAB语言的break命令一般用于for或while循环语句中,与if语句配套使用终止循环,或跳出最内层循环。
例如:

程序运行结果如下:

4.return命令
MATLAB语言的return命令一般用于直接退出程序,与if语句配套使用。
例如:

程序运行结果如下:
