1. 程式人生 > >Octave 教程:if/switch/while/for/break/continue 語句

Octave 教程:if/switch/while/for/break/continue 語句

  本內容將介紹 Octave 的控制語句(if/switch)和迴圈語句 (for/while/break/continue)的使用方法。
  如果您已經懂任何一門程式語言,只需要粗略閱讀即可,基本上就知道如何使用了。如果您不懂任何程式語言,建議詳細閱讀以下內容。

一、控制語句

  Octave 提供 if 和 switch 控制語句。

1.1 if 語句

1.1.1 if…end 語句

  在 Octave 中,if…end 語句的使用語法如下:

if <expression>
  <statements>
end

  如果表示式的計算結果是 true

,將執行其中的語句;否則,不執行。
  在 Octave 中輸入以下程式碼:

fprintf('Hello world !\n');

if false         % 表示式的值為 false,不執行 if 和 end 之間的語句
  fprintf('my name is Octave.\n');
end

執行以上程式碼,輸出以下內容:

Hello world !
1.1.2 if…else…end 語句

  在 Octave 中,if…end 語句的使用語法如下:

if <expression>
  <statements>
else
  <statements>
end

  如果表示式的計算結果是 true,將執行 if 和 else 之間的語句;否則,執行 else 和 end 之間的語句。
  在 Octave 中輸入以下程式碼:

fprintf('Hello world !\n');

if true % 表示式的值為 true,執行 if 和 else 之間的語句
  fprintf('my name is Octave.\n');
else
  fprintf('my name is Matlab.\n');
end

執行以上程式碼,輸出以下內容:

Hello world !
My name is Octave.
1.1.3 if…elseif…else…end 語句

  在 Octave 中,if…end 語句的使用語法如下:

if <expression>
  <statements>
elseif
  <statements>
else
  <statements>
end

  最終只會執行其中的某一個語句。在實際使用中,中間可以存在多個 elseif,並且最後一個 else 是可選的。
  在 Octave 中輸入以下程式碼:

fprintf('Hello world !\n');

a = 20;
if a == 10  % 表示式的值為 false,跳轉到 elseif 語句進行判斷
  fprintf('my name is XXX\n');
elseif a == 20% 表示式的值為 true,執行elseif和else之間的語句,執行完之後,跳轉到 end 之後
  fprintf('my name is Octave.\n');
else
  fprintf('my name is Matlab.\n');
end

執行以上程式碼,輸出以下內容:

Hello world !
My name is Octave.
1.1.4 巢狀 if 語句

  在 Octave 中,if…end 語句的使用語法如下:

if <expression>
  if <expression>
    <statements>
  end
end

  在 Octave 中輸入以下程式碼:

fprintf('Hello world !\n');

a = 10;
if a < 20
  if true
    fprintf('my name is Octave.\n');
  end
end

執行以上程式碼,輸出以下內容:

Hello world !
My name is Octave.

1.2 switch 語句

  switch 語句有條件地執行一組語句,這組語句是從幾個選項裡選擇執行的,其中每個選項涵蓋了一個 case 語句。
  在 Octave 中,switch 語句的使用語法如下:

switch <switch_expression>
  case <case_expression>
    <statements>
  case <case_expression>
    <statements>
  ...
  ...
  otherwise
    <statements>
end

  當有一個 case 表示式為 true 時,Octave 就執行與之對應的語句,並且不再執行其他語句,然後直接退出 switch 語句塊。其中, otherwise 語句塊是可選的,case 語句塊個數為任意多個。
  注意:在 Octave 中其他 case 的關鍵字是 otherwise,和一般的程式語言的 default 不同。
  在 Octave 中輸入以下程式碼:

fprintf('Hello world !\n');

name = 'Octave';
switch (name)
  case 'Matlab'
    fprintf('My name is Matlab.\n');
  case 'Octave'
    fprintf('My name is Octave.\n');
   otherwise
    fprintf('My name is XXX.\n');
end

執行以上程式碼,輸出以下內容:

Hello world !
My name is Octave.

  switch 語句和 if 語句一樣也可以進行巢狀使用,具體使用方法大致相同,就不詳細說明了。

二、迴圈語句

  在一般情況下,程式中的語句都是按照順序執行的。不過迴圈語句允許程式多次執行一個語句。
  Octave 提供 while 和 for 迴圈語句,以及 break 和 continue 迴圈控制語句。

2.1 while 迴圈

  只要表示式為 true,while 迴圈會重複執行 while 和 end 之間的運算式。
  在 Octave 中,while 語句的使用語法如下:

while <expression>
  <statements>
end

  在 Octave 中輸入以下程式碼:

a = 10;
while (a < 15)
  fprintf('value of a: %d\n', a);
  a++;
end

執行以上程式碼,輸出以下內容:

value of a: 10
value of a: 11
value of a: 12
value of a: 13
value of a: 14

2.2 for 迴圈

  for 迴圈是一個重複的控制結構,可以有效地寫一個迴圈,只是執行的次數是特定的。
  在 Octave 中,for 語句的使用語法如下:

for index = values
  <statements>
end

  for 迴圈的值有下面三種形式:

格式 描述
init_val:end_val 索引變數以步進值為 1,從初始值遞增,並重復執行程式語句,直到索引值大於終值。
init_val:step:end_val 與上面的格式相同,不過這裡的步進值為 step。
val_array 在每個迭代 val_array 陣列的後續列中建立列向量索引。

  看完上面的解釋可能還是很懵懂,可以參照下面的例子進行理解。
例 1:
  在 Octave 中輸入以下程式碼:

for a = 10:20
  fprintf('value of a: %d\n', a);
end

執行以上程式碼,輸出以下內容:

value of a: 10
value of a: 11
value of a: 12
value of a: 13
value of a: 14
value of a: 15
value of a: 16
value of a: 17
value of a: 18
value of a: 19
value of a: 20

例 2:
  在 Octave 中輸入以下程式碼:

for a = 10:2:20
  fprintf('value of a: %d\n', a);
end

執行以上程式碼,輸出以下內容:

value of a: 10
value of a: 12
value of a: 14
value of a: 16
value of a: 18
value of a: 20

例 3:
  在 Octave 中輸入以下程式碼:

for a = [10, 20, 16, 18, 12, 14]
  fprintf('value of a: %d\n', a);
end

執行以上程式碼,輸出以下內容:

value of a: 10
value of a: 20
value of a: 16
value of a: 18
value of a: 12
value of a: 14

  迴圈語句和控制語句一樣,也可以進行巢狀使用。

2.3 break 語句

  break 語句用於終止 for 或 while 迴圈的執行。當在迴圈體內執行到該語句的時候,程式將會跳出迴圈,繼續執行迴圈體語句的下一語句。
  在 Octave 中輸入以下程式碼:

for a = [10, 20, 16, 18, 12, 14]
  if (a == 18)
    break;
  end
  fprintf('value of a: %d\n', a);
end

執行以上程式碼,輸出以下內容:(當 a == 18 時,直接跳出迴圈體)

value of a: 10
value of a: 20
value of a: 16

2.4 continue 語句

  continue 語句控制跳過迴圈體的某些語句。當在迴圈體內執行到該語句時,程式將跳過迴圈體中剩餘的語句,繼續下一次迴圈。與 break 的不同點是:break 是直接跳出迴圈體;而 continue 只是終止本輪迴圈,沒有跳出迴圈體。
  在 Octave 中輸入以下程式碼:

for a = [10, 20, 16, 18, 12, 14]
  if (a == 18)
    continue;
  end
  fprintf('value of a: %d\n', a);
end

執行以上程式碼,輸出以下內容:(當 a == 18 時,終止本輪迴圈,繼續下輪迴圈。可以對比上面的 break 語句例子)

value of a: 10
value of a: 20
value of a: 16
value of a: 12
value of a: 14

參考:
[1] https://www.w3cschool.cn/matlab/