ものづくりBLOG blog page

第6章 何もしない(5):制御文−for文

2011-01-01 (Sat) 06:00
H8+C言語入門:第6章 何もしない(5):制御文−for文
 
 第6章でも、更に懲りずに何もしないプログラムを作成します。
 第5章で制御文の一つであるwhile文、do〜while文を勉強しました。第6章では、for文と
 いうものを学習します。
 
 for文は、次の様な基本的な構文を持っています。
  for( 式1 ; 式2 ; 式3 ) 文
 これが基本形です。「式1」は、最初に一回だけ実行されます。次に「式2」を実行しま
 す。「式2」の結果が1であれば、文を実行します。0であれば、文を実行せず、for文は
 終了します。文が実行された後、「式3」が実行されます。
 
<サンプル6-1>
void main(void)
{ /* main関数の始まり */
int i, j; //変数iとjの宣言
j = 0; //変数jの初期化:0をセットする。
for( i = 0 ; i < 10 ; i++ ) j++; //jを10回インクリメントする。
} /* main関数の終わり */
 
 サンプル6-1のうち、for文のところを見ましょう。
  for( i = 0 ; i < 10 ; i++ ) j++;
 基本形から見ると、次の様にそれぞれの構成要素となります。
  式1は、「i = 0」です。
  式2は、「i < 10」です。
  式3は、「i++」です。
  文は、)の外の;迄の式ですから、「j++;」です。
 では、このfor文の動きを追跡します。
 
 1)まず、式1を実行します。「i = 0」です。変数iに0がセットされます。
 2)次に式2を評価します。式2は「i < 10」つまり「iが10未満」が条件です。
 3)1)の直後では、iは、0なので、条件を満たしますので、つまり「真」です。
 4)「真」なので、文「j++;」が実行されます。
  つまり、jの数は、1つ増えます(インクリメント)。
 5)次に、式3を実行します。ここでは、「i++;」が実行され、iがインクリメントされま
  す。
 6)次に、2)に戻ります。式2「i < 10」を評価し、条件に合う間、2)→4)→5)を繰り返
  します。その状態を条件に合わない、つまり「偽」になる迄くり返します。「偽」に
  なるのは、iが10になる時です。
  そこで、iの値が10になったら条件に合わなくなるのでくり返しをやめます。
  つまり、文「j++;」を10回実行したことになります。
 
 となると、むずっと先のwhile文で、このfor文の代案を考えてみませんか?
 for文の基本形は、次の通りでしたね。
  for( 式1 ; 式2 ; 式3 ) 文
 では、これをwhile文で表すと次の様になります。
 
  式1; //初期化して、
  while( 式2 ){ //繰り返し条件を評価して、
   文 //文を実行して、
   式3; //文を実行して−通常、式2の評価対象の再計算となる。
  }
 
 ちょっとここでも特殊な使い方のご紹介です。
 それは、次の様なものです。
  for(;;) 文
 ()の中に何もありません。これがfor文を使った無限ループです。文を処理し続けます。
 無限ループとなると、当たり前ですが、無限ですから文を実行し続けるということになり
 ます。ここでも無限ループから抜け出せないのか?ということになりますが、while文の
 ところで紹介したbreak文が使えます。
 
<サンプル6-2>
void main(void)
{ /* main関数の始まり */
int i=10; //変数iの宣言と変数iの初期化:10をセットする。
for(;;){ //無限ループの指定
i++; //iをインクリメントする。
break; //無限ループから抜ける
}
} /* main関数の終わり */
 
 break文は、無限ループだけの為のものではありませんので、普通のfor文の中でも使いま
 す。
 
 for文の括弧の中ですが、;記しで式が分かれています。その式は、一つでなくてもよい、
 ということです。カンマ「,」で区切ると複数の式を置くことができ、プログラミングと
 しては、分かりやすく記述することができるかもしれません。ご参考までに、下記ご覧く
 ださい。
 
  for( i = 0, j = 0 ; i < 10 ; i++, j+=10 ){
   ; //文:一連の処理をここに記述する。
  }
 
 for文の()の最初の式のところが初回のみの実行をするところでした。そこには、
 「i = 0」という式と「j = 0」という式がカンマ「,」で繋げて記述されています。for文の
 初回に、この二つの式が実行されます。
 次の式でfor文を繰り返すか、終了するかの判断をすることになります。ここでは、
 「i < 10」としていますが、ここも論理演算子で条件式を幾つか結合することができます。
 最後の式のところには、「i++」と「j += 10」という二つの式がこれもカンマ「,」で繋
 げてあり、文が実行された後、この二つの式が実行されます。
 只、書けるからといって、あまり多くをここに記述すると、一行に複雑な意味を持たせる
 ことになるので、できれば必要十分な式の組合せに抑えておくことがいいと思います。
 
 では、実際にH8を動かして、またまた「何も動かないこと」 を確認してください。
 
 
−まとめ−
 1. for文は、while文を拡張したようなもの。
  主に指定した回数だけ文をくり返す時に使うことが多い。

ものづくりBLOG

Blog Category

Blog Calendar

RSS 2.0