繰り返し文の階層化
しばしば、繰り返し文の中に、別の繰り返し文を書くことがあります。このような多重階層の繰り返し処理は、応用的な情報処理には欠かせません。例えば、表のような2次元データを扱う場合には2階層の繰り返し文を書くことになるでしょう。
for ( i = 0 ; i < width ; i++ ) {
for ( j = 0 ; j < height ; j++) {
...
}
}
このような構造の繰り返し処理の場合、内側の繰り返し文の処理が終了すると、外側の繰り返し文の制御に戻り、再び内側の処理が繰り返されます。よって、上記のコードで考えると、内側のfor文の処理はwidth × height回、実行されることになります。
理屈上では、3階層、4階層にもできますが、制御文の階層構造が深くなりすぎると、プログラムの流れを読むことが困難になり、コードも汚くなります。深い多重階層になるような場合は、一部の計算や機能を他の関数に分離するなど、設計そのものを検討した方が良いかもしれません。
また、Steve McConnell著の 「CODE COMPLETE」では、2 階層以上の繰り返し文で用いられるカウンタ変数には、i や j といった簡易なものではなく、意味のある名前を付けることを推奨しています。そうすることで、繰り返し文の各階層で何を処理しているのか読みやすくなります。
サンプル 06
#include <stdio.h>
int main(void)
{
int h, v;
for (v = 1 ; v < 10 ; v++) {
for (h = 1 ; h < 10 ; h++) {
if (v * h < 10) printf(" %d ", v * h);
else printf("%d ", v * h);
}
printf("\n");
}
return 0;
}
実行結果
サンプル06は、九九の表を出力するプログラムです。このような2次元の情報を処理する場合に2階層の繰り返し文を使います。九九の計算は、カウンタ変数の v と h を用いています。