第5講 ブロック崩しその3(ブロックを描き、ボールがブロックに当たったら跳ね返るようにする)
第4話 2次元ループの詳しい解説
コード再掲
#include<stdio.h>
void f();
int main()
{
  f();
  return 0;
}
void f() {
  int a,i, j;
  for (i = 0; i < 2; i++) {
    for (j = 0; j < 3; j++) {
      a = 3 * i + j + 1;
      if (a < 10)printf("0%d ", a);
      if(a>=10 && a<100)printf("%d ", a);
    }
    printf("\n");
  }
}
コピペ用添付ファイル
実行画面
01

解説
まず、このプログラムの動きを追ってみましょう。
動きを追うことをトレースといいます。
プログラミングする上でトレースは大変重要なものです。
わからなくなったら、トレースを常にする習慣を身につけましょう。
i = 0 の場合
 j = 0 のとき、
   a = 3 * i + j + 1 = 3 * 0 + 0 + 1 = 1
   です。
   すると
      if (a < 10)printf("0%d ", a);
      if(a>=10 && a<100)printf("%d ", a);
   のうち該当する文は、上の文です。
   aが1だからです。
   しがたって、コンソール画面(黒い画面)に
   01
   と表示されます。
 j = 1 のとき、
   a = 3 * i + j + 1 = 3 * 0 + 1 + 1 = 2
   です。
   すると
      if (a < 10)printf("0%d ", a);
      if(a>=10 && a<100)printf("%d ", a);
   のうち該当する文は、上の文です。
   aが2だからです。
   しがたって、コンソール画面(黒い画面)に
   01 02
   と表示されます。
   間が半角スペースなのは"0%d "のdの後に半角スペースが入っているからです。
 j = 2 のとき、
   a = 3 * i + j + 1 = 3 * 0 + 2 + 1 = 3
   です。
   すると
      if (a < 10)printf("0%d ", a);
      if(a>=10 && a<100)printf("%d ", a);
   のうち該当する文は、上の文です。
   aが3だからです。
   しがたって、コンソール画面(黒い画面)に
   01 02 03
   と表示されます。
 以上で中のループfor (j = 0; j < 3; j++){}は終了となり
    printf("\n");
 が実行されて改行されます。
    01 02 03
    改行
i = 1 の場合
 j = 0 のとき、
   a = 3 * i + j + 1 = 3 * 1 + 0 + 1 = 4
   です。
   すると
      if (a < 10)printf("0%d ", a);
      if(a>=10 && a<100)printf("%d ", a);
   のうち該当する文は、上の文です。
   aが4だからです。
   しがたって、コンソール画面(黒い画面)に
   01 02 03
   04
   と表示されます。
 j = 1 のとき、
   a = 3 * i + j + 1 = 3 * 1 + 1 + 1 = 5
   です。
   すると
      if (a < 10)printf("0%d ", a);
      if(a>=10 && a<100)printf("%d ", a);
   のうち該当する文は、上の文です。
   aが5だからです。
   しがたって、コンソール画面(黒い画面)に
   01 02 03
   04 05
   と表示されます。
   間が半角スペースなのは"0%d "のdの後に半角スペースが入っているからです。
 j = 2 のとき、
   a = 3 * i + j + 1 = 3 * 1 + 2 + 1 = 6
   です。
   すると
      if (a < 10)printf("0%d ", a);
      if(a>=10 && a<100)printf("%d ", a);
   のうち該当する文は、上の文です。
   aが3だからです。
   しがたって、コンソール画面(黒い画面)に
   01 02 03
   04 05 06
   と表示されます。
以上のトレースによって、どうして実行画面が
01となるということと、
      a = 3 * i + j + 1;
の意味が明らかになりました。
なぜ3 * iなのかは表示されている数字を縦に見ればわかります。
   01 02 03
   04 05 06
01の下は04です。
上と下では差が3です。
3飛びの値にするために3 * iなのです。
今回は、いずれの場合も
      if(a>=10 && a<100)printf("%d ", a);
は使用しませんでしたが、
使用する場合を考えましょう。
例えば、
01
コードを考えてください。





第3話へ
 第5話へ
a

初心者のための excel 2016 マクロ VBA 入門講義 基礎から応用まで
vc++ c言語 c++ 入門 初心者 基礎から応用まで
eclipse c++ 入門
魔方陣 数独で学ぶ VBA 入門

数独のシンプルな解き方・簡単な解法の研究
VB講義へ
VB講義基礎へ
初心者のための世界で一番わかりやすいVisual C++入門基礎講座
初心者のための世界で一番わかりやすいVisual Basic入門基礎講座
初心者のための世界で一番わかりやすいVBA入門講義(基礎から応用まで)
初心者のための VC++による C言語 C++ 入門 基礎から応用まで第1部
eclipse java 入門
java 入門 サイト 基礎から応用まで
本サイトトップへ