プログラミング基礎 II

第八回: 関数の作り方と使い方

Martin J. Dürst

duerst@it.aoyama.ac.jp

O 棟 529号室

テュールスト マーティン ヤコブ

http://www.sw.it.aoyama.ac.jp/2005/Programming%20Basics%20II/lecture8.html

AGU

© 2005 Martin J. Dürst 青山学院大学

先週の演習題

  1. 1 から 20 の整数の半径の円の面積を計算するプログラムを作りなさい。
  2. 先週のゴミ出しのプログラムをある月の一日の曜日だけを指定して、プログラムがその月の全ての日のゴミ出しを計算するように改造してください (月が全て 31日間の想定で結構です)。
  3. 先週のゴミ出しのプログラムをユーザが何回も入力できる、しかも止めたいときには止める様に変更してください。
  4. 10~20 かける 10~20 の表を作って下さい。(ヒント: printf%d の代わりに %3d を使うと数字が揃う)
  5. ある入力した数字が素数かどうかを判断するプログラムを作って下さい。さらに、1 から n までを素数かどうかのプログラムに変更してください。
  6. 自分の分野や身の回りの問題で繰り返しと条件文を使った面白いプログラムを作って下さい。

今までの関数の使い方

自分で書いた関数:

使った関数:

関数の目的、役割

関数の作り方

double① pow② (double③ a④, int③ b④)
{
    int n;⑥
    double ret = 1;
    for (n=0; n<b; n++) {
        ret *= a;
    }
    return ret;⑤
}
  1. 戻り値の型
  2. 関数の名前
  3. 引数の型
  4. 引数の名前
  5. return
  6. 関数の本文

関数とのデータのやり取り

引数: 関数へ値を引き渡す (0 個 (void) 以上)

戻り値: 関数から値を戻す (0 個 (void) 又は 1 個)

グローバル変数: プログラム全体に使える変数。役割分担などはっきりしないため、避けた方がよい。

関数の型

関数の型は次のもので定まる:

例外: printfscanf の場合には引数の数も第二引数以降の型も決っていない

関数の宣言と定義

関数を作るときの注意点

今週の演習題

  1. 簡単な関数 (例えば消費税の計算、利子の計算、BMI の計算、素数の判断) を一つ作って、先生や TA に見せてからその関数を使う main 関数を作って下さい。
  2. 先週の演習問題 2 及び 3 の一日分のゴミ出しの判断を関数にして、二つのプログラムを書き直してください。
  3. 今までの演習問題のプログラムを調査して、関数に出来るところを見つけて関数化する。
  4. 発展問題: 二つの 1 以上の整数の最大公約数を計算する関数 (とこれを使うプログラム) を作る。a と b の最大公約数 gcd(a, b) は次のように計算できる: a==b の時 a と b が最大公約数; a>b の時 gcd(a, b) は gcd (a-b, b) と同じ。a<b の時に gcd(a, b) は gcd(b, a) と同じ。この説明に沿って関数を作って下さい。関数が自分を呼ぶことを気にしないでください。
  5. 発展問題: 複数のプログラムに同じ関数を書くのが無駄な面がある。一日分のゴミ出しの判断の関数を別のファイル (例えば gomi.c) に移して、その宣言を例えば gomi.h に入れて、今までのプログラムで #include "gomi.h" で引用して下さい。コンパイルの場合に複数の .c ファイルを書いてもよい (.h ファイルは書かなくてよい)

次回のための準備