【C言語課題解説】入力した段数の三角形を表示するプログラム

はじめに

どうも! 高杉 皆為(@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です。)が代入されることに注意してください。

  1. 外のfor文はx<nまで継続される。数値を当てはめると、0<3なので継続。
  2. 中のfor文はy<x+1まで継続される。数値を当てはめると、0<0+1つまり0<1なので1回だけ「。」を表示する。
  3. yの値が+1され、中のループを抜けて「改行」。
  4. xの値が+1される。
  5. 外のfor文はx<nまで継続される。数値を当てはめると、1<3なので継続。
  6. 中のfor文はy<x+1まで継続される。数値を当てはめると、0<1+1つまり0<2なので2回だけ「。」を表示する。
  7. yの値が+1され、中のループを抜けて「改行」。
  8. xの値が+1される。
  9. 外のfor文はx<nまで継続される。数値を当てはめると、2<3なので継続。
  10. 中のfor文はy<x+1まで継続される。数値を当てはめると、0<2+1つまり0<3なので3回だけ「。」を表示する。
  11. yの値が+1され、中のループを抜けて「改行」。
  12. xの値が+1される。
  13. 外のfor文はx<nまで継続される。数値を当てはめると、3<3なので終了。外のループを抜ける。

2重ループはこのような流れになっています。このプログラムの表示部分と改行部分だけに着目すると、次のようになります。

  1. 「。」を表示。
  2. 改行する。
  3. 「。。」を表示。
  4. 改行する。
  5. 「。。。」を表示。
  6. 改行する。

こう考えると、ちょっと簡単に見えるかもしれませんね。

2重ループ処理への理解がポイントです。コンピューターの立場になって、処理を追ってみましょう。


 

みなためじゃんけん

このコーナーは、私と擬似的にじゃんけんできるコーナーです。

みなためじゃんけん、じゃんけんぽん!

私が出したのは……





チョキでした! グーの勝利です!



この記事をSNSでシェアする

プログラミングカテゴリーの最新記事(5件)

最新記事(10件)

管理人のTwitter

内部リンク集