Objective-C 选择结构

  对于任何程序语言来说,有能力进行判断是一项基本特性。需要在执行循环语句时,判断何时终止循环。Objective-C程序设计语言也构造了以下几种判断结构:

  • if语句。
  • switch语句。
  • conditional语句。

------if语句

  Objective-C程序设计语言提供了一半的判断能里,即if语句这样的语言结构。这种语句的一般格式如下:

 

if(expression)

    program statement

 

 

  假设要将“如果不下雨,我就去游泳”这样的句子转换成Objective-C语言,可使用上述if语句格式,将这个句子“编写”成以下格式:

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;否则,这条消息将被忽略。

  例如,对整数取绝对值:

  

 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的绝对值,并终止运行。

  下面介绍一个将一个分数转换成一个十进制的值的程序,并且程序自带判断分母是否为0的功能:

1.Newfraction.h

 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中的一个,而不是两个都执行。

  不要忘记,双等号(==)用于相等测试,而单个等号是赋值运算符。

 

你可能感兴趣的:(Objective-C)