[Objective-C语言教程]循环语句(9)

当需要多次执行同一代码块时,可以使用循环来解决。 通常,语句按顺序执行:首先执行函数中的第一个语句,然后执行第二个语句,依此类推。 编程语言提供各种控制结构,允许更复杂的执行路径。循环语句可用于多次执行语句或语句组,以下是大多数编程语言中循环语句的一般形式 -

Objective-C编程语言提供以下类型的循环来处理循环需求。单击以下相应链接来查看其详细信息。

编号 循环类型 描述
1 while循环 在给定条件为真时重复语句或语句组,它在执行循环体之前测试条件。
2 for循环 多次执行一系列语句,并缩写管理循环变量的代码。
3 do…while循环 while循环语句一样,但它在循环体的末尾测试条件。
4 嵌套循环 在任何其他循环内使用一个或多个循环,whilefordo...while循环。

1. 循环控制语句

循环控制语句将执行从其正常序列更改。 当执行离开作用域时,将销毁在该作用域中创建的所有自动对象。

Objective-C支持以下控制语句,单击以下链接以查看其详细信息。

编号 控制语句 描述
1 break语句 用来终止循环或switch语句,并在循环或切换后立即将执行转移到语句。
2 continue语句 导致循环跳过其主体的其余部分,并在重复之前立即重新测试其状态。

2. 无限循环

如果条件永远不会变为假,则循环变为无限循环。for循环传统上用于此目的。 由于不需要构成for循环的三个表达式,因此可以通过将条件表达式留空来创建无限循环。

 1 #import <Foundation/Foundation.h>
 2 
 3 int main () {
 4 
 5    for( ; ; ) {
 6       NSLog(@"This loop will run forever.\n");
 7    }
 8 
 9    return 0;
10 }

当条件表达式不存在时,程序假定条件为真。可选有一个初始化和增量表达式,但Objective-C程序员更常使用for(;;)构造来表示无限循环。

3. while循环

只要给定条件为真,Objective-C编程语言中的while循环语句就会重复执行目标语句。

语法

Objective-C编程语言中while循环的语法是 -

1 while(condition) {
2    statement(s);
3 }

这里,statement(s);可以是单个语句或语句块。条件(condition)可以是任何表达式,true是任何非零值。当条件为true时,循环迭代。

当条件变为false时,程序控制将立即传递到循环之后的行。

while循环语句的流程图 -

这里,while循环需要注意的是循环可能永远不会运行。当测试条件并且结果为假时,将跳过循环体并且将执行while循环之后的第一个语句。

示例代码

 1 #import <Foundation/Foundation.h>
 2 
 3 int main () {
 4 
 5    /* 局部变量定义 */
 6    int a = 10;
 7 
 8    /* while循环执行 */
 9    while( a < 20 ) {
10       NSLog(@"value of a: %d\n", a);
11       a++;
12    }
13    return 0;
14 }

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

 1 2018-11-14 06:19:27.846 main[154713] value of a: 10
 2 2018-11-14 06:19:27.848 main[154713] value of a: 11
 3 2018-11-14 06:19:27.848 main[154713] value of a: 12
 4 2018-11-14 06:19:27.848 main[154713] value of a: 13
 5 2018-11-14 06:19:27.848 main[154713] value of a: 14
 6 2018-11-14 06:19:27.848 main[154713] value of a: 15
 7 2018-11-14 06:19:27.848 main[154713] value of a: 16
 8 2018-11-14 06:19:27.848 main[154713] value of a: 17
 9 2018-11-14 06:19:27.848 main[154713] value of a: 18
10 2018-11-14 06:19:27.848 main[154713] value of a: 19

4. for循环

for循环是一种重复控制结构,允许有效地编写需要执行特定次数的循环。

语法

Objective-C编程语言中for循环的语法是 -

1 for( init; condition; increment ) {
2    statement(s);
3 }

下面是for循环中的控制流程 -

  • init步骤首先执行,只执行一次。 此步骤允许声明和初始化任何循环控制变量。这里只有分号是必需的,在此处声明变量是可选的。
  • 接下来,评估条件。 如果为true,则执行循环体。 如果为false,则循环体不执行,控制流跳转到for循环后的下一个语句。
  • 在执行for循环体后,控制流会跳回到increment语句。 此语句可更新任何循环控制变量。此语句就可以留空,只要在条件之后写上分号。
  • 现在再次评估该条件。如果为真,则循环执行并且过程自身重复(循环体,然后递增步骤,然后再次调整)。 当条件变为false后,for循环终止。

for循环执行流程图

示例代码

 1 #import <Foundation/Foundation.h>
 2 
 3 int main () {
 4 
 5    /* for循环执行 */
 6    int a;
 7    for( a = 10; a < 20; a = a + 1 ) {
 8       NSLog(@"value of a: %d\n", a);
 9    }
10    return 0;
11 }

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

 1 2018-11-14 06:36:11.408 main[156211] value of a: 10
 2 2018-11-14 06:36:11.423 main[156211] value of a: 11
 3 2018-11-14 06:36:11.423 main[156211] value of a: 12
 4 2018-11-14 06:36:11.423 main[156211] value of a: 13
 5 2018-11-14 06:36:11.423 main[156211] value of a: 14
 6 2018-11-14 06:36:11.423 main[156211] value of a: 15
 7 2018-11-14 06:36:11.423 main[156211] value of a: 16
 8 2018-11-14 06:36:11.423 main[156211] value of a: 17
 9 2018-11-14 06:36:11.423 main[156211] value of a: 18
10 2018-11-14 06:36:11.423 main[156211] value of a: 19

5. do…while循环

for循环和while循环在顶部测试循环条件不同,Objective-C编程语言中的do...while循环检查循环底部的条件。

do...while循环类似于while循环,但是do...while循环保证至少执行一次。

语法

Objective-C编程语言中do...while循环的语法是 -

1 do {
2    statement(s);
3 } while( condition );

请注意,条件表达式是在循环的末尾,因此循环中的语句在测试条件之前执行一次。

如果条件为真,则控制流跳回来执行,循环中的语句再次执行。重复此过程直到给定条件变为假。

do…while循环流程图

do…while示例代码

 1 #import <Foundation/Foundation.h>
 2 
 3 int main () {
 4 
 5    /* 局部变量定义 */
 6    int a = 10;
 7 
 8    /* do...while循环执行 */
 9    do {
10       NSLog(@"value of a: %d\n", a);
11       a = a + 1;
12    } while( a < 20 );
13    return 0;
14 }

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

 1 2018-11-14 06:44:13.298 main[44840] value of a: 10
 2 2018-11-14 06:44:13.299 main[44840] value of a: 11
 3 2018-11-14 06:44:13.299 main[44840] value of a: 12
 4 2018-11-14 06:44:13.299 main[44840] value of a: 13
 5 2018-11-14 06:44:13.299 main[44840] value of a: 14
 6 2018-11-14 06:44:13.299 main[44840] value of a: 15
 7 2018-11-14 06:44:13.299 main[44840] value of a: 16
 8 2018-11-14 06:44:13.299 main[44840] value of a: 17
 9 2018-11-14 06:44:13.299 main[44840] value of a: 18
10 2018-11-14 06:44:13.299 main[44840] value of a: 19

6. 嵌套循环

Objective-C编程语言允许在另一个循环中使用一个循环。以下部分显示了几个例子来说明这个概念。

语法

Objective-C语言中嵌套for循环语句的语法如下 -

1 for ( init; condition; increment ) {
2    for ( init; condition; increment ) {
3       statement(s);
4    }
5    statement(s);
6 }

Objective-C编程语言中嵌套while循环语句的语法如下 -

1 while(condition) {
2    while(condition) {
3       statement(s);
4    }
5    statement(s);
6 }

Objective-C编程语言中嵌套do...while循环语句的语法如下 -

1 do {
2    statement(s);
3    do {
4       statement(s);
5    } while( condition );
6 
7 } while( condition );

循环嵌套可以将任何类型的循环放在任何其他类型的循环中。 例如,for循环可以放在while循环内,反之亦然。

例子
以下程序使用嵌套for循环来从2100中查找素数 -

 1 #import <Foundation/Foundation.h>
 2 
 3 int main () {
 4 
 5    /* 局部变量定义 */
 6    int i, j;
 7 
 8    for(i=2; i<100; i++) {
 9       for(j=2; j <= (i/j); j++)
10         if(!(i%j)) break;        // if factor found, not prime
11       if(j > (i/j)) NSLog(@"%d is prime\n", i);
12    }
13 
14    return 0;
15 }

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

 1 2018-11-14 07:14:35.503 main[60729] 2 is prime
 2 2018-11-14 07:14:35.505 main[60729] 3 is prime
 3 2018-11-14 07:14:35.505 main[60729] 5 is prime
 4 2018-11-14 07:14:35.505 main[60729] 7 is prime
 5 2018-11-14 07:14:35.505 main[60729] 11 is prime
 6 2018-11-14 07:14:35.506 main[60729] 13 is prime
 7 2018-11-14 07:14:35.506 main[60729] 17 is prime
 8 2018-11-14 07:14:35.506 main[60729] 19 is prime
 9 2018-11-14 07:14:35.506 main[60729] 23 is prime
10 2018-11-14 07:14:35.506 main[60729] 29 is prime
11 2018-11-14 07:14:35.506 main[60729] 31 is prime
12 2018-11-14 07:14:35.506 main[60729] 37 is prime
13 2018-11-14 07:14:35.506 main[60729] 41 is prime
14 2018-11-14 07:14:35.506 main[60729] 43 is prime
15 2018-11-14 07:14:35.506 main[60729] 47 is prime
16 2018-11-14 07:14:35.506 main[60729] 53 is prime
17 2018-11-14 07:14:35.506 main[60729] 59 is prime
18 2018-11-14 07:14:35.506 main[60729] 61 is prime
19 2018-11-14 07:14:35.506 main[60729] 67 is prime
20 2018-11-14 07:14:35.506 main[60729] 71 is prime
21 2018-11-14 07:14:35.506 main[60729] 73 is prime
22 2018-11-14 07:14:35.506 main[60729] 79 is prime
23 2018-11-14 07:14:35.506 main[60729] 83 is prime
24 2018-11-14 07:14:35.506 main[60729] 89 is prime
25 2018-11-14 07:14:35.506 main[60729] 97 is prime

7. break语句

Objective-C编程语言中的break语句有以下两种用法 -

  • 当在循环内遇到break语句时,循环立即终止,程序控制在循环后的下一个语句处重新开始。
  • 它可以用于在switch语句中终止一个case(在下一章中介绍)。

如果使用嵌套循环(即另一个循环中的一个循环),break语句将停止执行最内层循环并开始执行块之后的下一行代码。

语法

Objective-C中break语句的语法如下 -

break;

流程图

示例代码

 1 #import <Foundation/Foundation.h>
 2 
 3 int main () {
 4 
 5    /* 局部变量定义 */
 6    int a = 10;
 7 
 8    /* while循环执行 */
 9    while( a < 20 ) {
10       NSLog(@"value of a: %d\n", a);
11       a++;
12 
13       if( a > 15) {
14          /* 使用break语句终止循环 */
15          break;
16       }
17    }
18 
19    return 0;
20 }

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

1 2018-11-14 07:32:47.365 main[72348] value of a: 10
2 2018-11-14 07:32:47.366 main[72348] value of a: 11
3 2018-11-14 07:32:47.367 main[72348] value of a: 12
4 2018-11-14 07:32:47.367 main[72348] value of a: 13
5 2018-11-14 07:32:47.367 main[72348] value of a: 14
6 2018-11-14 07:32:47.367 main[72348] value of a: 15

8. continue语句

Objective-C编程语言中的continue语句与break语句有点类似。 但是,不是强制终止,而是继续强制执行循环的下一次迭代,跳过其间的任何代码。

对于for循环,continue语句会导致条件测试并增加循环的部分来执行。 对于whiledo...while循环,continue语句会导致程序控制传递给条件测试。

语法

Objective-C中continue语句的语法如下 -

continue;

流程图

示例代码

 1 #import <Foundation/Foundation.h>
 2 
 3 int main () {
 4 
 5    /* 局部变量定义 */
 6    int a = 10;
 7 
 8    /* do...while循环执行 */
 9    do {
10       if( a == 15) {
11          /* 跳过迭代 */
12          a = a + 1;
13          continue;
14       }
15       NSLog(@"value of a: %d\n", a);
16       a++;
17    } while( a < 20 );
18    return 0;
19 }

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

1 2018-11-14 07:39:49.946 main[86123] value of a: 10
2 2018-11-14 07:39:49.948 main[86123] value of a: 11
3 2018-11-14 07:39:49.948 main[86123] value of a: 12
4 2018-11-14 07:39:49.948 main[86123] value of a: 13
5 2018-11-14 07:39:49.948 main[86123] value of a: 14
6 2018-11-14 07:39:49.948 main[86123] value of a: 16
7 2018-11-14 07:39:49.948 main[86123] value of a: 17
8 2018-11-14 07:39:49.948 main[86123] value of a: 18
9 2018-11-14 07:39:49.948 main[86123] value of a: 19

猜你喜欢

转载自www.cnblogs.com/strengthen/p/10563163.html