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