プログラミング演習II 2004年10月19日(第1回) 理学部数学科・木村巌 この授業の目標 C言語による、より規模の大きいプログラムの 作成(複数の関数、複数のファイルからなる プログラム) C言語におけるより高度な概念の習得(変数 のスコープと寿命、アドレスとポインタ) C言語により、より複雑なデータ構造の実装 (構造体などを用いる) 標準ライブラリを使ったプログラミング プログラミングの楽しさを知る 評価 ほぼ毎回課すレポート 中間・期末試験 を評価の対象にします. 出席は加味しません. プログラミング? プログラム:コンピュータに、処理の仕方を指 示するもの プログラミング:プログラムを作成すること プログラミング言語:プログラムを作成するた めの人工言語.C言語の他、C++, Java, Lisp, Perl, Ruby, Pythonなど様々なものがある プログラミングは楽しい! この授業を受けるに当たって 以下の知識・技能を仮定します Microsoft Windowsの基本概念・基本操作 Cygwin環境の基本概念・基本操作 秀丸エディタ、AL-Mail, Microsoft Office各ソフト ウエアの基本操作 ファイルの作成、コンパイル、実行の仕方 プログラミング演習Iで学んだ程度のC言語の 知識(高橋麻奈「やさしいC」第7章まで) 前回までの復習 C言語で書かれたプログラムは、原則として、 main()関数と、0個以上のそれ以外の関数か らなる 実行は、常にmain()関数から始まる main()関数は、 int main (void) int main (int ac, char **av) という引数、返値を持つ 前回までの復習2 関数の定義は、 という形式であった(括弧内は引数リスト) 関数呼び出しは、プログラムの中で、 返値 関数名 (型1 仮引数1, 型2 仮引数2, …) 関数名 (引数1, 引数2, …) という形式を取るのだった 関数から値を、呼び出し元に戻すことができ る(return 式;) 前回までの復習3 Cygwinってなんだっけ? Cygwinの使い方 プログラミング演習Iの4/20の回を参照 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日一杯(日本時間 で) 提出先:メールで木村([email protected])まで. 感想などあると木村が喜びます レポート課題: /* ??? */を補え int static_fib (void) { /* ??? */ int fib1 = 1; /* ??? */ int fib2 = 1; int tmp = fib1; fib1 = fib2; fib2 = tmp + fib2; return fib2; } int main (void) { printf ("%d\n", static_fib()); printf ("%d\n", static_fib()); printf ("%d\n", static_fib()); printf ("%d\n", static_fib()); printf ("%d\n", static_fib()); printf ("%d\n", static_fib()); printf ("%d\n", static_fib()); return 1; } レポートの書式 件名(Subject)に、プログラミング演習IIのレ ポートであることを明記 差出人欄(From: )に、差出人の氏名を明記 Spamメールを大量に受け取るので、これらが明 記されていないメールは読まれないことがありま す。そもそも当然のネチケット(neticket)です レポートの内容は、本文に記述。添付書類に しない。実行ファイルを添付しない!
© Copyright 2024 ExpyDoc