Comments
Description
Transcript
PDF版
プログラミング演習 プログラミング演習II 2004年7月21日(第12回) 理学部数学科・木村巌 前回までの復習 配列の基本事項 配列の応用 マクロ 文字列とchar型の配列との関係 今日学ぶこと 関数 教科書8章 関数 複数の処理を一つにまとめて記述する方法 関数を定義する 関数を呼び出す それぞれを以下で学んでいこう 関数の定義 関数定義の構文(教科書p.218) 戻り値の型 関数名 (引数リスト) { 文; /* 複数の文からなる、関数の本体 */ … return 式; } 関数名は「識別子」(教科書p.47) 関数の呼び出し 関数呼び出しの構文 関数名(引数リスト); Sample1.cを入力し、コンパイル・実行してみよ う 関数呼び出しは、(1)関数の呼び出し、(2) 関数内部の処理、(3)呼び出し元の関数に 制御が戻る、という順序を踏む 同じ関数を複数回呼び出すことも可能 Sample2.cを入力し、コンパイル・実行してみよ う 引数 関数呼び出しの際に、呼び出し元から関数 内に値を渡し、その値に応じた処理を行 うことが出来る 関数に渡す情報を、引数(argument)という 引数は、その関数内でだけ使う変数名(型を 持つ) 引数を渡して関数を呼び出す 引数と同じ型を持つ値、または変数を記述し て関数を呼び出す Sample3.c, Sample4.c を入力し、コンパイル・実 行してみよう 仮引数(関数定義の際の引数)と実引数(関 数呼び出しの際の引数)の違い 複数の引数を持つ関数 関数の引数は複数でもよい Sample5.c を入力し、コンパイル・実行してみよ う それぞれの引数の型が異なっていてもよい 実引数が評価される順番は定義されていな い(C99, 6.5.2.2 Function callsのconstraints 10, “The order of evaluation of the function designator, the actual arguments, and subexpressions within the actual arguments is unspecified, but there is a sequence point before the actual call.”) 引数のない関数 引数のない関数も可能.引数の型として、void を指定する. 例えば、今までに何度も使ってきた、 int main (void) {……} もそのような例. 引数のない関数の呼び出しは、実引数なしで 関数名と括弧を書く buy(); /* buyの呼び出し */ 戻り値 関数の呼び出し元に、関数本体から情報を 返す 構文: 戻り値の型 関数名(引数リスト) { /* 関数本体 */ return 式; /* 関数の途中でreturnも可能 */ } 戻り値(続) 例えば、 int buy (int x, int y) { printf (“%d万円と%d万円の車を購入¥n”, x, y); return x + y; /* x + y の値を返す */ } Sample6.cを入力し、コンパイル・実行してみよ う 戻り値のない関数 戻り値を持たない関数を定義するときは、 void 関数名(引数リスト) { /* 関数本体 */ return; /* 式を書かない */ } とする. returnを見た時点で、呼び出し元に制御を返 す. 関数の利用 Sample7.c, Sample8.c を入力し、コンパイル・実 行してみよう 関数形式のマクロ 構文 #define マクロ名 (引数, 引数, …) (式) コンパイル時に、プリプロセッサにより、マクロ が式に展開され、式の中の引数が、対応する 実引数に置換される #define MAX(x, y) (x > y ? x : y) 小さな関数は、可能ならば関数形式マクロに した方が有利 Sample9.cをコンパイル・実行してみよう 関数形式のマクロ(続) 関数形式のマクロでは、引数の型に制約が ない 便利な反面、思わぬ間違いの元でもある 関数を使えば、コンパイラが引数の型のミス マッチを指摘してくれる(教科書p.248の下を参 照) 今日学んだこと 関数の定義・呼び出し 関数の引数・戻り値 関数形式のマクロ レポート課題 二つのint型の値を受け取り、それらの平均 をfloat型で返す関数 float mean (int x, int y)を書 き、実行例を挙げよ(Sample7.cを参照) 締め切り:2004年7月27日一杯(日本時間で) 提出先:メールで木村([email protected])まで. 感想などあると木村が喜びます