はじめに
どうも! みなため(@MinatameT)です。
この記事では、for文の入れ子(ネスト)を説明しています。わかりやすくいえば、2重ループ(ループの中のループ)です。
このネストですが、C言語に慣れている私でもたまに混乱しますので、初心者にとってはかなり難しいと思います。
しかし、わかりやすく説明しますので、頑張って理解してみてください。
問題文
整数値をキーボードから入力させ、その値の段数になる三角形を表示しましょう。例えば、4を入力した場合は、次のように表示させてください。
。
。。
。。。
。。。。
解答例
#include<stdio.h>
int main(void)
{
int n;
int x;
int y;
printf("段数を入力してください。>");
scanf("%d",&n);
for(x=0; x<n; x=x+1) //外のループ
{
for(y=0; y<x+1; y=y+1) //中のループ
{
printf("。");
}
printf("\n"); //改行処理
}
return(0);
}
nは、入力した三角形の段数です。ここで、「3」を入力した場合、このプログラムの2重ループ部分は、次のように動きます。
ループに入ったときのみ、初期値(外のループならx=0、中のループならy=0です。)が代入されることに注意してください。
- 外のfor文はx<nまで継続される。数値を当てはめると、0<3なので継続。
- 中のfor文はy<x+1まで継続される。数値を当てはめると、0<0+1つまり0<1なので1回だけ「。」を表示する。
- yの値が+1され、中のループを抜けて「改行」。
- xの値が+1される。
- 外のfor文はx<nまで継続される。数値を当てはめると、1<3なので継続。
- 中のfor文はy<x+1まで継続される。数値を当てはめると、0<1+1つまり0<2なので2回だけ「。」を表示する。
- yの値が+1され、中のループを抜けて「改行」。
- xの値が+1される。
- 外のfor文はx<nまで継続される。数値を当てはめると、2<3なので継続。
- 中のfor文はy<x+1まで継続される。数値を当てはめると、0<2+1つまり0<3なので3回だけ「。」を表示する。
- yの値が+1され、中のループを抜けて「改行」。
- xの値が+1される。
- 外のfor文はx<nまで継続される。数値を当てはめると、3<3なので終了。外のループを抜ける。
2重ループはこのような流れになっています。このプログラムの表示部分と改行部分だけに着目すると、次のようになります。
- 「。」を表示。
- 改行する。
- 「。。」を表示。
- 改行する。
- 「。。。」を表示。
- 改行する。
こう考えると、ちょっと簡単に見えるかもしれませんね。
2重ループ処理への理解がポイントです。コンピューターの立場になって、処理を追ってみましょう。