第二章 結構化程式和自定義函式
阿新 • • 發佈:2020-09-21
第二章 結構化程式和自定義函式
邏輯運算子
運算子 | 意義 |
---|---|
< |
小於 |
<= |
小於或等於 |
> |
大於 |
>= |
大於或等於 |
== |
等於 |
~= |
不等於 |
&& |
且 |
|| |
或 |
流程控制語句
流程控制語句 | 作用 |
---|---|
if, elseif, else |
若if 語句為真,則執行子句 |
switch, case, otherwise |
根據switch 語句內容判斷執行哪個子句 |
while |
重複執行子句直到while 中的條件為假 |
for |
執行子句固定次數 |
try, catch |
執行子句並捕獲執行過程中的異常 |
break |
跳出迴圈 |
continue |
直接進入下一次迴圈 |
end |
結束子句 |
pause |
暫停程式 |
return |
返回到呼叫函式處 |
if語句
-
單分支if語句
-
語句格式
if 條件 語句組 end
-
關於條件
- 條件是標量時,非零表示條件成立,零表示條件不成立
- 條件是矩陣時,矩陣為非空,且不含零元素,則條件成立,反之,條件不成立
-
-
雙分支if語句
-
語句格式
if 條件 語句組1 else 語句組2 end
-
-
多分支if語句
-
語句格式
if 條件1 語句組1 elseif 條件2 語句組2 ··· elseif 條件m 語句組m else 語句組n end
-
switch語句
-
語句格式
switch 表示式 case 結果表1 語句組1 case 結果表2 語句組2 ··· case 結果表m 語句組m otherwise 語句組n end
-
switch表示式應該是一個其值可以列舉的表示式
-
case結果表為switch表示式的取值,當取值有多個時,用單元資料表示
c = input('請輸入一個單詞:','s'); switch c(1) case {'A','E','I','O','U','a','e','i','o','u'} disp([c,'以母音字母開頭']); otherwise disp([c,'以子音字母開頭']); end %結果 請輸入一個單詞:book book以子音字母開頭
for語句
-
格式
for 迴圈變數=初值表示式:步長表示式:終值表示式 迴圈體語句 end for 迴圈變數=矩陣表示式 迴圈體語句 end
-
問題:
for k=[1,2,3,4] end for j=[1;2;3;4] end
- 這兩個迴圈執行的次數相同嗎?
不同! - for迴圈中的矩陣表示式是按列迴圈,如果是多行多列的話,會把每一列看作一個元素,所以第一個迴圈了4次,第二個迴圈了1次
- 這兩個迴圈執行的次數相同嗎?
while語句
-
格式
while 條件 迴圈體語句 end
-
while語句多用於迴圈次數不確定的情況
需要注意的地方
迴圈語句
使用迴圈語句應儘量預先分配記憶體空間
若一個變數所需要的記憶體空間是一個可預測的定值,我們應儘量提前為其分配記憶體空間.
以下面兩段程式為例,演示這一點:
-
程式一:
tic for ii = 1:2000 for jj = 1:2000 A(ii,jj) = ii + jj; end end toc 1234567
程式輸出
Elapsed time is 4.616199 seconds.
tic和toc這組命令用於給程式碼塊計時
-
程式二:
tic A = zeros(2000, 2000); % 預先為變數分配記憶體空間 for ii = 1:size(A,1) for jj = 1:size(A,2) A(ii,jj) = ii + jj; end end toc 12345678
程式輸出
Elapsed time is 2.786401 seconds.
可以看到,程式一比程式二所用的時間更長.這是因為: 對於程式一,沒有預先為變數A
分配記憶體,因此每當A
的形狀發生改變時,都需要重新為A
分配記憶體地址,這花費了更多的時間
省略號的使用
使用省略號...
拼接多行語句
在MATLAB中,省略號...
可以將多行語句拼接為一行,靈活使用該語句可以提高程式碼可讀性
自定義函式
-
函式可以被存入
函式名.m
檔案中,也可以以函式控制代碼的形式定義在記憶體中函式檔案的基本結構
funtion 輸出形參表=函式名(輸入形參表)
註釋說明部分
函式體語句
end
function
是一個關鍵字,宣告該檔案中儲存的是一個函式.輸入變數
和輸出變數
是非必須的,函式既可以沒有輸入變數,也可以沒有輸出變數.函式名
應與.m
檔名相同,且不包含特殊字元(最好不要有中文).
-
例子
function [C,S] = circle(r) %circle 求半徑為r的圓的周長和麵積 C = 2.*pi.*r; S = pi.*r.*r; end
函式的呼叫
-
格式:
[輸出實參表]=函式名(輸入實參表)
-
例子
>> [C,S]=circle(1) C = 6.2832 S = 3.1416
-
- 匿名函式
-
格式
函式控制代碼變數=@(匿名函式輸入引數)匿名函式表示式 函式控制代碼變數=@函式名
-
例子
>> f = @(x,y)x+y >> f(1,2) ans = 3
-
函式的引數和作用域
-
函式引數的可調性
nargin:輸入實參的個數 nargout:輸出實參的個數
- 可以通過控制輸入實參的個數,經過判斷輸出不同的結果
-
全域性變數和區域性變數
-
全域性變數的定義格式
global 變數名
- 多個變數名通過空格隔開
-