免费开源的iOS开发学习平台

OC循环结构:1-for循环

在Objective-C中,经常会遇到重复的执行同一段代码的情况。这时候就会使用到循环功能,和其它编程语言一样,Objective-C也提供循环结构的语法,包括for循环,while循环和do-while循环。循环的本质就是重复一定的次数来执行某段语句,一般应用循环结构基本就是累加或者遍历对象以便操作。

for循环简介

for循环是最常使用的循环方式。for循环是开界的,它的一般形式为:

for(<初始化> ; <条件表达式>; <增量定义> ) {
    //循环执行的语句
    ...
}

其中:

  • 初始化总是一个赋值语句, 它用来给循环控制变量赋初值;
  • 条件表达式是一个关系表达式, 它决定什么时候退出循环;
  • 增量定义循环控制变量每循环一次后按什么方式变化。

这三个部分之间用分号;分开。

例如下方的代码,先给i赋初值1, 判断i是否小于等于10。若是,则执行语句, 之后i的值增加1。再重新判断, 直到条件为假, 即i>10时, 结束循环。

for(i=1; i<=10; i++){
    //循环执行的语句
    ...
}

for循环的实现形式

除了上面介绍的简单for循环之外,for循环中还可以嵌套for循环,从而实现一些复杂的循环操作。例如,当一个数组中嵌套了另外若干个数组的情况下,我们就可以使用嵌套for循环的方式来取出数组中存储的每个对象。

  • 简单的for循环。下方的代码实现了打印0~9这10个数字。
int main(int argc, const char * argv[]) {
    @autoreleasepool {
        for (int i = 0; i < 10; i++) {
            NSLog(@"%d", i);
        }
    }
    return 0;
}

  • 嵌套的for循环。示例代码中实现了求解从1到5五个数字先计算每个数字的阶乘,然后再累加求和。
int main(int argc, const char * argv[]) {
    @autoreleasepool {
        // 求1!+2!+3!+4!+5!的值
        int sum = 0;
        // 外层循环控制循环次数
        for (int i = 1; i < 6; i++) {
            int factorial = 1;
            // 内层循环求i的阶乘
            for (int j = 1; j <= i; j++) {
                factorial *= j;
            }
            sum += factorial;
            NSLog(@"%d! = %d", i, factorial);
        }
        NSLog(@"1!+2!+3!+4!+5! = %d", sum);
    }
    return 0;
}

运行结果:

for循环的循环条件

在编写for循环时可能会遇到在开始循环之前需要初始化多个变量,或者每次循环要计算多个表达式的情况。其实在for循环的任何位置都可以包含多个表达式,只要用逗号分隔这些表达式即可。例如,使用以下形式开始的for循环,在循环开始之前,将i的值设为0,j的值设为100,每次执行完循环体后,i的值加1,j的值减1。

for (int i = 0, j = 100; i < 10; i++, j--) {
    ...
    }

既然for循环中字段的表达式可以不止一个,那么省略for循环中的一个或多个字段也是可以实现的。省略for语句中某个字段的最常见情形发生在无须计算初始表达式的值时。在这种情况下,for语句的第一个字段可以简单的保留空白,只要仍然保留分号即可,例如:

for (; j < 10; j++) {
    ...
    }

如果省略了for语句的第二个字段,那么这条for语句实际上就是无限循环的,因为循环条件永远为真,如果需要退出循环就需要执行(return,break或goto语句)。我们也可以使用在for循环中定义循环变量的做法,比如for(int i=0;i<10;i++)的写法,这个i就是该for循环的局部变量了,离开for循环就无法访问。

示例代码

https://github.com/99ios/2.3.1