for 循环


C++ 提供的重复性计算陈述之一是for循环式,它的基本语法如下:

for(初始化化; 判断式; 递增式) {
    语句一;
    语句二;
}

如果语句只有一个,也就是非复合语句,{}可以省略不写(然而并不建议);for循环的第一个初始化化只会执行一次,之后每次重新进行循环时,都会根据判断式来判断是否执行下个循环,而每次执行完循环之后,都会执行递增式一 次。

来看个简单的范例:

#include <iostream>
using namespace std;

int main() { 
    for(int i = 0; i < 10; i++) {
        cout << " " << i; 
    }

    return 0;
}

执行结果:

0 1 2 3 4 5 6 7 8 9

初始化化定义的变量仅在for循环区块中有作用;初始化只被执行一次,接下来循环根据i是否小于 10 判断要不要执行循环,而每执行一次循环就将i加 1。

for循环中也可以再使用for循环,例如显示九九乘法表:

#include <iostream>
#include <iomanip>
using namespace std;

int main() { 
    for(int j = 1; j < 10; j++) { 
        for(int i = 2; i < 10; i++) { 
            cout << i << "*" << j 
                 << "=" << setw(2) << i * j << " ";
        } 
        cout << endl; 
    } 

    return 0;
}

iomanipsetw用来设定字符宽度,执行结果如下:

2*1= 2 3*1= 3 4*1= 4 5*1= 5 6*1= 6 7*1= 7 8*1= 8 9*1= 9 
2*2= 4 3*2= 6 4*2= 8 5*2=10 6*2=12 7*2=14 8*2=16 9*2=18
2*3= 6 3*3= 9 4*3=12 5*3=15 6*3=18 7*3=21 8*3=24 9*3=27
2*4= 8 3*4=12 4*4=16 5*4=20 6*4=24 7*4=28 8*4=32 9*4=36
2*5=10 3*5=15 4*5=20 5*5=25 6*5=30 7*5=35 8*5=40 9*5=45
2*6=12 3*6=18 4*6=24 5*6=30 6*6=36 7*6=42 8*6=48 9*6=54
2*7=14 3*7=21 4*7=28 5*7=35 6*7=42 7*7=49 8*7=56 9*7=63
2*8=16 3*8=24 4*8=32 5*8=40 6*8=48 7*8=56 8*8=64 9*8=72
2*9=18 3*9=27 4*9=36 5*9=45 6*9=54 7*9=63 8*9=72 9*9=81

初始化化、判断式、递增式都可以依情况省略,然而区隔的分号必须保留,判断式被省略时,默认为true,因此底下的写法,相当于无穷循环:

for(;;) {
    // ... 
}

第三个陈述区块也可以放一般的语句,而不一定只放递增表达式,有兴趣的话,看看下面这个九九乘法表的写法,它只使用了一个for循环就能完成九九乘法表的打印:

#include <iostream>
#include <iomanip>
using namespace std;

int main() { 
    for (int i = 2, j = 1; 
         j < 10; 
         i == 9 ? i = (++j/j) + 1 : i++) { 

        cout << i << "*" << j
             << "=" << setw(2) << i * j 
             << (i == 9 ? "\n" : " ");
    } 

    return 0;
}

执行结果是一样的,这当然原则上并不鼓励这么写,程序还是以清楚易懂为原则,至于这个九九乘法表的演算其实也不难,当中的语法之前都介绍过了,可以亲自演算看看就知道怎么回事了。

C++ 11 新增了 for range 语法,这之后再来介绍。


展开阅读全文