プログラミング演習I

プログラミング演習I
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])まで.
感想などあると木村が喜びます