第二章 结构化程序和自定义函数
第二章 结构化程序和自定义函数
逻辑运算符
运算符 | 意义 |
---|---|
< |
小于 |
<= |
小于或等于 |
> |
大于 |
>= |
大于或等于 |
== |
等于 |
~= |
不等于 |
&& |
且 |
` |
流程控制语句
流程控制语句 | 作用 |
---|---|
if, elseif, else |
若if 语句为真,则执行子句 |
switch, case, otherwise |
根据switch 语句内容判断执行哪个子句 |
while |
重复执行子句直到while 中的条件为假 |
for |
执行子句固定次数 |
try, catch |
执行子句并捕获执行过程中的异常 |
break |
跳出循环 |
continue |
直接进入下一次循环 |
end |
结束子句 |
pause |
暂停程序 |
return |
返回到调用函数处 |
if语句
-
单分支if语句
-
语句格式
if 条件 语句组 end
-
关于条件
- 条件是标量时,非零表示条件成立,零表示条件不成立
- 条件是矩阵时,矩阵为非空,且不含零元素,则条件成立,反之,条件不成立
-
-
双分支if语句
-
语句格式
if 条件 语句组1 else 语句组2 end
-
-
多分支if语句
-
语句格式
if 条件1 语句组1 elseif 条件2 语句组2 ··· elseif 条件m 语句组m else 语句组n end
-
switch语句
-
语句格式
switch 表达式 case 结果表1 语句组1 case 结果表2 语句组2 ··· case 结果表m 语句组m otherwise 语句组n end
-
switch表达式应该是一个其值可以列举的表达式
-
case结果表为switch表达式的取值,当取值有多个时,用单元数据表示
c = input('请输入一个单词:','s'); switch c(1) case {'A','E','I','O','U','a','e','i','o','u'} disp([c,'以元音字母开头']); otherwise disp([c,'以辅音字母开头']); end %结果 请输入一个单词:book book以辅音字母开头
for语句
-
格式
for 循环变量=初值表达式:步长表达式:终值表达式 循环体语句 end for 循环变量=矩阵表达式 循环体语句 end
-
问题:
for k=[1,2,3,4] end for j=[1;2;3;4] end
- 这两个循环执行的次数相同吗?
不同! - for循环中的矩阵表达式是按列循环,如果是多行多列的话,会把每一列看作一个元素,所以第一个循环了4次,第二个循环了1次
- 这两个循环执行的次数相同吗?
while语句
-
格式
while 条件 循环体语句 end
-
while语句多用于循环次数不确定的情况
需要注意的地方
循环语句
使用循环语句应尽量预先分配内存空间
若一个变量所需要的内存空间是一个可预测的定值,我们应尽量提前为其分配内存空间.
以下面两段程序为例,演示这一点:
-
程序一:
tic for ii = 1:2000 for jj = 1:2000 A(ii,jj) = ii + jj; end end toc 1234567
程序输出
Elapsed time is 4.616199 seconds.
tic和toc这组命令用于给代码块计时
-
程序二:
tic A = zeros(2000, 2000); % 预先为变量分配内存空间 for ii = 1:size(A,1) for jj = 1:size(A,2) A(ii,jj) = ii + jj; end end toc 12345678
程序输出
Elapsed time is 2.786401 seconds.
可以看到,程序一比程序二所用的时间更长.这是因为: 对于程序一,没有预先为变量A
分配内存,因此每当A
的形状发生改变时,都需要重新为A
分配内存地址,这花费了更多的时间
省略号的使用
使用省略号...
拼接多行语句
在MATLAB中,省略号...
可以将多行语句拼接为一行,灵活使用该语句可以提高代码可读性
自定义函数
-
函数可以被存入
函数名.m
文件中,也可以以函数句柄的形式定义在内存中函数文件的基本结构
funtion 输出形参表=函数名(输入形参表)
注释说明部分
函数体语句
end
function
是一个关键字,声明该文件中保存的是一个函数.输入变量
和输出变量
是非必须的,函数既可以没有输入变量,也可以没有输出变量.函数名
应与.m
文件名相同,且不包含特殊字符(最好不要有中文).
-
例子
function [C,S] = circle(r) %circle 求半径为r的圆的周长和面积 C = 2.*pi.*r; S = pi.*r.*r; end
函数的调用
-
格式:
[输出实参表]=函数名(输入实参表)
-
例子
>> [C,S]=circle(1) C = 6.2832 S = 3.1416
-
- 匿名函数
-
格式
函数句柄变量=@(匿名函数输入参数)匿名函数表达式 函数句柄变量=@函数名
-
例子
>> f = @(x,y)x+y >> f(1,2) ans = 3
-
函数的参数和作用域
-
函数参数的可调性
nargin:输入实参的个数 nargout:输出实参的个数
- 可以通过控制输入实参的个数,经过判断输出不同的结果
-
全局变量和局部变量
-
全局变量的定义格式
global 变量名
- 多个变量名通过空格隔开
-