目录
三、MATLAB程序流程控制
3.1 顺序结构程序
3.1.1 程序和程序设计
3.1.2程序的三种基本结构
- 顺序结构
- 选择结构
- 循环结构
3.1.3 脚本文件和函数文件
- 脚本文件是可在命令行窗口直接执行的文件,也叫命令文件。
- 函数文件是定义一个函数,不能直接执行,而必须以函数调用的方式来调用它。
3.1.4 文件的建立
- 用命令按钮创建文件
- 用edit命令创建
分别建立脚本文件和函数文件,求两个矩阵的乘积
- 建立脚本文件f1.m
- 在命令行窗口运行脚本文件。
- 建立函数文件f2.m。
- 在命令行窗口里调用函数文件。
3.1.5 顺序结构
(1)数据输入
A=input(提示信息,选项);
(2)数据的输出
disp(输出项);
(3)程序的暂停
pause(延迟秒数)
若要强行中止程序的运行可使用Ctrl+C命令。
- 输入原始数据
- 对原始数据进行处理
- 输出处理结果
3.2 用if语句实现选择结构
3.2.1 什么是选择结构
选择结构又称为分支结构,是根据给定的条件是否成立来决定程序的执行流程。
3.2.2 单分支if语句
- 当条件结果为标量时,非零表示条件成立,零表示条件不成立。(条件结果尽量使用标量)
- 当条件结果为矩阵时,如果矩阵为非空,且不包含零元素,则条件成立,否则不成立。
例如,[1,2;0,4]表示条件时,条件不成立;[1,2;3,4] 表示条件时,条件成立。
3.2.3 双分支if语句
例1 输入一个整数,若为奇数则输出其平方根,否则输出其立方根。
3.2.4 多分支if语句
例2 输入一个字符,若为大写字母,则输出为其对应的小写字母;若为小写字母,则输出其对应的大写字母;若为数字字符则输出其对应数的平方,若为其他字符则原样输出。
3.3 用switch语句实现选择结构
-
语句格式
-
执行过程
-
实列
- switch 表达式应该是一个其值可以列举的表达式。
- case结果表为switch表达式的取值,当取值有多个时,用单元数据表示。
例1 输入一个英文单词,判断它是否以元音字母开头。
3.4 用for语句实现循环结构
3.4.1 什么是循环结构
3.4.2 for 语句
说明:
- for 语句针对向量的每一个元素执行一次循环体。
- 退出循环之后,循环变量的值就是向量中最后的元素值。
- 当向量为空时,循环体一次也不执行。
例子 计算圆周率Π
(1)利用无穷级数展开式求Π的近似值
用向量求和的方法实现程序:
(2) 利用定积分的近似值求Π的近似值。
(3)利用蒙特卡洛法求Π的近似值。
for语句更一般的格式为:
for 循环变量=矩阵表达式
循环体语句
end
执行过程是依次将矩阵的各列元素赋给循环变量,然后执行循环体语句,直到各列元素处理循环结束。
3.5 用while语句实现循环结构
3.5.1 while语句
例1 从键盘输入若干个数,当输入0时结束输入,求这些数的平均值和它们之和。
- while语句多用于循环次数不确定的情况,而对于循环次数确定的情况,使用for语句更方便。
- 针对不同情况可以选择不同的循环语句,但从功能上说两种循环语句可以相互代替。
3.5.2 break语句和continue语句
- break语句用来跳出循环体,结束整个循环。
- continue语句用来结束本次循环,接着进行下次是否执行循环的判断。
例2 求[100,200]之间第一个能被21整除的整数。
3.5.3 循环的嵌套
如果一个循环结构的循环体又包括一个循环结构,就称为循环的嵌套,或称为多重循环结构。处于内部的循环叫做内循环,处于外部的循环叫做外循环。
例3 用筛选法求某自然数范围内的全部素数。
(注意:质数又称素数。 一个大于1的自然数,除了1和它自身外,不能被其他自然数整除的数叫做质数)
3.6 函数文件的定义与调用
3.6.1 函数文件的基本结构
function 输出形参表=函数名(输入形参表)
注释说明部分
函数体语句
当有多个形参时,形参之间用逗号隔开,组成形参表。当输出形参多于一个时,应该用方括号括起来,构成一个输出矩阵。
- 函数文件名通常由函数名再加上扩展名.m组成,函数文件名与函数名也可以不相同。当函数文件名与函数名不相同时,MATLAB将忽略函数名,调用时使用函数文件名。(建议:函数名和函数文件名一样)
- return 语句表示结束函数的执行。通常,在函数文件中也可以不使用return语句,那么被调用函数执行完成后会自动返回。
例1 编写函数文件,求半径为r的圆的面积和周长。
3.6.2 函数调用
调用格式:
[输出实参表]=函数名(输入实参表)
在MATLAB命令行窗口调用前面定义的fcircle函数。
3.6.3 匿名函数
基本格式:
函数句柄变量=@(匿名函数输入参数)匿名函数表达式
@为函数句柄的运算符
函数句柄变量=@函数名
函数名为内部函数或者自定义函数
例2
第2问的函数文件f2.m。
脚本文件mf.m。
3.7 函数的递归调用
3.7.1 函数的嵌套调用
如果在一个函数的定义中调用了其他函数这就是函数的嵌套调用。
3.7.2 函数的递归调用
一个函数调用它自身称为函数的递归调用。
(1) 直接递归调用
(2)间接递归调用
例1 利用函数的递归调用,求n!。
函数文件fact.m如下:
在脚本文件a.m中调用函数文件fact.m,求n!。
在命令行窗口运行命令文件:
例2 Fibonacci 数列定义如下:
首先建立函数文件ffib.m。
建立程序文件Untitled 4.m。
运行结果为:
3.8 函数参数与变量的作用域
3.8.1 函数参数的可调性
nargin:记录输入参数的个数
nargout:记录输出参数的个数
例子:
3.8.2 全局变量与局部变量
- 局部变量:在程序中只特定过程或函数中可以访问的变量。
- 全局变量:所有的函数都可以对他进行存取和修改。
全局变量定义格式:
global 变量名
例子: