Alex_McAvoy

想要成为渔夫的猎手

Matlab 选择控制结构

【选择控制结构】

选择控制结构又称为分支结构,当程序执行到控制分支的语句时,首先判断条件,根据条件表达式的值选择相应的语句执行,并放弃另一部分语句的执行。

其既可以与顺序结构组合来构建简单的程序,也可以与顺序、循环结构组合构建复杂的程序。

【if 语句】

单分支结构(if 表达式)

语句结构:

1
2
3
if 条件表达式 
语句序列 % 条件表达式为真时,执行
end

流程图:

实例:

1
2
3
4
5
a=rand(1)*10;
disp(a);
if a>=5
disp('a>=5');
end

二分支结构(if-else 表达式)

语句结构:

1
2
3
4
5
if 条件表达式 
语句序列1 % 条件表达式为真时,执行
else
语句序列2 % 条件表达式为假时,执行
end

流程图:

实例:

1
2
3
4
5
6
7
a=rand(1)*10;
disp(a);
if a>=5
disp('a>=5');
else
disp('a<5');
end

多分支结构(if-elseif-else 表达式)

语句结构:

1
2
3
4
5
6
7
8
9
10
if 条件表达式1
语句序列1 % 条件表达式1为真时,执行
elseif 条件表达式2
语句序列2 % 前1个条件表达式为假,条件表达式2为真时,执行
elseif 条件表达式3
语句序列3 % 前2个条件表达式为假,条件表达式3为真时,执行
...
else
语句序列n % 前n-1个条件表达式均为假时,执行
end

流程图(以存在 3 个条件表达式的分支结构为例):

实例:

1
2
3
4
5
6
7
8
9
10
11
a=rand(1)*10;
disp(a);
if a<=3
disp('a<=3');
elseif a<=6
disp('3<a<=6');
elseif a<=9
disp('a<6<=9');
else
disp('a>9');
end

【switch-case 语句】

使用

作用:根据表达式的值,使流程跳转到不同的语句

语句结构:

1
2
3
4
5
6
7
8
9
10
11
12
13
switch 表达式
case 常量1 % 表达式=标量1
语句序列1 % 执行语句序列1
case 常量2 % 表达式=标量2
语句序列2 % 执行语句序列2
case 常量3 % 表达式=标量3
语句序列3 % 执行语句序列3
...
case 常量n % 表达式=标量n
语句序列n % 执行语句序列n
otherwise % 表达式不等于上面的 n 个值
语句序列n+1 % 执行语句序列n+1
end

流程图(以 3-case 语句为例):

1
2
3
4
5
6
7
8
9
10
a=ceil(rand(1)*10);
disp(a);
switch a
case 1
disp('a=1');
case 2
disp('a=2')
otherwise
disp('a>2')
end

与 if 语句的比较

if 语句 switch 语句
嵌套的 if 语句可读性弱 可读性强
比较字符串时,使用 strcmp() 函数进行比较 比较字符串时,自动调用strcmp()进行比较
可检测连续值、离散值 只能检测离散值

【try-catch 语句】

作用:捕获异常并处理

语句结构:

1
2
3
4
5
try
语句序列1 % 首先执行该序列,若执行过程中未出现错误,结束;若执行过程中出现错误,执行语句序列2
catch
语句序列2 % 语句序列1出错时,执行
end

流程图:

1
2
3
4
5
6
7
8
9
try
a=1;
b=[1,2;1];
a=2
catch
b=1
end
disp(a);
disp(b);

【说明】

共性:

  • 三种语句结构最后必须以 end 结尾
  • 依靠缩进来识别代码块
  • 语句序列中可以是一条命令、多条命令(顺序结构)、控制结构、循环结构
  • 建议在语句序列中的代码结尾加上分号 ;,负责会将该语句执行完毕后的值输出

if 语句:

  • if 语句中嵌套 if 语句时:
    • 嵌套时,if、elseif、else 以缩进进行匹配
    • if-else 中嵌套一个 if-else,本质上与 if-elseif-else 相同
    • 在实际编程时,应适当控制嵌套层数,建议不超过 3 层

switch-case 语句:

  • 要求 n 个标量不能相同
  • switch-case 语句 的表达式要求为标量或字符串
    • 当表达式为标量时,会执行 表达值==检测值 i 来比较
    • 当表达式为字符串时,会执行 strcmp(表达式,检测值i) 来比较

try-catch 语句:

  • try-catch 语句只提供两个可供选择的语句序列,在实际应用中,往往嵌套使用
  • 对于语句序列 1 来说,在其执行过程中,若某条语句出错,该语句之上的运行结果依然保留,只是该语句之后的语句不再执行
  • 常用的错误或警告指令有:
    • lasterr:显示上一次错误信息,并终止程序
    • lastwarn:显示上一次警告信息,并继续运行程序
    • errortrap:错误发生后,控制程序是否继续执行
    • error('message'):显示上一次出错信息 message,并终止程序
    • lastwarn('message'):显示上一次警告信息 message,并继续运行程序
感谢您对我的支持,让我继续努力分享有用的技术与知识点!