for 文とは 繰返しを記述する構文規則 ( cf. while ) for ( <初期化式>; <継続条件式>; <再初期化式> ) { <繰返し文> } 例: for (i = 0;i < 10; i++){printf ( "%d\n", i );} <初期化式> : i = 0 1 回 (必ず) <継続条件式> : i < 10 11 回 ( 1 度は必ず実行 ) <再初期化式> : i++ 10 回 <繰返し文> : printf ( "%d\n", i ); 10 回 初期化式 : 最初に一度だけ、必ず行われる文 継続条件式 : 毎回、繰返し文の実行「前」に評価されこれが偽の場合は終了になる 繰返し文 : for 文によって繰り返される命令 再初期化式 : 繰返し文の実行の後に毎回実行される 実行例: for (i = 0;i < 10; i++){printf ( "%d\n", i );} i その他 説明 i=0; 0 <初期化式>の実行 i<10 真 <継続条件式> printf ( "%d\n", i ); 「0」 <繰返し文> i++ 1 <再初期化式> i<10 真 <継続条件式> printf ( "%d\n", i ); 「1」 <繰返し文> i++ 2 <再初期化式> .. i<10 真 <継続条件式> printf ( "%d\n", i ); 「9」 <繰返し文> i++ 10 <再初期化式> i<10 偽 <継続条件式> for 文は終了 イデオム(成句) int i; for ( i = 0; i < N; i++ ) { 何か } i を 0 から N - 1 まで動かしながら「何か」を N 回実行する int i; for ( i = N; i > 0; i-- ) { /* i-- は i = i - 1 */ 何か } i を N から 1 まで動かしながら「何か」を N 回実行する == for 文と while 文の関係 for 文と while 文は相互に書き換えができる だから、while 文だけ知っていれば for 文は要らないのだが、for 文は便利なので.. for 文から while 文 ( while が解っていれば for 文は解る ) for ( <初期化式>; <継続条件式>; <再初期化式> ) { <繰返し文> } → <初期化式>; while ( <継続条件式> ) { <繰返し文> <再初期化式>; } while 文から for 文 ( while は for 文の簡略形 ) while ( <継続条件式> ) { <繰返し文> } → for ( ; <継続条件式>; ) { <繰返し文> } ( while 文は for 文の <初期化式>, <再初期化式> が空のもの ) == 問題 for 文を使って、0 から 99 迄の偶数だけ表示してください # 100 未満の偶数を全て出力 アプローチ (その一) i を 0 〜 99 として、但し偶数だけを出す (そのニ) i が 0 〜 99 の間の偶数だけを動くようにし、毎回 i を出す == 配列 複数の同じ型の変数をまとめたものです int a0, a1, a2; -> int a[3]; 個々要素(変数)は、添字(index)を利用して参照できる a0 -> a[0] 配列を利用し、添字を操作することにより、 配列の要素(複数)への操作を 繰返しという一つの操作に変換できる 特に配列が、集合を表現している場合 集合全体への操作が、個々の要素の操作の繰返しになる事が多い == 課題 整数型の配列を作り、それに 5 個のデータを入力し その値を 5 倍にしたものと 2 分の 1 にした値を それぞれ、画面に出力するプログラムを作りなさい 例 入力を 3 8 13 2 4 とすると 15 40 65 10 20 1 4 6 1 2 と出力する