首页 > 代码库 > Objective-C之成魔之路【6-循环结构】

Objective-C之成魔之路【6-循环结构】

重开发者的劳动成果,请勿转载

计算机的基本属性之一就是它能够重复执行一组语句。

循环语句的作用是反复执行一段代码, 直到满足终止循环的条件为止。

 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语句后面要跟有标签。

Objective-C之成魔之路【6-循环结构】