3.2.6 嵌套的循环(2)
试一试:另一个嵌套的循环
嵌套循环可能使人感到迷惑,因此我们再看一个示例。该程序可以生成一个给定大小的乘法表。
- // Ex3_14.cpp
- // Using nested loops to generate a multiplication table
- #include <iostream>
- #include <iomanip>
- using std::cout;
- using std::endl;
- using std::setw;
- int main()
- {
- const int size(12); // Size of table
- int i(0), j(0); // Loop counters
- cout << endl // Output table title
- << size << " by " << size << " Multiplication Table" << endl << endl;
- cout << endl << " |";
- for(i = 1; i <= size; i++) // Loop to output column headings
- cout << setw(3) << i << " ";
- cout << endl; // Newline for underlines
- for(i = 0; i <= size; i++)
- cout << "_____"; // Underline each heading
- for(i = 1; i <= size; i++) // Outer loop for rows
- {
- cout << endl
- << setw(3) << i << " |"; // Output row label
- for(j = 1; j <= size; j++) // Inner loop for the rest of the row
- cout << setw(3) << i*j << " "; // End of inner loop
- } // End of outer loop
- cout << endl;
- return 0;
- }
该示例的输出如下:
- | 1 2 3 4 5 6 7 8 9 10 11 12
- _________________________________________________________________
- 1 | 1 2 3 4 5 6 7 8 9 10 11 12
- 2 | 2 4 6 8 10 12 14 16 18 20 22 24
- 3 | 3 6 9 12 15 18 21 24 27 30 33 36
- 4 | 4 8 12 16 20 24 28 32 36 40 44 48
- 5 | 5 10 15 20 25 30 35 40 45 50 55 60
- 6 | 6 12 18 24 30 36 42 48 54 60 66 72
- 7 | 7 14 21 28 35 42 49 56 63 70 77 84
- 8 | 8 16 24 32 40 48 56 64 72 80 88 96
- 9 | 9 18 27 36 45 54 63 72 81 90 99 108
- 10 | 10 20 30 40 50 60 70 80 90 100 110 120
- 11 | 11 22 33 44 55 66 77 88 99 110 121 132
- 12 | 12 24 36 48 60 72 84 96 108 120 132 144
示例说明
表标题是程序中第一条输出语句产生的。下一条输出语句与后面跟着的循环共同生成了列标题。每列是5个字符宽,因此标题值显示在setw(3)操作符指定的3字符宽的字段中,后面跟着两个空格。该循环前面的输出语句在包含行标题的第一列上面输出4个空格和一条竖线。然后,一串下划线字符显示在列标题的下面。
嵌套循环生成主表的内容。外部循环为每一行重复一次,因此i是行号。输出语句
- cout << endl
- << setw(3) << i << " |"; // Output row label
首先转到下一行,然后在3字符宽的字段中输出行标题i的值,后面是一个空格和一条竖线。
下面的内部循环生成各行的数值:
- for(j = 1; j <= size; j++) // Inner loop for the rest of the row
- cout << setw(3) << i*j << " "; // End of inner loop
该循环输出i*j的值,这些值是当前行值i与依次从1变化到size的各个列值j的乘积。因此,对于外部循环的每次迭代而言,内部循环执行size次迭代。得到的乘积以与列标题相同的方式定位。当外部循环完成时,执行return语句以结束该程序。