関数(function)
数学の関数
- 関数とは
$x$の値に対して$y$の値が1つに定まるもの
例:$f(x)=x^2$ ←関数の定義
$x$:独立変数 $y$:従属変数
(システムとして捉えるならば、$x$:入力 $y$:出力)
$f(a)$の値は$x$の処を$a$に置き換えて計算する
例:$f(3)=3^2=9,\ f(-2)=(-2)^2=4$
- 多変数関数
例:$g(x,y)=\sqrt{x^2+y^2}$ ←関数の定義
$g(3,4)=\sqrt{3^2+4^2}=\sqrt{9+16}=\sqrt{25}=5$
$g(5,12)=\sqrt{5^2+12^2}=\sqrt{25+144}=\sqrt{169}=13$
戻り値の型 関数名(パラメータの型 パラメータ名)
{
処理
return; /* 戻り値がない場合 */
return( 戻り値 ); /* 戻り値がある場合 */
}
- 関数の宣言と共に実体(中身)も定義する
- このパラメータは仮引数とも呼ばれる
- パラメータが複数ある場合はカンマ「,」で区切る
- 配列型のパラメータはその要素へのポインタ型のパラメータと同一である
- パラメータは都合良く初期化された自動変数として振舞
う
- 値を返さない関数の場合は、戻り値の型を「void」とす
る
- ブロックは { } で囲む
- returnを実行すると呼び出した関数へ戻る
- return()の括弧「()」は書かなくても良い←return()は
関数でなはい!
戻り値の型 関数名(パラメータの型 パラメータ名);
- ヘッダファイル等、呼び出しの前にこの関数の宣言を行なう
- 宣言は関数の名前と入出力の仕様を明確にするのみで中身は記述しない!
- このパラメータは仮引数とも呼ばれる
- パラメータが複数ある場合はカンマ「,」で区切る
- 配列型のパラメータはその要素へのポインタ型のパラメータと同一である
- 定義中のパラメータ名と一致していなくても良く、型の並びが重要
- 値を返さない関数の場合は、戻り値の型を「void」とす
る
関数名(
引数)
- 関数の呼び出しの前には宣言(あるいは定義)が必要である
- この引数は実引数とも呼ばれる
- 引数が複数ある場合はカンマ「,」で区切る
- 引数は式であり、その値が関数の仮引数に渡される
値呼び出し(call by value)である
- 引数の型はパラメータの型に一致していなければならない
- 型宣言されていないパラメータに渡す引数の値には、
デフォルトの型変換が
なされる
- 宣言されていない関数の戻り値の型はintとして処理され
る
- 単独で文にするためにはセミコロン「;」を最後に付ける
- 値を返す関数の場合は、その値を式の中で使うこともできる
- 引数を渡すというのは、
- 関数の呼び出し側で実引数の式を計算した結果の値を、
関数定義で定義された仮引数の自動変数に初期値として代入する。
ということです。
- 戻り値(return value)を返すというのは、
- 式の中で関数の呼び出しを行うと、
呼び出された関数側でreturn(式);文を実行した時に、
returnの中の式の値を計算した結果の値(これが戻り値)が、
関数の値として返される。(そして式の計算に使われる。)
ということです。
#include "
インクルードファイル名"
- ファイル名で指定されたファイルの中身をソースファイルに含める
- ファイル名はパス名を指定する
- 定義や宣言を共有するためにヘッダファイルが指定されることが多い
標準ライブラリ関数と標準ヘッダファイル
#include <
ヘッダファイル名>
- ヘッダファイルには関数の外部宣言等が記述されている
- ファイル内で使用する(呼び出す)ライブラリ関数が宣言されている
ヘッダファイルをインクルードしなければならない
標準ヘッダ | 関数 | 備考 |
stdio.h |
puts, gets,,, printf, scanf,,, fopen, fclose,,, |
入出力、 書式付入出力、 ファイル操作 |
string.h |
strcat, strcmp, strcpy, strlen,,, | 文字列操作 |
stdlib.h |
atof, atoi,,, rand, srand,,, malloc, free,,, | ユーティリティー |
math.h |
sin, cos, tan,,, exp, log, pow, sqrt,,, ceil, floor,,, | 数学関数 |
標準ヘッダを見てみよう
これらのファイルは絶対に編集しないこと!
保存せずに終了!!
- stdio.hを探して見てみよう!
- string.hを探して見てみよう!
- math.hを探して見てみよう!
/* 斜辺の長さを求めるプログラム */
/* 標準ヘッダをインクルードする */
#include <stdio.h>
#include <math.h>
main()
{
/* 変数定義 */
float a, b, c;
/* 標準出力関数 */
printf("1辺の長さを入力して下さい:");
/* 標準入力関数 */
scanf("%f", &a ); /*「&」はアドレスを表す */
printf("もう1辺の長さを入力して下さい:");
scanf("%f", &b );
c = sqrt( a*a + b*b ); /* sqrtは平方根関数 */
printf("斜辺の長さ:%f\n", c );
}
/* end of pytha.c */
- 三角形の面積を求めるプログラム(tri.c)を作成せよ
底辺の長さを入力して下さい:
と表示し、底辺の長さをキーボードから入力させ、
高さを入力して下さい:
と表示し、高さをキーボードから入力させ、
底辺:○○、高さ:□□ の三角形の面積は、○□ です。
と三角形の面積を計算して表示するものとする。
- 台形の面積を求めるプログラム(trap.c)を作成せよ
上底の長さを入力して下さい:
と表示し、上底の長さをキーボードから入力させ、
下底の長さを入力して下さい:
と表示し、下底の長さをキーボードから入力させ、
高さを入力して下さい:
と表示し、高さをキーボードから入力させ、
上底:○○、下底:△△、高さ:□□ の台形の面積は、○△□ です。
と台形の面積を計算して表示するものとする。
- 円の周と面積を求めるプログラム(cir.c)を作成せよ
半径の長さを入力して下さい:
と表示し、半径の長さをキーボードから入力させ、
半径:○○ の円の周は△△、面積は□□ です。
と円の周と面積を計算して表示するものとする。
/* 斜辺の長さを求めるプログラム2 */
#include <stdio.h>
#include <math.h>
float shahen( float x, float y ); /* 関数宣言 */
main()
{
float a, b, c;
printf("1辺の長さを入力して下さい:");
scanf("%f", &a );
printf("もう1辺の長さを入力して下さい:");
scanf("%f", &b );
c = shahen( a, b ); /* 関数呼び出し */
printf("斜辺の長さ:%f\n", c );
}
/* 2辺から斜辺の長さを求める関数定義 */
float shahen( float x, float y )
{
return( sqrt( x*x + y*y ) );
}
/* end of pytha2.c */
- 三角形の面積を求める関数 triangle() を作成し、それを使って三角形の面積を求めるプログラム(tri2.c)を作ってみよう!
- float triangle( float a, float h );
- 台形の面積を求める関数 trapezoid() を作成し、それを使って台形の面積を求めるプログラム(trap2.c)を作ってみよう!
- float trapezoid( float a, float b, float h );
- 円の面積を求める関数 circle() および円周を求める関数 circumference() を作成し、それらを使って円の周と面積を求めるプログラム(cir2.c)
を作ってみよう!
- float circle( float r );
- float circumference( float r );