...

PDF版

by user

on
Category: Documents
12

views

Report

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])まで.
感想などあると木村が喜びます
Fly UP