前回(2021/05/07)の内容 # 「文字列」:「"(ダブルクォーテーション)"」挟む # 例 : 「"abc"」: 三つの文字 a, b, c からなる長さ 3 の文字列 「文字」の扱い 文字の表現 ( 「'(シングルクォーテーション)」で挟む ) 例: 「'a'」: 「a」という文字を表す a, "a", 'a' 変数名(関数名), 文字列, 文字 => すべて異なるものとして扱われる !!! 「変数」は、「何か(値)」に置き換わる !!! "a", 'a' : それ自身(値)を表す表記 ( 即値/定数 ) !! 「文字」は「文字列」と違うので、 !! => 違う扱いをする必要がある 文字の出力 ( putchar 関数を使う ) # cf. 文字列の出力には printf 関数を利用する # ! 「出力」=「画面に描画する」 # 文字扱いに関しては、追加を今日の後でやる 条件分岐 二種類の命令列のどちらか一方を、 条件によって、選択して実行する機能 # cf. # 順接: 複数の命令を、並べた順にすべて実行する # 命令A 命令B => 命令Aが実行された後に、命令Bが実行される # => 命令を書けば、書いた分だけ実行される if 構文 if ( 条件 ) { 命令 A } else { 命令 B } => 条件が成立した時には、命令 A を そうでなかった(条件が不成立)時には命令 B を実行する => 命令 A, B の両方を書いても、 A, B のどちらか一方しか実行されない if 構文単独だと、 二つのうちの一つしか選べない 三つ以上の命令のどれかを選ぶ場合は、 if 構文を組み合わせる 一つの事に関して、複数の条件をチェックする場合 else if 表現 if ( 条件1 ) { 命令 1 } else if ( 条件 2 ) { 命令 2 } ... } else if ( 条件 n ) { 命令 n } else { 命令 n+1 } => (条件 1 〜 k-1 が不成立で..) 条件 k が成立すると、命令 k が実行される いずれも成立しない場合は、 命令 k+1 が実行される strcmp 関数 引数に与えられた二つの文字列を比較する !strcmp(A,B) A, B が同じ時に、「条件成立」という意味を表す表現 関数に引数を与える事により、 後から引数の値を変更して、関数の振る舞いを変える事ができる 単に、変数(と順接)を利用するだけだと、 関数の振る舞いは、「連続的」である => 値が大きく変われば、振る舞いも大きく変わる 値が小さく変われば、振る舞いも小さく変わる <= if 構文(条件分岐)を利用すると、 値を少し変えるだけで、 関数の振る舞いを大きくかえる事ができる => 不連続なふるまい 再帰呼出し 関数の定義の中で、自分自身を呼び出す => 再帰呼び出しの命令以外の部分の命令が繰り返される事になる 「(命令の..)繰り返し(loop)」が(再帰呼び出しを利用して..)表現できる C 言語(に限らず、プログラミング言語一般で..) 基本的な命令(単語) => 言語によっていろいろ 基本的な命令を組み合わせて(文法)、新しい命令を作る(制御構造)仕組みが 順接: A と B => A;B or B;A 二つの命令を順に実行する命令が作られる 条件分岐 : A と B (と、条件) => if (条件) {A} else {B} によって、 (条件によって) A, B のどちらか一方を実行する命令が作れる 繰り返し : A => func() { A func() } によって、 A を何度も繰り返す、命令が作れる !! 制御構造は、この三種類あれば、任意のプログラムが作れる !! => 万能性 順接 A, B => A,B 条件分岐 A, B => A B 繰り返し A => A, A, A, .., A, ... <= いきなり、有限回から無限回に飛躍するのは、使いずらい => 量が増える ( 1 回かいただけで、複数回実行される ) のはうれしいが、 それでも有限にしたい 再帰と条件分岐を組み合わせると、 有限回の繰り返しが可能なる mathematica について 昨年、一年生の時にインストールした mathematica は、 今年度4月いっぱいで、ライセンスがきれます。 今年度も利用したい場合は、 新しく、インストールする ライセンス情報を入力する => 大学でしかできない 作業が必要です。 金曜の昼休みにうけつけますので、申し出てください == 再帰と if 構文を組み合わせる => 有限回の繰り返しが可能 p-005.c をテンプレート(イデオム)として、 引数で指定された文字列の長さだけ、 命令を繰り返す事が可能 p-006.c, p-007.c, p-008.c 繰り返しをするために利用する変数(文字列が入っている)を、 繰り返す対象となる命令で利用する => まったく同じ結果の繰り返しではなく、 異なる結果を(すこしずつ変化させながら..)もたらす事が 例: p-005.c A, A, A, A, A 例: p-006.c A, A' A", A''', .. [一進法] 漢数字 一、二、三、十、百、千、万、億、兆、京、...,無量大数 数のケタ数が大きくなると、それを表現するための、 新しい漢数字が必要になる 表現したい数の種類が増えたら、(桁も増えるので..) => その種類に合わせて、漢数字の種類も増やさないといけない <=> 位取り法 0から9 までの10種類の「アラビア数字」だけで、 (有限な..)すべての数が表現できる => 「桁」 (無限)数 <=> 有限の数字 x 無限の桁(長さ) n 進数 一つ前の桁が n 個たまったら、次の桁を 1 つ増やす(繰り上がり) 普段利用しているのは、10 進数 1 と 10 の違い(表現上、桁がが違う)は、10 倍 n ( > 1 ) 進数 1 と 10 の違い n 倍 例: 2 進数の場合 10 は 1 の 2 倍になっている 「数字」は n 種類あればよい 例: 10 進数は、 0 〜 9 の 10 個の数字 2 進数は、 0 〜 1 の 2 個の数字 16 進数は、0 〜 9, A 〜 F までの 16 種類 # すべてが F になる 1 進数 数字は一種類、数の表現方法 : 桁数 = 数の大きさ cf. 漢数字/ローマ数字 ( => 1 進数 ) 一 I 二 II 三 III 1 進数の計算 足し算 2 + 3 5 ** *** ***** 掛け算 2 * 3 6 ** *** ****** ** *** ** ** **