10.1 if语句

这个if语句是奥克塔夫的决策语句。有三种基本形式if语句最简单的形式是这样的:

if (condition)
  then-body
endif

condition是一个表达式,用于控制语句的其余部分将执行的操作then-body仅当condition是真的。

中的条件if若该语句的值为非零,则该语句被视为true;若该语句为零,则为false。如果条件表达式的值在if语句是向量或amatrix,只有当它不是空的并且全部的的元素为非零。概念上等效的代码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为true(即的值x可被2整除),则第一个printf语句,否则第二个printf语句进行评估。

的第三种也是最普遍的形式if语句允许将多个决策组合在一个语句中。看起来是这样的:

if (condition)
  then-body
elseif (condition)
  elseif-body
else
  else-body
endif

任意数量的elseif子句可能会出现。依次测试每个条件,如果其中一个条件为真,则其对应的条件body执行。如果没有一个条件为真,并且else条款存在,则其正文已执行。只有一个else子句可能出现,而且必须是语句的最后一部分。

在以下示例中,如果第一个条件为true(即的值x可被2整除),则第一个printf语句被执行。如果为false,则测试第二个条件,如果为true(即的值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中是允许的。如果是,则elseif会告诉Octave把这个当作新的if另一个中的语句if语句的else条款例如,如果你写

if (c1)
  body-1
else if (c2)
  body-2
endif

Octave将期望额外的输入来完成第一个if语句如果您以交互方式使用“八度体”,它将继续提示您进行其他输入。如果Octave正在从文件中读取此输入,它可能会抱怨丢失或不匹配end语句,或者,如果您没有使用更具体的end语句(endif,endfor等),它可能只是返回不正确的结果,而不返回任何警告消息。

如果我们重写上面的语句,就会更容易看到错误,

if (c1)
  body-1
else if (c2)
  body-2
endif

使用缩进显示Octave如何对语句进行分组。详见函数和脚本.


版权所有 © 2024-2025 Octave中文网

ICP备案/许可证号:黑ICP备2024030411号-2