Skip to content

MATLAB - 判断语句

决策结构是编程的基本组成部分。它们允许您的代码根据不同情况做出不同响应,使您的程序智能和动态。这些结构要求您指定一个或多个要评估的条件。根据条件是真还是假,会执行特定的代码块。

将其想象成一个十字路口。一个条件(例如,“下雨了吗?”)决定了您的程序将采取哪条路径。如果为真,它可能会执行“带伞”的代码。如果为假,它可能会执行“戴墨镜”的代码。这种对程序执行流程的控制对于几乎任何任务都至关重要。

MATLAB 提供了一套标准的决策语句,这是许多编程语言的共同特征。以下是可用结构的摘要:

序号语句与描述
1if … end 语句
一个 if ... end 语句由一个逻辑表达式后跟一个或多个语句组成,这些语句仅在该表达式为真时执行。
2if…else…end 语句
一个 if 语句后可跟一个可选的 else 块。该 else 块在逻辑表达式为假时执行。
3if…elseif…else…end 语句
此结构用于在多个(两个以上)备选项之间做出决策。一旦 if 或 elseif 表达式被发现为真,则执行相应的语句,并跳过结构的其余部分。
4嵌套 if 语句
您可以在另一个 if 或 elseif 语句内使用一个 if 或 elseif 语句。然而,对于复杂的逻辑,这可能变得难以阅读,应谨慎使用。
5switch 语句
一个 switch 语句提供了一种简洁的方式,用于测试单个变量与一系列可能值是否相等。
6嵌套 switch 语句
与嵌套 if 语句类似,您可以在另一个 switch 语句内使用 switch 语句。

这是最简单的决策形式。代码块仅在条件满足时执行。

%% 示例:检查温度读数是否表示发烧
temperature = 38.5;
if temperature > 37.5
disp('Warning: High temperature detected. Potential fever.');
end
% --- Output ---
% 警告:检测到高温。可能发烧。

此结构为条件为假时提供了一条替代路径。

%% 示例:检查学生是否及格
score = 65;
passingGrade = 50;
if score >= passingGrade
disp('Congratulations, you passed!');
else
disp('You did not pass. Better luck next time.');
end
% --- Output ---
% 恭喜,您及格了!

这是检查多个互斥条件时的理想结构。它比深度嵌套的 if 语句更具可读性。

%% 示例:根据分数分配字母等级
score = 88;
if score >= 90
grade = 'A';
elseif score >= 80
grade = 'B';
elseif score >= 70
grade = 'C';
elseif score >= 60
grade = 'D';
else
grade = 'F';
end
fprintf('等级是:%s\n', grade);
% --- Output ---
% 等级是:B

一个 switch 语句是当您需要根据一组特定的离散值检查单个变量时的绝佳选择。它适用于数字、字符向量以及现代的 string 或 categorical 数组。

%% 示例:根据所选菜单选项做出响应(使用字符串)
% 在现代 MATLAB 中,文本更推荐使用字符串(双引号)。
menuSelection = "Save";
switch menuSelection
case "Open"
disp('正在打开文件...');
case "Save"
disp('正在保存文件...');
case "Close"
disp('正在关闭文件...');
otherwise
disp('无效选择。');
end
% --- Output ---
% 正在保存文件...
  • 使用 elseif 提高清晰度:避免深度嵌套的 if 语句。一个 if...elseif...else 链更易于阅读和维护。
  • 利用短路求值 (Short-Circuiting):MATLAB 对 &&(逻辑与)和 ||(逻辑或)使用短路求值。在 conditionA && conditionB 这样的表达式中,只有当 conditionA 为真时才会评估 conditionB。这可以用于防止错误,例如:if (x ~= 0) && (1/x > 5),这可以防止除零错误。
  • 处理 ‘Otherwise’ 情况:在使用 switch 或 if...elseif 时,最好包含一个最终的 else 或 otherwise 块来处理任何意外值。这会使您的代码更健壮。
  • 谨慎比较浮点数:由于计算机存储浮点数的方式,使用 == 进行直接比较可能不可靠。例如,0.1 + 0.2 == 0.3 为 false!相反,请检查绝对差值是否在小容差范围内:if abs(a - b) < 1e-9。
  • 赋值与比较:一个非常常见的错误是在 if 条件内部使用赋值运算符 = 而不是比较运算符 ==(例如 if x = 5)。MATLAB 编辑器通常会用警告标记此错误。
  • 缺少 end 关键字:每个 if、switch、for 和 while 块都必须以 end 关键字结束。MATLAB 编辑器通过自动缩进和突出显示匹配的关键字来帮助您,从而更容易发现缺少的 end。
  • 字符串与字符向量:在较旧的 MATLAB 代码中,您会看到用于字符向量的单引号('text')。现代 MATLAB 强烈倾向于使用双引号("text")来表示 string 对象,它们更灵活。在进行比较时请注意类型。