Objective-C 選擇結構

  對於任何程序語言來講,有能力進行判斷是一項基本特性。須要在執行循環語句時,判斷什麼時候終止循環。Objective-C程序設計語言也構造瞭如下幾種判斷結構:express

  • if語句。
  • switch語句。
  • conditional語句。

------if語句函數

  Objective-C程序設計語言提供了一半的判斷能裏,即if語句這樣的語言結構。這種語句的通常格式以下:測試

 

if(expression)
    program statement

 

 

  假設要將「若是不下雨,我就去游泳」這樣的句子轉換成Objective-C語言,可以使用上述if語句格式,將這個句子「編寫」成如下格式:spa

1   if(it is not raining)
2 
3     I will go swimming

 

  if語句根據指定的條件,限定程序語句的執行(或者括在花括號中的多條語句)。「若是不下雨,我就去游泳」。相似的,在程序語句設計

 

1 if(count > MAXNUM_SONG)
2 
3     [playlist maxExceeded];

 

  只要,count的值大於MAXNUM_SONG,就會發送消息maxExceeded給playlist;不然,這條消息將被忽略。code

  例如,對整數取絕對值:blog

  

 1 //
 2 //  main.m
 3 //  LogXu
 4 //
 5 //  Created by 許朕 on 15/2/9.
 6 //  Copyright (c) 2015年 com.example. All rights reserved.
 7 //
 8 
 9 #import <Foundation/Foundation.h>
10 
11 int main(int argc, const char * argv[]) {
12     @autoreleasepool {
13         
14         int number=0;
15         NSLog(@"Please Input Number:");
16         scanf("%i",&number);
17         if (number<0) {
18             number = -number;
19             
20         }
21         NSLog(@"The absolue value is %i",number);
22         NSLog(@"Hello, World!");
23     }
24     return 0;
25 }
1 2015-02-09 13:51:09.938 LogXu[3501:415469] Please Input Number:
2 -100
3 2015-02-09 13:51:14.143 LogXu[3501:415469] The absolue value is 100
4 2015-02-09 13:51:14.143 LogXu[3501:415469] Hello, World!
5 Program ended with exit code: 0
2015-02-09 13:52:44.896 LogXu[3512:417120] Please Input Number:
2000
2015-02-09 13:52:46.665 LogXu[3512:417120] The absolue value is 2000
2015-02-09 13:52:46.665 LogXu[3512:417120] Hello, World!
Program ended with exit code: 0

  程序運行了兩次,目的是驗證它能正確運行。向用戶顯示一條消息以後,用戶將輸入整數值,程序將改制存儲到number中,而後對number的值進行測試,肯定number是否小於0。若是number小於0,則對number取負。若是number不小於0,則直接跳過這條語句。隨後程序將顯示number的絕對值,並終止運行。rem

  下面介紹一個將一個分數轉換成一個十進制的值的程序,而且程序自帶判斷分母是否爲0的功能:it

1.Newfraction.hio

 1 //
 2 //  Newfraction.h
 3 //  LogXu
 4 //
 5 //  Created by 許朕 on 15/2/9.
 6 //  Copyright (c) 2015年 com.example. All rights reserved.
 7 // 這是定義部分
 8 
 9 #import <Foundation/Foundation.h>
10 
11 @interface Newfraction : NSObject
12 //numerator and denomiantor 爲傳入參數
13 -(void)newfractionWithSetnumerator :(int)numerator Setdenominator :(int)denominator;
14 //輸出方法
15 -(void)print;
16 //定義分子
17 -(int)numerator;
18 //定義分母
19 -(int)denomiantor;
20 //轉換方法
21 -(double)convertToNum;
22 @end

2.Newfraction.m

 1 //
 2 //  Newfraction.m
 3 //  LogXu
 4 //
 5 //  Created by 許朕 on 15/2/9.
 6 //  Copyright (c) 2015年 com.example. All rights reserved.
 7 //  這是實現部分
 8 
 9 #import "Newfraction.h"
10 
11 @implementation Newfraction
12 //實現Newfraction方法
13     {
14         int newNumerator;
15         int newDenomiantor;
16     }
17 -(void)print{
18     NSLog(@"%i/%i",newNumerator,newDenomiantor);
19 }
20 -(void)newfractionWithSetnumerator:(int)numerator Setdenominator:(int)denominator{
21     newNumerator = numerator;
22     newDenomiantor = denominator;
23 }
24 -(int)numerator{
25     return newNumerator;
26 }
27 -(int)denomiantor{
28     return newDenomiantor;
29 }
30 -(double)convertToNum{
31     if(newDenomiantor != 0)
32         return (double) newNumerator/newDenomiantor;
33     else
34         return NAN;
35 }
36 
37 @end

3.main.m

 1 //
 2 //  main.m
 3 //  LogXu
 4 //
 5 //  Created by 許朕 on 15/2/9.
 6 //  Copyright (c) 2015年 com.example. All rights reserved.
 7 //  這是主函數
 8 
 9 #import <Foundation/Foundation.h>
10 #import "Newfraction.h"
11 int main(int argc, const char * argv[]) {
12     @autoreleasepool {
13         Newfraction *stu1 = [[Newfraction alloc]init];
14         Newfraction *stu2 = [[Newfraction alloc]init];
15         [stu1 newfractionWithSetnumerator:1 Setdenominator:4];
16         [stu1 print];
17         NSLog(@"=");
18         NSLog(@"%g",[stu1 convertToNum]);
19         [stu2 print];
20         NSLog(@"=");
21         NSLog(@"%g",[stu2 convertToNum]);
22         
23         NSLog(@"Hello, World!");
24     }
25     return 0;
26 }

打印結果:

1 2015-02-09 14:27:09.950 LogXu[3617:432264] 1/4
2 2015-02-09 14:27:09.952 LogXu[3617:432264] =
3 2015-02-09 14:27:09.952 LogXu[3617:432264] 0.25
4 2015-02-09 14:27:09.952 LogXu[3617:432264] 0/0
5 2015-02-09 14:27:09.953 LogXu[3617:432264] =
6 2015-02-09 14:27:09.953 LogXu[3617:432264] nan
7 2015-02-09 14:27:09.953 LogXu[3617:432264] Hello, World!
8 Program ended with exit code: 0

在main.m中,將stu1設置成1/4後,convertToNum方法將此分數轉換成一個十進制的值,這個值隨後就會顯示出來,即0.25。第二種狀況,沒有明確設置stu2的值,所以分數的分子和分母都會初始化爲0,這是實例變量默認的初始值。這就解釋了print方法顯示的結果,同時,還致使convertToNum方法中的if語句返回值NAN,NSlog實際顯示爲nan。

------if else 結構

檢查一個數是基數仍是偶數:

 1 //
 2 //  main.m
 3 //  LogXu
 4 //
 5 //  Created by 許朕 on 15/2/9.
 6 //  Copyright (c) 2015年 com.example. All rights reserved.
 7 //  這是主函數
 8 
 9 #import <Foundation/Foundation.h>
10 #import "Newfraction.h"
11 int main(int argc, const char * argv[]) {
12     @autoreleasepool {
13         int number;
14         int remainder;
15         NSLog(@"Enter your Number to tested:");
16         scanf("%i",&number);
17         remainder=number%2;
18         if (remainder==0) {
19             NSLog(@"The number is even");
20         }else{
21             NSLog(@"The number is odd");
22         }
23         
24         NSLog(@"Hello, World!");
25     }
26     return 0;
27 }
1 2015-02-09 15:00:25.550 LogXu[3709:453391] Enter your Number to tested:
2 12
3 2015-02-09 15:00:28.938 LogXu[3709:453391] The number is even
4 2015-02-09 15:00:28.938 LogXu[3709:453391] Hello, World!
5 Program ended with exit code: 0
1 2015-02-09 15:01:33.676 LogXu[3720:455130] Enter your Number to tested:
2 13
3 2015-02-09 15:01:37.585 LogXu[3720:455130] The number is odd
4 2015-02-09 15:01:37.585 LogXu[3720:455130] Hello, World!
5 Program ended with exit code: 0

  代碼中,if else結構的意思是 若是remainder能被2整除,那麼number就是偶數,不然remainder就是奇數。編寫程序時,這個「不然」的概念使用的至關頻繁,因此被做爲一個特殊結構來處理這一狀況。在objective-C中,通常格式以下 

1 if( expression ) 
2     program statement 1 
3  else 
4     program statement 2

  實際上,if-else僅僅是if語句的通常格式的一種擴展形式。若是表達式的計算結果是true,將執行以後的program statement 1;不然,將執行program statement 2。在任何狀況下,都會執行program statement 1或program statement 2中的一個,而不是兩個都執行。

  不要忘記,雙等號(==)用於相等測試,而單個等號是賦值運算符。

相關文章
相關標籤/搜索