*C言語* 〜18時限目〜 for文をネストする・・・
〜目次〜
for文をネストする
今まで色々な構文について紹介してきました。
これらの条件判断文、繰り返し文などの構文では、
複数の文を埋め込んでネストする(入れ子にする)
ことができます。
例としてfor文の中にfor文を使うという、
複雑な記述をすることができるのです。
実際にfor文をネストしたコードを入力してみます。
sample38.c
ーsample38の実行画面ー
iは0:jは0
iは0:jは1
iは0:jは2
iは1:jは0
iは1:jは1
iは1:jは2
iは2:jは0
iは2:jは1
iは2:jは2
iは3:jは0
iは3:jは1
iは3:jは2
これは外側のループを一回処理するたびに、
内側のループは3回されています。
このコードでは、変数iをインクリメントするfor文の中に、
変数jをインクリメントするfor文を埋め込んで、入れ子にしています。
つまり、
iをインクリメントするループ文が1回行われるたびに、
jをインクリメントするループ文が(3回)繰り返されるのです。
このように文をネストすることで、
複雑な処理を記述することができるのです。
if文などと組み合わせる
上ではfor文の中にfor文を埋め込みましたが、
異なる種類の構文を組み合わせても構いません。
例でfor文とif文を組み合わせるようなこともできます。
sample39.c
ーsample39の実行画面ー
*~*~*
~*~*~
*~*~*
~*~*~
*~*~*
このコードでは、
2つのfor文と1つのif 〜 else文を使っています。
*または~を出力するたびに、変数chに交互に0と1と代入します。
これをすることにより、
if文の条件によって処理を変更させることができるのです。
応用して色々なコードを入力してみてください。
break文の仕組みについて
今までで繰り返し文には一定の処理の流れがあるということが、
確認できました。
しかし、場合によっては、
処理の流れを強制的に変更したいと時があるかもしれません。
C言語には処理の流れを変更する文として、
break文やcontinue文が用意されています。
まずはじめにbreak文についてみていきます。
break文は、
処理の流れを強制的に終了し、そのブロックから抜ける
という処理を行う文です。
以下のコードはbreak文を使い、
キーボードから指定した回数で、
ループ処理を強制的に終了させるものです。
sample40.c
ーsample40の実行画面ー
何番目でループを中止しますか?(1~10)
4
1番目の処理です。
2番目の処理です。
3番目の処理です。
4番目の処理です。
sample40では本来10回の繰り返しを行うfor文です。
しかし、ここではユーザーが入力した回数で
break文を実行し、
ループを強制的に終了させています。
5回目以降のループが実行されていないことが確認できます。
尚、繰り返し文をネストしている場合、
その内側の文でbreak文を使うと内側のブロックを抜け出して、
もう一つ外側のブロックに処理がうつることになっています。
switch文の中でbreak文使う
switch文の中ではbreak文が使われていました。
そこで使っているbreak文は上記のbreak文と同じものです。
switch文内でbreak文を応用すると、
以下のような処理をさせることができます。
sample41.c
ーsample41の実行画面その1ー
成績を入力してください。(1~5)
1
もう少し頑張りましょう!
ーsample41の実行画面その2ー
成績を入力してください。(1~5)
2
もう少し頑張りましょう!
ーsample41の実行画面その3ー
成績を入力してください。(1~5)
5
たいへん優秀です!
sample41では、入力した整数の成績により、
色々なメッセージを出力するプログラムです。
コードの中のbreak文の挿入位置に注意をしてください。
case1とcase3の後にbreak文がないので、
それぞれcase2とcase4と同じ処理を実行するようになっています。
このようにbreak文の挿入位置により処理を、
コントロールすることができるのです。
continue文の仕組みについて
もう一つ、処理の流れを強制的に変更する文として、
continue文
というものがあります。
continue文は、
繰り返し文内の処理を飛ばし、ブロックの先頭位置に戻って次の処理を続ける
という処理を行います。
実際に以下のコードを入力してください。
sample42.c
ーsample42の実行画面ー
何番目の処理を飛ばしますか?(1~10)
4
1番目の処理です。
2番目の処理です。
3番目の処理です。 (この後に注目)
5番目の処理です。
6番目の処理です。
7番目の処理です。
8番目の処理です。
9番目の処理です。
10番目の処理です。
sample42を実行して、処理を飛ばす回数目として4を入力しました。
そうすると、実行画面をみてわかる通り、
4番目の処理が飛ばされ5番目の処理が行われています。
continue文の処理が行われると、
ブロックの先頭に強制的に戻ります。
〜END〜