プログラミング演習II 2004年10月19日(第1回) 理学部数学科・木村巌
この授業の目標 C言語による、より規模の大きいプログラムの作成(複数の関数、複数のファイルからなるプログラム) 標準ライブラリを使ったプログラミング プログラミングの楽しさを知る
評価 ほぼ毎回課すレポート 中間・期末試験 を評価の対象にします. 出席は加味しません.
プログラミング? プログラム:コンピュータに、処理の仕方を指示するもの プログラミング:プログラムを作成すること プログラミング言語:プログラムを作成するための人工言語.C言語の他、C++, Java, Lisp, Perl, Ruby, Pythonなど様々なものがある プログラミングは楽しい!
この授業を受けるに当たって 以下の知識・技能を仮定します Microsoft Windowsの基本概念・基本操作 秀丸エディタ、AL-Mail, Microsoft Office各ソフトウエアの基本操作 Cygwin環境の基本概念・基本操作 ファイルの作成、コンパイル、実行の仕方 プログラミング演習Iで学んだ程度のC言語の知識(高橋麻奈「やさしいC」第7章まで)
前回までの復習 C言語で書かれたプログラムは、原則として、main()関数と、0個以上のそれ以外の関数からなる int main (void) int main (int ac, char **av) という引数、返値を持つ
前回までの復習2 関数の定義は、 という形式であった(括弧内は引数リスト) 関数呼び出しは、プログラムの中で、 という形式を取るのだった 返値 関数名 (型1 仮引数1, 型2 仮引数2, …) という形式であった(括弧内は引数リスト) 関数呼び出しは、プログラムの中で、 関数名 (引数1, 引数2, …) という形式を取るのだった 関数から値を、呼び出し元に戻すことができる(return 式;)
前回までの復習3 Cygwinってなんだっけ? Cygwinの使い方 Cygwinはfree! パソコンを持っている人は、手に入れて使ってみよう パソコンを持っている人は、 LinuxやFreeBSDにチャレンジしてみよう!
今日学ぶこと 関数の中で変数を宣言し、使えるようになる 関数の中で定義された変数のスコープ(可視範囲)について理解する 変数の寿命について理解する 教科書8.6から(p.249~)
ローカル変数・グローバル変数 例えば、今までmain()関数内で定義してきた変数は、main()にローカルな変数 int main (void) { int a; /* main()内でローカルな変数 */ … } 関数の外側でも変数の定義が出来る! それがグローバル変数
グローバル変数(教科書図8-14) int a; /* グローバル変数 */ void func (void) { int b = 1; /* func()にローカルな変数 */ } int main (void) …
スコープ(可視範囲) Sample10.c (p.250)を入力し、コンパイル・実行してみよう グローバル変数aは、すべての関数から可視 ローカル変数は、そのローカル変数が定義された関数内でのみ、可視 変数の名前が通用する範囲を、スコープ(scope)という 教科書図8-15参照
ローカル変数の名前が重なると? 同じ関数内で名前が重なると、重複がコンパイル時に検出される 異なる関数内で、それぞれにローカルな変数が同じ名前を持つことは、構わない
ローカル変数とグローバル変数で名前が重なると? グローバル変数が、ローカル変数によって「隠蔽」されるように振る舞う(教科書図8-17, p.255)
記憶寿命 変数(に限らず、任意のオブジェクト)は、「寿命」、即ち、そのオブジェクトが存在し、最後に保存された値を保っていることが保証される期間、をもつ. 変数の一生 (1)メモリが確保される (2)値が格納される (3)破棄される
いつメモリが確保・破棄される? ローカル変数の場合 グローバル変数の場合 関数内で、その変数の宣言箇所に実行がさしかかったとき確保される その関数から、実行が離れるとき破棄される グローバル変数の場合 プログラムの実行が始まるときに、すべてのグローバル変数が確保される プログラムの終了時に破棄される
例で確認しよう 変数の一生を確認するために、Sample11.cを入力し、コンパイル・実行してみよう!
static変数の場合 ローカル変数を宣言するときに、static というstrage class specifierをつけると、 プログラムの実行が始まるときに確保され プログラムの実行が終わるときに破棄される 関数から実行が離れるときも、破棄されない! Sample11.cの変数cを参照
今日学んだこと 変数の可視範囲 ローカル変数、staticなローカル変数 グローバル変数 変数の寿命
レポート課題 次のスライドの/* ??? */ を補って、Fibonacci数列のはじめの幾つかの項が出力されるプログラムを完成せよ. 締め切り:2004年10月25日一杯(日本時間で) 提出先:メールで木村(iwao@sci.toyama-u.ac.jp)まで. 感想などあると木村が喜びます
レポート課題: /* ??? */を補え int static_fib (void) { /* ??? */ int fib1 = 1; int tmp = fib1; fib1 = fib2; fib2 = tmp + fib2; return fib2; } int main (void) { printf ("%d\n", static_fib()); return 1; }
レポートの書式 件名(Subject)に、プログラミング演習IIのレポートであることを明記 差出人欄(From: )に、差出人の氏名を明記 Spamメールを大量に受け取るので、これらが明記されていないメールは読まれないことがあります。そもそも当然のネチケット(neticket)です レポートの内容は、本文に記述。添付書類にしない。実行ファイルを添付しない!