6-循环结构

最后更新于:2022-04-01 00:17:07

计算机的基本属性之一就是它能够重复执行一组语句。 循环语句的作用是反复执行一段代码, 直到满足终止循环的条件为止。  Objective-C语言中提供的循环语句有:  • while语句 • do-while语句 • for语句 while语句, 它的语法形式如下, 其中“[] ” 中的部分可以省略。  ~~~   [initialization]    while (termination){      body;    [iteration;]    } ~~~ 举例如下: 水仙花数是指一个 n 位数 ( n>=3 ),它的每个位上的数字的 n 次幂之和等于它本身。 (例如:1^3 + 5^3 + 3^3 = 153) 下面代码是计算1000以内的水仙花数。  ~~~ int i = 100; int r, s, t; r = 0;s = 0;t = 0; while (i < 1000) { r = i / 100; s = (i - r * 100) / 10; t = i - r * 100 - s * 10; if (i == r * r * r + s * s * s + t * t * t) { NSLog(@" %i " , i ); } i = i + 1; } ~~~ 三位的水仙花数共有4个,分别为:153、370、371、407。 do-while语句, 它的语法形式如下, 其中“[] ” 中的部分可以省略 ~~~ [initialization]    do {      body;    [iteration;] } while (termination); ~~~ 计算1000以内的水仙花数 ~~~ int i = 100; int r, s, t; r = 0;s = 0;t = 0; do { r = i / 100; s = (i - r * 100) / 10; t = i - r * 100 - s * 10; if (i == r * r * r + s * s * s + t * t * t) { NSLog(@" %i " , i ); } i = i + 1; } while (i < 1000); ~~~ for语句, 语法形式如下: ~~~ for (initialization; termination; iteration){      body; } ~~~ 举例如下: 下面代码是计算0~10平方、 立方数并输出: ~~~ int i = 10; int r, s; r = 0; s = 0; for (int j = 0; j <= i ; j++) { r = j * j; s = j * j * j; NSLog(@"整数为: %i 对应的平方和%i :对应的立方和:%i ", j, i , s); } ~~~ for语句小结for语句将按以下步骤执行:1.先求初始表达式的值。2.求循环条件的值。3.执行组成循环体的程序语句。4.求循环表达式的值。5.返回到2执行。 在for循环语句的“() ” 内部一般有3条语句,  initialization初始化语句, termination终止条件语句, iteration迭代语句,  其中这3条语句都是可以省略的。  例如把j 的初始化放在循环体的外面, 代码如下: ~~~ int j = 0; for (; j <= i ; j++) { r = j * j; s = j * j * j; NSLog(@"整数为: %i 对应的平方和%i :对应的立方和:%i ", j, i , s); } ~~~ #### 跳转语句 与程序转移有关的跳转有break, continue, goto语句,  break和continue都主要与循环有,  goto语句在C中就有, 它是无条件跳转可以完全替代break和continue, 一般要慎用 。 break语句break语句在switch中使用过, 用来终止switch语句的执行。 break语句还可以用于循环体中, 终止当前的循环, 并紧跟该循环块的第一条语句处执行。  举例如下: break语句 ~~~ for (int i = 0; i < 10; i++) { if (i == 3) break; NSLog(@ " i =%i", i); } NSLog(@" Game Over!"); i =0 i =1 i =2 Game Over! ~~~ 也就是说如果在一组嵌套循环中执行break语句,仅会推出执行break语句的最内层循环。 continue语句continue语句用来结束本次循环, 跳过循环体中下面尚未执行的语句,  接着进行终止条件的判断, 以决定是否继续循环。  对于for语句, 在进行终止条件的判断前, 还要先执行迭代语句。  举例如下: ~~~ for (int i = 0; i < 100; i ++) { if (i % 10 == 0) continue; NSLog(@"%i ", i ); } … 18 19 21 22 … ~~~ #### goto语句 goto语句是无条件跳转, 可以完全替代break和continue。如果是嵌套循环, 可以使用 goto语句指定标签, 来改变程序的流程。 举例如下: ~~~ for (int j = 0; j < 10; j++) { for (int i = 0; i < 10; i++) { if (i == 3) goto label; NSLog(@ " i =%i", i); } } label: NSLog(@" Game Over!"); ~~~ 在内循环中使用 break和continue都只能跳出内循环,  goto语句没有这个限制,  label: 是标签定义, goto语句后面要跟有标签。
';