if 语句是 Octave 的决策语句。if 语句有三种基本形式。其最简单的形式如下:
if (condition) then-body endif
condition 是一个控制语句其余部分行为的表达式。then-body 仅在 condition 为真时执行。
if 语句中的条件,若其值为非零则视为真,为零则视为假。如果 if 语句中条件表达式的值是一个向量或矩阵,那么仅当该值非空且所有元素都非零时才视为真。当 condition 是矩阵时,概念上等价的代码如下所示。
if (matrix) ≡ if (all (matrix(:)))
if 语句的第二种形式如下:
if (condition) then-body else else-body endif
如果 condition 为真,则执行 then-body;否则执行 else-body。
示例如下:
if (rem (x, 2) == 0)
printf ("x is even\n");
else
printf ("x is odd\n");
endif
在此示例中,如果表达式 rem (x, 2) == 0 为真(即 x 的值能被 2 整除),则执行第一个 printf 语句,否则执行第二个 printf 语句。
if 语句的第三种也是最通用的形式允许将多个决策合并到一条语句中。其形式如下:
if (condition) then-body elseif (condition) elseif-body else else-body endif
可以出现任意数量的 elseif 子句。依次测试每个条件,一旦发现某个条件为真,就执行其对应的 body。如果所有条件都不为真且 else 子句存在,则执行其主体。只能有一个 else 子句,并且它必须是语句的最后一部分。
在以下示例中,如果第一个条件为真(即 x 的值能被 2 整除),则执行第一个 printf 语句。如果为假,则测试第二个条件;若第二个条件为真(即 x 的值能被 3 整除),则执行第二个 printf 语句。否则,执行第三个 printf 语句。
if (rem (x, 2) == 0)
printf ("x is even\n");
elseif (rem (x, 3) == 0)
printf ("x is odd and divisible by 3\n");
else
printf ("x is odd\n");
endif
注意 elseif 关键字不能拼写成 else if(尽管 Fortran 允许这样写)。如果写成 else if,else 和 if 之间的空格会让 Octave 将其视为另一个 if 语句嵌套在前一个 if 语句的 else 子句中。例如,如果你这样写:
if (c1) body-1 else if (c2) body-2 endif
Octave 会期望更多的输入来完成第一个 if 语句。如果你以交互方式使用 Octave,它会继续提示你输入更多内容。如果 Octave 从文件读取此输入,它可能会报告缺少或不匹配的 end 语句,或者,如果你没有使用更具体的 end 语句(endif、endfor 等),它可能仅产生不正确的结果而不给出任何警告信息。
将上述语句重写如下,利用缩进来展示 Octave 对语句的分组方式,则更容易看出错误:
if (c1)
body-1
else
if (c2)
body-2
endif
请参阅 函数和脚本。
版权所有 © 2024-2026 Octave中文网
ICP备案/许可证号:黑ICP备2024030411号-2