文档章节

[Objective-C语言教程]决策结构(10)

o
 osc_y8yehimr
发布于 2019/03/20 10:28
字数 2453
阅读 14
收藏 0

精选30+云产品,助力企业轻松上云!>>>

决策结构要求程序员指定一个或多个要由程序评估或测试的条件,以及在条件被确定为真时要执行的一个或多个语句,以及可选的,如果条件要执行的其他语句 被认定是假的。

以下是大多数编程语言中的典型决策结构的一般形式 -

Objective-C编程语言将任何非零和非null假定为true,如果它为零或null,则将其假定为false
Objective-C编程语言提供以下类型的决策制定语句。 单击以下链接查看其详细信息 -

编号 语句 描述
1 if语句 if语句是由布尔表达式后跟一个或多个语句组成。
2 if…else语句 if语句后面可以跟一个可选的else语句,该语句在if布尔条件表达式为false时执行。
3 嵌套if语句 在一个ifelse if语句中可使用ifelse if语句。
4 switch语句 switch语句用于测试变量与值列表的相等性。
5 嵌套switch语句 在一个switch语句中使用一个switch语句。

?:运算符

前面我们讲过了条件运算符?:,条件运算符可以用来替换if...else语句。它的一般形式如下 -

Exp1 ? Exp2 : Exp3;

Exp1Exp2Exp3都是表达式。 注意冒号的使用和放置。

?表达式的确定方式如下:评估Exp1。 如果结果为true,那么Exp2会被评估并成为整个值?表达式的值。 如果Exp1评估为false,则计算Exp3Exp3的结果值将成为表达式的值。

1. if语句

if语句由布尔表达式后跟一个或多个语句组成。

语法

Objective-C编程语言中if语句的语法是 -

1 if(boolean_expression) {
2    /*  如果布尔表达式为true,则执行 */
3    // statement(s)
4 }

如果布尔表达式(boolean_expression)的计算结果为true,那么将执行if语句中的代码块。 如果布尔表达式(boolean_expression)的计算结果为false,那么将执行if语句结束后(在结束大括号之后)的第一组代码。

Objective-C编程语言将任何非零和非null值假定为true,如果它为零或null,则将其假定为false

流程图

示例代码

 1 #import <Foundation/Foundation.h>
 2 
 3 int main () {
 4 
 5    /* 定义局部变量 */
 6    int a = 10;
 7 
 8    /* 使用if语句检查布尔条件 */
 9    if( a < 20 ) {
10       /* 如果条件为 true,则打印以下内容 */
11       NSLog(@"a is less than 20\n" );
12    }
13 
14    NSLog(@"value of a is : %d\n", a);
15    return 0;
16 }

执行上面示例代码,得到以下结果:

1 2018-11-14 08:58:49.415 main[152191] a is less than 20
2 2018-11-14 08:58:49.417 main[152191] value of a is : 10

2. if…else语句

if语句后面可以跟一个可选的else语句,else语句在布尔表达式为false时执行。

语法

Objective-C编程语言中if...else语句的语法是 -

1 if(boolean_expression) {
2    /* statement(s) 如果布尔表达式为true,则执行此语句 */
3 } else {
4   /* statement(s) 如果布尔表达式为false,则执行此语句 */
5 }

如果布尔表达式(boolean_expression)的计算结果为true,那么将执行if代码块,否则将执行else中的代码块。

Objective-C编程语言将任何非零和非null值假定为true,如果它为零或null,则将其假定为false

流程图

示例代码

 1 #import <Foundation/Foundation.h>
 2 
 3 int main () {
 4    /* 局部变量定义 */
 5    int a = 100;
 6 
 7    /* 检查布尔条件 */
 8    if( a < 20 ) {
 9       /* 如果条件为true,则打印以下结果 */
10       NSLog(@"a is less than 20\n" );
11    } else {
12       /* 如果条件为false,则打印以下结果 */
13       NSLog(@"a is not less than 20\n" );
14    }
15 
16    NSLog(@"value of a is : %d\n", a);
17    return 0;
18 }

编译并执行上述代码时,会产生以下结果 -

1 2018-11-14 09:23:05.241 main[6546] a is not less than 20
2 2018-11-14 09:23:05.243 main[6546] value of a is : 100

if…else if…else语句

if语句后面可以跟一个可选的else if...else语句,这对于使用单个if...else if语句测试各种条件非常有用。

当使用ifelse ifelse语句时,要记住几点 -

  • if可以有零个或一个else,它必须在else if之后。
  • if可以有零或多个else if,并且它们必须在else之前。
  • 当有一个else if条件匹配成功,其余的else if或者else都不会再条件匹配测试。

语法

Objective-C编程语言中if...else if语句的语法是 -

1 if(boolean_expression 1) {
2    /* Executes when the boolean expression 1 is true */
3 } else if( boolean_expression 2) {
4    /* Executes when the boolean expression 2 is true */
5 } else if( boolean_expression 3) {
6    /* Executes when the boolean expression 3 is true */
7 } else {
8    /* executes when the none of the above condition is true */
9 }

示例代码

 1 #import <Foundation/Foundation.h>
 2 
 3 int main () {
 4    /* 定义局部变量 */
 5    int a = 100;
 6 
 7    /* 检查布尔条件 */
 8    if( a == 10 ) {
 9       /* 如果if条件为真,则打印以下内容 */
10       NSLog(@"Value of a is 10\n" );
11    } else if( a == 20 ) {
12       /* 如果else...if条件为真,则打印以下内容 */
13       NSLog(@"Value of a is 20\n" );
14    } else if( a == 30 ) {
15       /* 如果else...if条件为真,则打印以下内容 */
16       NSLog(@"Value of a is 30\n" );
17    } else {
18       /* 如果没有一个条件为真,则打印以下内容 */
19       NSLog(@"None of the values is matching\n" );
20    }
21    NSLog(@"Exact value of a is: %d\n", a );
22    return 0;
23 }

编译并执行上述代码时,会产生以下结果 -

1 2018-11-14 09:31:07.594 main[96166] None of the values is matching
2 2018-11-14 09:31:07.596 main[96166] Exact value of a is: 100

3. 嵌套if语句

在Objective-C编程中,嵌套if-else语句是合法的,可以在一个ifelse if语句中使用ifelse if语句。

语法

嵌套if语句的语法如下 -

1 if( boolean_expression1) {
2    /* 如果 boolean_expression1 为true,则执行 */
3    if(boolean_expression2) {
4       /* 如果 boolean_expression2 为true,则执行 */
5    }
6 }

可以使用与嵌套if语句类似的方式嵌套if else语句。

示例代码

 1 #import <Foundation/Foundation.h>
 2 
 3 int main () {
 4 
 5    /* 定义局部变量 */
 6    int a = 100;
 7    int b = 200;
 8 
 9    /* 检查布尔条件 */
10    if( a == 100 ) {
11 
12       /* 如果条件为true,则继续检查以下条件 */
13       if( b == 200 ) {
14          /* 如果条件为true,则打印以下结果 */
15          NSLog(@"Value of a is 100 and b is 200\n" );
16       }
17    }
18    NSLog(@"Exact value of a is : %d\n", a );
19    NSLog(@"Exact value of b is : %d\n", b );
20 
21    return 0;
22 }

执行上面示例代码,得到以下结果:

1 2018-11-14 09:40:57.545 main[149996] Value of a is 100 and b is 200
2 2018-11-14 09:40:57.547 main[149996] Exact value of a is : 100
3 2018-11-14 09:40:57.547 main[149996] Exact value of b is : 200

4. switch语句

switch语句用于测试变量与值列表的相等性。每个值称为一个case,并检查每个switch case接通的变量。

语法

Objective-C编程语言中switch语句的语法如下 -

 1 switch(expression){
 2    case constant-expression  :
 3       statement(s);
 4       break; /* 可选 */
 5    case constant-expression  :
 6       statement(s);
 7       break; /* 可选 */
 8 
 9    /* 可以有任意数量的case语句*/
10    default : /* 可选 */
11       statement(s);
12 }

以下规则适用于switch语句 -

  • switch语句中使用的表达式(expression)必须具有整数或枚举类型,或者是类类型,其中类具有单个转换函数为整数或枚举类型。
  • switch中包含任意数量的case语句,每个case后跟要与之比较的值和冒号。
  • case之后的constant-expression必须与switch中的变量具有相同的数据类型,并且必须是常量或文字。
  • 当接通的变量等于case时,case之后的语句将一直执行,直到达到break语句。
  • 当达到break语句时,switch终止,控制流跳转到switch语句后面的下一行。
  • 并非每个break都需要包含break。 如果没有出现break,则控制流将进入后续case,直到达到break
  • switch语句可以有一个可选的默认情况,它必须出现在switch的末尾。 当没有任何case匹配为真时,default可用于执行任务。 default不需要包含break语句。

流程图

示例代码

 1 #import <Foundation/Foundation.h>
 2 
 3 int main () {
 4 
 5    /* 局布变量定义 */
 6    char grade = 'B';
 7 
 8    switch(grade) {
 9    case 'A' :
10       NSLog(@"Excellent!\n" );
11       break;
12    case 'B' :
13    case 'C' :
14       NSLog(@"Well done\n" );
15       break;
16    case 'D' :
17       NSLog(@"You passed\n" );
18       break;
19    case 'F' :
20       NSLog(@"Better try again\n" );
21       break;
22    default :
23       NSLog(@"Invalid grade\n" );
24    }
25 
26    NSLog(@"Your grade is  %c\n", grade );
27    return 0;
28 }

执行上面示例代码,得到以下结果:

1 2018-11-14 09:55:06.673 main[53795] Well done
2 2018-11-14 09:55:06.675 main[53795] Your grade is  B

5. 嵌套switch语句

可以将switch作为外部switch语句序列的一部分。 即使内部和外部switchcase常量包含公共值,也不会产生冲突。

语法

嵌套switch语句的语法如下 -

 1 switch(ch1) {
 2    case 'A': 
 3       printf("This A is part of outer switch" );
 4 
 5       switch(ch2) {
 6          case 'A':
 7             printf("This A is part of inner switch" );
 8             break;
 9          case 'B': /* case code */
10       }
11       break;
12    case 'B': /* case code */
13 }

示例代码

 1 #import <Foundation/Foundation.h>
 2 
 3 int main () {
 4 
 5    /* 局部变量定义 */
 6    int a = 100;
 7    int b = 200;
 8 
 9    switch(a) {
10       case 100: 
11          NSLog(@"This is part of outer switch\n", a );
12          switch(b) {
13             case 200:
14                NSLog(@"This is part of inner switch\n", a );
15          }
16    }
17    NSLog(@"Exact value of a is : %d\n", a );
18    NSLog(@"Exact value of b is : %d\n", b );
19 
20    return 0;
21 }

执行上面示例代码,得到以下结果:

1 2018-11-15 00:55:06.093 main[167622] This is part of outer switch
2 2018-11-15 00:55:06.095 main[167622] This is part of inner switch
3 2018-11-15 00:55:06.095 main[167622] Exact value of a is : 100
4 2018-11-15 00:55:06.095 main[167622] Exact value of b is : 200

 

o
粉丝 0
博文 500
码字总数 0
作品 0
私信 提问
加载中
请先登录后再评论。
《Objective-C应用开发互动教程》已经上线

一、前言 其实这套教程四年前就已经在App Store上线,但是由于后来精力主要放在Swift方面的教程上,所以对这套教程维护较少。目前Swift教程已经出了三套互动教程,分别是Xcode10&Swift4.2互动...

李发展
03/31
0
0
【读书笔记】iOS-Objective-C对C的扩展基础知识

一,Xcode的.m扩展名表示文件含有Objective-C代码,应由Objective-C编译器处理。C编译器处理名称以.c结尾的文件,而C++编译器处理.cpp文件。在Xcode中,所有这些编译工作全由GCC处理,这个编...

Cgruppo
2016/05/26
0
0
C语言究竟是一门怎样的语言

对于大部分程序员,C语言是学习编程的第一门语言,很少有不了解C的程序员。 C语言除了能让你了解编程的相关概念,带你走进编程的大门,还能让你明白程序的运行原理,比如,计算机的各个部件是...

袅袅娜娜00
2019/05/29
11
0
52个有效方法(1) - 了解Objective-C语言的起源

Objective-C语言使用的是"消息结构"而非"函数调用"。 "消息结构"和"函数调用"之间的区别 "消息结构"的语言: 运行时由运行环境决定所应执行的代码 "函数调用"的语言: 由编译器决定 分配在堆中......

腿长的SkyMing-C
2019/10/12
0
0
Objective-C的欢迎度随着iPad和iPhone的衰退而衰减

一份月度语言评估报告(2013年4月TIOBE编程语言排行榜)指出,Objective-C,用于构建iPad与iPhone上的应用程序的编程语言,其流行发展趋势正开始出现停滞的现象。 “TIOBE编程语言社区排行榜”...

qixinghaitang
2013/04/15
49
0

没有更多内容

加载失败,请刷新页面

加载更多

JavaScript中的静态变量 - Static variables in JavaScript

问题: 如何在Javascript中创建静态变量? 解决方案: 参考一: https://stackoom.com/question/6RUF/JavaScript中的静态变量 参考二: https://oldbug.net/q/6RUF/Static-variables-in-Java...

法国红酒甜
今天
14
0
之间的区别 和

问题: I'm learning Spring 3 and I don't seem to grasp the functionality behind <context:annotation-config> and <context:component-scan> . 我正在学习Spring 3,并且似乎不太了解<......

javail
今天
11
0
业内首款,百度工业视觉智能平台全新亮相

本文作者:y****n 业内首款全国产化工业视觉智能平台——百度工业视觉智能平台亮相中国机器视觉展(Vision China),该平台所具有的核心AI能力完全自主可控,在质检、巡检等场景中具有高效、...

百度开发者中心
昨天
7
0
我们如何制作xkcd样式图? - How can we make xkcd style graphs?

问题: Apparently, folk have figured out how to make xkcd style graphs in Mathematica and in LaTeX . 显然,民间已经想出了如何在Mathematica和LaTeX中制作xkcd风格的图形。 Can we d......

富含淀粉
今天
10
0
OSChina 周四乱弹 —— 萝莉突然明白,这顿饭吃完就要上路了

Osc乱弹歌单(2020)请戳(这里) 【今日歌曲】 @薛定谔的兄弟 :分享洛神有语创建的歌单「我喜欢的音乐」: 《宇宙の花》- 島みやえい子 手机党少年们想听歌,请使劲儿戳(这里) @野渡无人舟...

小小编辑
今天
83
1

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部