Objective-C 程式設計學習筆記 Ch06
- Ch06-介紹 Objective-C 的流程控制。
- 本章會介紹 if, switch 以及 三元運算子。
目錄:
- (1) if 敘述
- (2) switch 敘述
- (3) 三元運算子
if 敘述我們在上一章節已有稍微介紹,在這章節會介紹得更深入一點點...。
(1) if 敘述
if 敘述用來根據判斷的條件,判斷執行哪一段程式。以口語化的表達方式舉例『如果消費滿 100元,就可以打 9 折』,則其 if 的敘述大概會像這樣:
if( spent >= 100)
spent = spent * 0.9
if敘述的描述方式 :
if(條件式){
如果條件式為 TRUE,就執行此程式
}
假如你的程式區塊只有一行,那麼可以省略 { } 大括弧。
if(條件式)
如果條件式為 TRUE,就執行此程式
if...else 敘述 :
if...else 會是二擇一的選擇,其敘述方式如下:
if(條件式){
如果條件式為 TRUE,就執行此程式
}else{
如果條件式為 FALSE,就執行此程式
}
一樣的,如果你的程式區塊也是都只有一行,則能省略 { } 大括弧。
假如要判斷客戶是否為會員,如果是則總金額打 8 折,如果不是只能打 9 折:
if(user == member){
spent = spent * 0.8
}else{
spent = spent * 0.9
}
大於兩種以上的條件判斷 if...else if...else
當你需要判斷執行的條件大於 2 種以上時,你可以使用 if...else if...else,其敘述如下:
if(條件判斷1){
如果條件判斷1為 TRUE 時,則執行此區塊的程式
}else if(條件判斷2){
當條件判斷1不成立時,則會進入到條件判斷2,若條件判斷2為 TRUE 時,則執行此區塊的程式
}else{
當條件判斷1與2皆不成立時,則執行此區塊的程式
}
if 敘述可以巢狀
if(條件式){
if(條件式){
如果條件式為 TRUE,就執行此程式
}else{
如果條件式為 FALSE,就執行此程式
}
}
小練習 1:
之前的章節我們有提到,除數不可為 0,比方說 9/0 是不合法的,因為除數不可為 0。接下來我們來寫一個 if else 的敘述,讓使用者輸入分子跟分母,判斷分母的數字不可為 0,若為 0 則顯示相關錯誤訊息。( 分子的英文是 Numerator, 分母的英文是 denominator)。
int numerator;
int denominator;
int result;
numerator = denominator = 0;
NSLog(@"Please Enter Your Numerator");
scanf("%i", &numerator);
NSLog(@"Please Enter Your Denominator");
scanf("%i", &denominator);
if(denominator<=0){
NSLog(@"Error, Denominator can't <= 0");
}else{
result = numerator/denominator;
NSLog(@"%i / %i = %i", numerator, denominator, result);
}
我們來測試看看 30/10 的 NSLog 結果: (為了排版效果我有自己做一些斷行...實際上輸出不會排的這麼剛好)
2014-01-02 20:48:59.236 FractionTest[33634:303]
Please Enter Your Numerator
30
2014-01-02 20:49:04.669 FractionTest[33634:303]
Please Enter Your Denominator
10
2014-01-02 20:49:06.150 FractionTest[33634:303]
30 / 10 = 3
Program ended with exit code: 0
接著我們再來測試指定 0 給 Denominator,驗證是否會進入到 if(denominator<=0) 的程式區塊:
2014-01-02 20:53:32.120 FractionTest[33658:303]
Please Enter Your Numerator
30
2014-01-02 20:53:33.700 FractionTest[33658:303]
Please Enter Your Denominator
0
2014-01-02 20:53:34.637 FractionTest[33658:303]
Error, Denominator can't <= 0
Program ended with exit code: 0
介紹 scanf( )輸入函式
在上面的範例我們使用到了 scanf 這個輸入函式,也就是你透過鍵盤,輸入值給電腦(上面的例子是使用 scanf 讓你分別輸入 Numerator 以及 Denominator 的值 ),並且可以將輸入的值存到某個變數的記憶體空間。 scanf 的表達方式為 :
scanf(“格式化輸入內容”, &參數1, &參數2, ...&參數n);
- 其『格式化輸入內容』,通常僅含相對應的參數的列印格式:$i, %d, %c, %f ... 等。
- 『&參數』代表著對應格式的變數記憶體位置。
比方說,我們宣告兩個變數,分別是身高跟體重,其值必須讓使用者自己輸入:
int weight;
int height;
NSLog(@"Please enter weight and height");
scanf("%i%i", &weight, &height);
NSLog(@"weight is %i, height is %i",weight, height);
其第一個輸入的數字就會儲存到 weight 變數的記憶體位置(&weight),而第二次輸入的數字會儲存到 height 的記憶體位置(&height),兩個變數的輸入格式都是 %i。
介紹 BOOL 布林形態
- 在 Objective-C 中, bool 形態的值的表示方式,不是 true 就是 false,不是 Yes 就是 No,常常會以數字表示, 0 表示 false, 1 表示 true。在 if 的判斷敘述中,之前提到只要 if 的條件式為 TRUE,即代表滿足條件。因此當條件式的結果不為 0(false),都會被當成是滿足條件。
有些時候你可能會遇到 if 的條件式沒有關係運算子(>=, >, < ...),這是正常的現象,因為條件式只要非 0 ,都會被當成 true。
例子1:
猜猜看這段程式哪一個 if 敘述會被執行:
int test_1 = 0;
int test_2 = 1;
if(test_1){
NSLog(@"test_1 is true");
}
if(test_2){
NSLog(@"test_2 is true");
}
答案是第二個,因為 test_2 的值為 1,1 所代表的 bool 形態是 true,因此以滿足執行條件。
例子2:
例子2 我們直接宣告一個 Bool 形態的變數 isHot,以及整數形態的度數。 if 敘述用來判斷 degree 是否超過 32 度,若超過則 isHot 為 Yes,否則為 No。最後再判斷 isHot 的布林值,若布林值為 1 或 Yes 或 TRUE 則都等於成立(非 0 即成立)。你也可以試試看把 isHot = Yes 或 NO 替換成 TRUE 或 FALSE 或是 1 或 0 其結果都相同。
BOOL isHot;
int degree = 36;
if(degree >=32){
isHot = YES;
}else{
isHot = NO;
}
if(isHot){
NSLog(@"Weather is hot!");
}
(2) switch 敘述
switch 敘述類似 if...else if...else,其敘述語法如下:
switch(條件式 expression){
case "1":
如果條件式結果是 1,則執行此區塊程式碼。
break;
case "2":
如果條件式結果是 2,則執行此區塊程式碼。
break;
case "3":
case "4":
如果條件式結果是 3 或 4,則執行此區塊程式碼。
break;
default:
如果上述的條件都沒有符合,則執行此區塊程式碼。
}
- 當條件式滿足 1 時,就會進入到 case "1" 的程式敘述裡面,若條件式不為 1,則往後面的 case 繼續尋找,直到尋到符合 case 值的條件式,假如都沒有找到符合的 case,則會進入到 default,default 是一種特別的 case,當沒有 case 的值滿足條件式的值時才會執行 default 的程式,。
- 每個 case 後面一定要加 break 敘述,否則程式就不會中斷,會一直往下執行 (default 可有可無),break 是用來立即離開 switch 敘述,比方說當條件式等於 1 時,就已經滿足 case "1",執行 case "1" 內的程式,遇到 break 之後就不會再往後面的 case 執行。
- 可以多個 case 共用一樣的程式敘述,比方說
case "3": case "4": 如果條件式結果是 3 或 4,則執行此區塊程式碼。 break;
就是條件式滿足3 或是 滿足4 都會執行一樣的程式。
(3) 三元運算子
三元運算子其實也是 if...else,只是其敘述的方式比較特別,敘述方式為:
條件式 ? 程式敘述1 : 程式敘述2
三元運算子的執行判斷為: 如果條件式等於 TRUE,則執行程式敘述1,否則就執行程式敘述2。 其實這種表達方式就跟下面這段 if...else 相同。
if(條件式){
程式敘述1;
}else{
程式敘述2;
}
例子1:
用來判斷數學成績是否及格,顯示不同的 NSLog 字串:
int math_score = 57;
math_score < 60 ? NSLog(@"you fail") : NSLog(@"you pass!");
假如成績低於 60 分,則會顯示 you fail 字串,反之若是及格,則會顯示 you pass!。
更浮雜一點的,可以做到巢狀的判斷。假如數學成績超過 60 分,則會進入另一個三元運算子,也就是另一段 if...else 的判斷,假如成績又大於 90,則顯示 Excellent!,低於 90 則顯示 you pass!。
int math_score = 99;
math_score < 60 ? NSLog(@"you fail") :
( math_score>90 ? NSLog(@"Excellent!") : NSLog(@"you pass!") );
例子2:
這個例子用來比較兩個數值誰比較大,較大的值則會指派給變數 max_value:
int value_a = 20;
int value_b = 40;
int max_value = value_a >= value_b ? value_a: value_b;
NSLog(@"max_value is %i", max_value);
下一章節,將會介紹 Objective-C 類別 。
從類別開始,將會進入物件導向的程式基礎。
0 意見:
張貼留言