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/