前回(2021/06/25)の内容 講義内容 返値(かえりち)のある関数 整数型 C 言語で「整数値」を表現する「型」 「型」= <値の集合,演算の集まり> 整数型 = <{ 0, 1, -1, 2, -2, ..., +- 20 億 },{ +, -, *, /, %, .. }> cf. 文字型 = < ASCII 文字, { +, -, *, /, %, getchar(), putchar()} > 処理するデータには、常に型があり、 型によって、異なる振る舞いをする 式 「x + 1」という表現 変数 x に入っているデータの型によって意味が異なる 文字列 => 文字列が短くなる 文字 => 次の文字 (ASCII Code 表に従う) 整数型 => 1 だけ増える !! 「変数」:関数の仮引数変数 ( <= 関数定義の頭部で、変数の型が指定されている ) !! => 式の中に、変数だけでなく、「関数呼び出し」も含めることができる !! 例 : f(x)+1 !! => 関数の定義の頭部で、関数の返す値の型が指定されている 整数値の入出力 s_print_int 出力 s_input_int 入力 関数合成 数学の関数合成と同じ f(g(h(x))) 内側から計算される 最初に y=h(x) が計算され、その値 y が g にわたり、 次に、 x=g(y) が計算され、その値 z が f にわたり、 最後に w=f(z) が計算され、その値が、式「f(g(h(x)))」の値となる 例: f(x) = x * x f(4) = 4 * 4 = 16 g(x) = x + 2 g(3) = 3 + 2 = 5 f(g(5)) g(5) = 5 + 2 = 7 f(7) = 7 * 7 = 49 !! 外側から計算する ( 式の展開 ) !! f(g(5)) = g(5)*g(5) !! = (5+2)*(5+2) !! = (7)*(7) <<== 5+2 を二回計算 !! = 49 !! !! 外から計算しないと駄目なパターン !! !! 式の中に変数が含まれている場合 !! !! 内側から計算しようとすると、変数が邪魔をして、それ以上計算できない !! !! 例: !! !! f(g(x+1)) !! !! 内側 : g(x+1) = (x+1)+2 = x+3 <= 計算が止まる !! !! 外側 : 内側の計算しなくてもよいので、最後まで計できる C 言語では、式の計算は、内側から行う f(g(h(x))) => h, g, f の順に計算を行う 関数の引数が複数ある場合は、後ろの引数から計算をする f(g(x),h(y)) => h, g, f の順で実行(計算)される 関数合成も、順接と同様、命令の実行順序を決めている(制御構造) 実行の順番が、表記の順(上から下、左から右)とは一致していない 条件分岐 (if 構文) 文法 if ( 条件 ) { 条件が成立した時の命令 } else { 条件が不成立の時の命令 ( otherwise : 上でない時 ) } 意味 まず、「条件」を調べ、それが成立している場合は、 「条件が成立した時の命令」を実行 そうでないときには 「条件が不成立の時の命令」を実行 する。 => if 構文は、「命令」を制御する「制御構造」である。 二つの命令から、新しい命令を作る どちらか一方が実行される いくつか種類がある 1. else 節の命令 ( 条件が不成立の時の命令 ) が空っぽの場合 例 : if ( 条件 ) { 命令 } else {} => else 節そのものを省略してよい 例 : if ( 条件 ) { 命令 } <= then 節の命令 ( 条件が成立の時の命令 ) が空っぽの場合であっても、 then 節は省略できない 例 : if ( 条件 ) {} else { 命令 } => 「if ( 条件 ) else { 命令 }」とはできない 2. else 節の命令が if 構文一つの場合 例 : if ( 条件 ) { 命令 } else { if (条件2) {命令a} else {命令b} } => else 節の {, } を省略してよい 例 : if ( 条件 ) { 命令 } else if (条件2) {命令a} else {命令b} if ( 条件 ) { 命令 } else { if (条件2) { 命令a } else { 命令b } } => else 節の {, } を省略してよい if ( 条件 ) { 命令 } else if (条件2) { 命令a } else { 命令b } 2a. then 節の命令(条件が成立した時の命令)でも else 節の命令(条件が不成立の時の命令)でも、 命令が一つの場合は {, } が省略可能 !! <真実> !! もともと、then 節 / else 節は、 !! {, } を書かず、命令を一つだけ書くのが本来の表現 !! 命令の個数が 0 個や 2 個以上の場合に {} が必要 !! <= 命令が 1 個の場合でも、{} を書く習慣をつけよう 2021/07/02 switch 構文 if 構文でない、もう一つの条件分岐を行う構文 switch - case 構文 機能 多分岐構文 if 構文は 2 分岐だが switch 構文は n 分岐 !! if 構文を入れ子にすることにより、 !! 多分岐が可能 !! 表現が複雑になる嫌いがある 構文 ::= switch ( <式> ) { } ::= の繰返し ::=