for文

配列の個々の要素にアクセスしたい場合、for文を使った繰り返し処理を行うと便利です。ここでは、for文の使い方を見てみましょう。

【for文】

for文とは、指定した条件の分だけ繰り返しの処理を行う構文です。C言語では、例えば同じ処理を8回繰り返したい場合、以下のように記述します。

int i;
for( i=0 ; i<8; i++ )
 処理;Code language: Arduino (arduino)

for文は、以下のような構文になっています。

for( 初期化式 ; 継続条件式 ; 変化式 )
  処理;Code language: Arduino (arduino)

for文のフローチャートは以下のようになります。

図6-6 for文フローチャート

for文のフローチャート

for 文をフローチャートで表すには右図のような描き方もあります。

継続条件式が真の間はループを繰り返します。継続条件式が偽になると、ループを抜けて次の処理に移ります。

最初の例の場合、具体的には以下のような処理が行われます。

  • for文に差し掛かると、まずは初期化式「i=0」によって、変数iに0が代入されます。
  • ついで継続条件式「i<8」は、iは0なので「真」となり、直後の処理が実行されます。
  • 処理の後は変化式は「i++」が実行されます。この「i++」は、次に紹介する「インクリメント演算子」が使われており、iに1を加える処理になります。今の場合、iには初期化式で0が代入されていたので、この変化式でiの値は0+1=1になることになります。
  • 継続条件式に戻ると、iの値は1なので「i<8」は引き続き「真」であり、引き続き直後の処理と変化式が実行され、iの値が1+1=2となって再び継続条件式に戻ります。
  • 処理と変化式が8回繰り替えされると、iの値は8となり、継続条件式が「偽」となってfor文を終了し次に進みます。

なお、for文で複数の処理を繰り返したい場合は、下記のように処理を { } で囲みます(この { } を「ブロック」と言います)。

int i;
for(i=0; i<8; i++) {
  処理
}Code language: Arduino (arduino)

C++では、ブロック内や継続条件式の中で使う変数を初期化式で宣言することもできます。

for(int i=0; i<8; i++) {
  処理
}Code language: Arduino (arduino)

これらのfor文内では、変数 i は繰り返し毎に0〜7の値を持ちます。

なお、ブロック内で i に値を代入すると、ブロック内の処理の完了後、代入後の値を持つ i に対して継続条件式や変化式が適用されることになるので注意しましょう。

ところで、for文の初期化式、継続条件式、変化式は省略可能で、全てを省略すると次のようになります。

for(;;) {
  処理
}Code language: Arduino (arduino)

これは、ブロック内の処理を繰り返し実行し続ける永久ループになります。

【インクリメント演算子】

インクリメント演算子は、整数型の変数の値をインクリメント(1だけ増加)する際に用いられる演算子です。C言語では、以下のように記述します。

++変数; // 変数に1を加える(前置演算)
変数++; // 変数に1を加える(後置演算)Code language: Arduino (arduino)

前置演算と後置演算は、インクリメントと別の処理を同時に行いたい場合に動作に違いが出ます。インクリメント単体で用いる場合は同じ処理内容になります。

前置演算と後置演算の違い

インクリメント演算子は、ループ文と組み合わせて使用することが多く、使用頻度も高いです。

では、ここで先ほどの8回繰り返すfor文をもう一度見てみましょう。

for(int i=0; i<8; i++) {
  処理
}Code language: Arduino (arduino)

変数の宣言をした「i」は数える回数を記憶します。i の初期値は「0」、継続条件式は「i が 8未満」なので、i は 0 から 7 までカウントされます。変化式は「i++」となってい るので、i は 1 ずつカウントされますね。


それでは、配列とfor文を使ったドットマトリクスLED全点灯のプログラムを組んでみましょう。プログラムが完成し動作確認を行ったら、次のプログラム例と比較してみましょうみましょう。

次の記事

「A」の点灯 – 問題