前回(2020/09/18)の内容 ガイダンス 基本は、前期と同じ ただし、前期の知識を仮定する 目的 : 「C 言語でプログラムが書けるようになる」事 簡単なプログラムは書ける !! 原理的には、すでに、どんな目的のプログラムも書ける 三つの内容 プログラミング プログラムとはなにか プログラム作成するには、どうように考えればよいか 与えられた問題を簡単な問題に分割する(分割統治) プログラム : 入力-処理-出力 再帰関数(帰納法) : N 一般を 1 と k -> k+1 の二つに分ける => 数学の概念は、プログラムの作成のヒント 操作方法 (ubuntu の操作) コンパイル / 実行の仕方 C 言語 ( ソフトウェア概論のメイン ) プログラミング言語としての C 言語の説明 プログラムの表現の仕方 文字列の出力をするにはどうするか => printf 変数の代入をするにはどうするか => 代入文を使う 方針 同じ内容を 3 度 繰返しながら 少しずつ内容を深く進める 復習をしながら、思い出しながら、繰り返し 「実技」 学習のためには、繰り返し「手を動かす」 # 手と同時に頭も動かす 復習 1 周回 : hello world, 関数, 制御構造(順接,条件分岐,再帰) 原理的に可能なプログラムは一通りかける 2 周目 : 様々なデータ構造 ( char, int ) まだ、途中 : 早めに終らせて、3 周回のアプリ開発に行きたい 新規 変数宣言と代入文 (代入によって、変数の値を変更する) 代入 代入とは 概念 : 「変数」に「値」を「割り当て」る「操作」 変数 : 変化する「数」 変数の表し方(数学) : 文字で変数を表す a + b = b + a (交換法則) 任意の二つの数 a, b に 「a に b を加える」、「b に a を加える」 の計算結果は等しい => 実際に計算する場合は、 変数 a, b に具体的な値が入っていないといけない a <- 3 b <- 8 3 + 8 = 11 = 8 + 3 二次方程式 a x^2 + b x + c = 0 解は x = (-b +- \sqrt{ b^2 - 4 a c }) / (2a) 実際に利用する場合は a, b, c に値を具体的に与えないといけない 例 : a <- 1, b <- -2, c <- -3 x^2 - 2x - 3 = 0 x = ( -(-2) +- \sqrt{ (-2)^2 - 4 (1)(-3) } ) / (2 (1)) = ( 2 +- \sqrt{ 4 + 12 } ) / 2 = ( 2 +- 4 ) / 2 = 1 +- 2 = 3, -1 コンピュータ(C 言語)では「計算式」は、変数(文字)を含んだ「文字式」で表現可能 実際に計算をする場合 ( 変数に具体的な値を割り当てる必要がある ) 関数呼び出しにおける「実引数(値の指定)」は、 関数の仮引数変数への「値の割り当て(代入)」を行う # 数学の関数評価(関数値の計算)に対応 # f(x) = x^2 (関数定義) # f(4) = 4^2 = 16 # f(4) # f(x)=x^2 # f(x) -> x^2 # f(4) -> x^2 ( x := 4 ) # -> 4^2 # -> 16 代入文 ( C 言語において、変数に値を直接割り当てる表現 ) 構文 : 変数名 = 式; 例: x = 1; very_long_name_variable = 1 + 3 * 7 + 123; 意味 : 式の値を計算し、その結果を変数に代入する 変数に値を代入すると、 その変数には、その値が割り当てられてられて それ以後は、その変数の値は、その値になる # その変数を含む命令の振る舞いが変化する 代入「後」は、 その変数の値は、代入さ(割り当てら)れた値に「変化」する (その変数が保持していた..) 代入「前」の値は、「失われ」る # 変数は、値の「入れ物」を表現していると解釈できる # 例 : 財布は、お金の入れ物 # 財布にいつでも、3 万円入っているわけじゃない # => 飲みに 1 万円 => 残りは 2 万円 # 代入の結果 # その代入された変数を含む命令の振る舞いが(その変化する変数の値を利用するので..結果的に)変化する # 代入によって、振る舞いが変わる 代入の「前」と「後」という「時間」の概念の把握が必要となる # 「時間」が変化する <=> 「変数に割り当てられている値」が変化 表現 : 代入の構文 「変数名」=「式」 [例] a=1+2; (変数 a に 3 ( = 1+2 ) を代入) 「=」は、「代入」を表現する(等号[等しい]ではない!! / 等号は「==」) 局所変数宣言 概念 : 局所変数を宣言する 局所変数 : 関数の本体の先頭で宣言し、 その関数の本体内だけで利用可能な変数 # 「関数の中だけ」という「局所(限定された範囲)」のみ利用可能な変数 # => 「局所変数」 # !! 関数の外でも利用可能な変数 => 「大域変数」 関数(ブロック)内のみ(局所的)で有効(利用可能)な変数を宣言する 「仮引数変数(実は局所変数の一種)」以外にも、変数が増やせる 表現 : 局所変数の宣言 「変数の型名」「変数名」 [例] int a; (整数型の変数 a を宣言) cf. 仮引数変数は、実引数の値で、「代入済」の変数 未代入の変数の値は「不定(プログラムミスの代表例 !!)」 変数は宣言と同時に「初期化(最初の代入)」できる(すべき) [例] int a=1;