[先週の復習] switch 構文 for 構文 # 構文 : 他の文から新しい文を作る仕組み # if 構文 / while 構文 / 関数の定義 # => 命令の制御(実行順序)を行う [ 単純に命令を集めただけとは異なる ] # 制御 : やってはいけない命令をしないようにできる # cf. 「計算式」だけで、同じ機能を実現しようとすると、 # やってはいけない命令を実行せざるを得なくなる switch 構文 用途 : 多重分岐 ( cf. if 構文は 2 分岐 ) switch 構文では、分岐のための条件が整数の等式で表現できる条件だけ => 表現がわかりやすくなる / 高速になる 形式 : switch ( 式 ) { case-並び } case - 並び case 定数式 : 命令列 default : 命令列 が繰り返される 意味 : 「式」の値と同じ値を持つ「定数式」のついた case の ところから命令を実行する for 構文 用途 : 繰り返しを記述する ( cf. while / 再帰 ) while や再帰があるので、利用できなくても困らない while と比較して、制御変数の操作をまとめてかけるのがうれしい 形式 : for ( 初期化;条件;ステップ ) { 繰り返し命令 } 意味 : 初期化 while ( 条件 ) { 繰り返し命令 ステップ } for 構文と while 構文は、上記規則で基本的に対応するが、 例外がある continue を利用したとき... [break/contine] break は、繰り返し構文を中断し、即時、繰り返しの次の文に行く 繰り返し構文 : while / for / [do while] cf. switch 構文でも、構文の終了に利用している continue は、繰り返し構文の先頭に戻る # と考えると、for / while に差ができるが、 # こうではなく、「構文の最後に移動」と考えれば、 # for / while の差がなくなって、統一的に理解できる [条件式(if 構文)] (if 構文の) 条件式の値は、整数値 0 は偽 0 以外は、真 通常、条件式が真である事を示すために 1 の値を使う 条件式は「成立する/しない」、「真/偽」 => C 言語では整数 => 条件式の値を計算によって求める事が可能になる 例 : v, u という二つの変数があるとする v と u が共に、0 である場合だけ、処理をしたい v^2 + u^2 == 0 <=> v=0 かつ u=0 (u == 0) u が 0 の時に 1 になる (そうでないときは 0) (v == 0) v が 0 の時に 1 になる (u == 0)*(v==0) u==0 v==0 (u == 0)*(v==0) u = 0, v = 0 1 1 1 u = 0, v = 1 1 0 0 u = 1, v = 0 0 1 0 u = 1, v = 1 0 0 0 (u==0)&&(v==0) && 論理積演算子 A && B の値は A と B のどちらか一方が 0 の時 0 それ以外は 1 になる 例: 'a' <= ch && ch <= 'z' 1 && 100 => 1 100 && 0 => 0 !! [注意] ショートカット機能がある !! A && B で、 A が 0 だと、B は評価されない || 論理和演算子 A || B の値は A と B のどちらか一方が 0 でない時 1 それ以外は 0 になる 例: ch == 'a' || ch == 'A' ch が大文字か小文字の A である 1 || 100 => 1 100 || 0 => 1 0 || 0 => 0 !! [注意] ショートカット機能がある !! A || B で、 A が 1 だと、B は評価されない 条件が、値(操作可能な)なので、 条件を計算したり、代入したりできる 真偽値(に対応する整数型の値)を保持する変数の事を「フラグ」 フラグという考え方は、プログラムをデータ化する # プログラムの振る舞いを、データと同じレベルで、操作できる => あまりも強力なので、「乱用禁止」です。 [ポイント] 真偽値(条件式が持つ値)を利用して新しい真偽値をとる 演算子がある(真偽値が操作できる) ! C 言語では、真偽値が、実は整数値 ! 値は、変数に保存したり、関数への引数や値にできる