在划分控制结构所对应的代码块时,编程语言通常采用如下三种做法:

  • 基于大括号{}:例如C/C++,Java
  • 基于end标记:例如FORTRAN,MATLAB
  • 基于缩进:Python

MATLAB受到FORTRAN的影响很大,也采用基于end的代码块标记。

if 条件语句

提供例子即可

1
2
3
if x>1
x=1;
end
1
2
3
4
5
if x>1
y=x;
else
y=1;
end
1
2
3
4
5
6
7
if x>10
y=x;
elseif x>0
y=1;
else
y=0
end

switch 条件语句

MATLAB支持基本的switch语句,我们可以判断表达式的值以进入不同的分支,不需要在分支结束使用break,因为不会进入下一个分支,默认分支为otherwise。MATLAB并不要求case后面的结果是常量。

1
2
3
4
5
6
7
8
switch x
case 1
z=1
case 2
z=2
otherwise
z=3
end

对于更复杂的switch情况,我们还可以使用下面的“反转”技巧,判断表达式取为true,在case中加入不同的布尔表达式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
score = 85;

switch true
case (score >= 90)
disp('Grade: A');
case (score >= 80)
disp('Grade: B');
case (score >= 70)
disp('Grade: C');
case (score >= 60)
disp('Grade: D');
otherwise
disp('Grade: F');
end

for 循环语句

for循环语句的标准格式如下

1
2
3
for index = startValue:step:endValue
% 循环体代码
end

和其他编程语言通常采用的左闭右开区间不同,这里的索引区间实际上是闭区间

例如

1
2
3
4
for i = 1:2:11
disp(i);
end
% 1 3 5 7 9 11

对于步长为1的情况,可以省略步长

1
2
3
4
for i = 1:10
disp(i);
end
% 1 2 3 4 5 6 7 8 9 10

可以用双重循环来遍历一个矩阵

1
2
3
4
5
6
B = [1, 2;3, 4];
for i = 1:size(B, 1)
for j = 1:size(B, 2)
disp(B(i, j));
end
end

和其他语言一样,在循环中支持如下选项:

  • break跳出当前循环;
  • continue跳转进入下一次循环。

必须注意:i,j默认是虚数单位,如果用其作为循环变量,在语法上不会报错,但是后续不能再将其用作虚数单位。

for 遍历语句

我们可以用下面的语法方便地遍历行向量中的每一项

1
2
3
4
A = [1 2 3];
for i=A
disp(i)
end

对于矩阵,遍历语句每次会获取一列

1
2
3
4
5
6
A = [1 2 3
4 5 6];

for i=A
disp(i)
end

输出

1
2
3
4
5
6
7
8
1
4

2
5

3
6

while 循环语句

while循环没什么好说的,和其他语言没什么区别,例如

1
2
3
4
5
w=0;u=0;

while u<10
w=w+u;u=u+1;
end

同样也支持breakcontinue语句。

补充

上述结构可以随意嵌套,例如

1
2
3
4
5
6
7
8
9
10
11
12
13
for c = 1:ncols
for r = 1:nrows

if r == c
A(r,c) = 2;
elseif abs(r-c) == 1
A(r,c) = -1;
else
A(r,c) = 0;
end

end
end