# 条件结构

# if-elseif-else-end 语句

用法:

if 条件1
    代码块
elseif 条件2
    代码块
else
    代码块
end
注意:
`elseif` 关键字不能加空格,与 C/C++ 等语言不同。

使用 if 语句时, `if` 和 `end` 两个关键字任何时候都不能省略!

其余的用法与 C/C++ 都相同。首先判断 if 后的条件,若不符合再盘导演 elseif 后的条件。若仍然不符合,直接执行 else 后的语句。 若没有 else 关键字,直接退出 if 语句。

if 后条件也支持其他运算,如算术运算等。其值可以为一个数值常数,不是必须是逻辑值 01 。这里与逻辑表达式的结果相同。参见:MATLAB 学习笔记 4 - 逻辑运算

如果条件表达式是一个矩阵或向量,会报错,除非矩阵中全为非零值或全为零值,才会表示有效的值(可以看成 对矩阵使用 all 函数)。

如果想表示有一个非零元素就为逻辑 1 ,要先把矩阵拉成向量(使用线性索引),再进行一次 any ; 或者直接对该矩阵执行两次 any 函数。

当然,MATLAB 中 if 语句是可以嵌套使用的。

# switch-case-otherwise-end 语句

用法:

switch 开关表达式
    case 表达式 1
        语句 1
    case 表达式 2
        语句 2
    ……
        ……
    case 表达式 n
        语句 n
    otherwise 
        语句 n+1
end

同样的, switchend 两个关键字不能省略。

开关表达式必须是一个数值标量或者一个字符向量 / 字符串,不能是向量或矩阵。

只有开关表达式与某个 case 后的表达式相等时,对应的语句才会执行。

可以被 if 语句替代。

# 循环结构

# for-end 语句 (for 循环)

用于已知循环次数的情形,语法如下:

for 循环变量 = 向量或矩阵
    循环体
end

同样的, forend 两个关键字不能省略。

可以嵌套。

循环变量:用于迭代的变量名,它会在每次迭代中从矩阵或向量中取出一列的值。数值向量或者矩阵则表示了循环变量可以取值的范围。一旦循环变量遍历完数值向量或矩阵中的所有值,循环即结束。

e.g.e.g.

for i=1:5
disp(i);
end

输出:

1

2

3

4

5
A=randi([-3,3],2,4);
disp(A);        % 打印 A
for i=A
    i       % 语句后不加分号表示在命令行窗口显示该语句执行结果。
end

运行结果:可以发现 for 循环遍历了 A 矩阵的每一列

3    -2     3     2
3     3     0    -3


i =

     3
     3


i =

    -2
     3


i =

     3
     0


i =

     2
    -3

# while-end 语句 (while 循环)

允许在不知道具体循环次数的情况下进行循环。

用法:

while 循环表达式
    循环体
end

当循环表达式为真(逻辑值 1 )时则执行循环,直到循环表达式不为真推出循环。

可以嵌套。

同样的, whileend 两个关键字不能省略。
e.g.e.g.

求斐波那契数列第一个大于 99999 的项是第几项。

f(1)=1;
f(2)=1;
n=2;
while f(n)<99999
f(n+1)=f(n)+f(n-1);
n=n+1;
end
disp(n);

运行结果:

26

其中 f 是一个向量, n 是索引变量(相当于 C/C++ 的下标)。

while 循环,有无限循环的可能!

如果写代码时不小心写了一个无限循环,要强行终止循环,请按下 Ctrl + C

# 循环控制关键字 continuebreak

continue 进行下一次循环,break 直接退出整个循环,常常配合 if 语句使用。

当在嵌套的循环中使用,这两个关键字会对调用它们的循环体对应的循环进行控制,而对其余的循环体无影响。

e.g.e.g.

for i=1:5
    for j=2:6
        disp(i);
        disp(j);
        if(j%i==0)
            break;  % 仅使内层循环停止,而不影响外层循环。
        end
    end  
end
更新于 阅读次数