関数の使い方

関数の使い方

プログラムを作っていると、同じ操作を何度もする場合があります。例えば、行列の掛け算を何度もするとかです。そのようなとき、動作をひとまとめにできる関数が便利です。ここでは関数の使い方を紹介します。

ベクトルの和を計算するプログラム

関数の使い方の例を提示し、解説していきます。「ベクトルの成分がa_1,a_2,a_3というベクトルA」と「ベクトル成分がb_1,b_2,b_3というベクトルB」の長さを計算するプログラムを作ります。

関数なしだと

これを関数を使わずに書くと以下のようになります。

#include <stdio.h>
#include <math.h>
int main(void){
	float a_1,a_2,a_3,b_1,b_2,b_3,a,b;
	//成分の入力
	a_1=1.0;
	a_2=2.0;
	a_3=3.0;
	b_1=4.0;
	b_2=5.0;
	b_3=6.0;
	//Aの長さの計算
	a=a_1*a_1+a_2*a_2+a_3*a_3;
	a=sqrt(a);
	//Bの長さの計算
	b=b_1*b_1+b_2*b_2+b_3*b_3;
	b=sqrt(b);
	//結果の出力
	printf("A:%f,B:%f\n",a,b);
	return 0;
}

ルートを計算するためにsqrtという命令を使っています。この命令を使うにはmath.hをインクルードする必要があります。実行すると以下のようになります。

A:3.741657,B:8.774964

関数ありだと

このプログラムでもいいのですが、二回も同じ計算をしているのでここの部分を関数で書いています。

すると

#include <stdio.h>
#include <math.h>

float func(const float a_1,const float a_2,const float a_3);
int main(void){
	float a_1,a_2,a_3,b_1,b_2,b_3;
	//成分の入力
	a_1=1.0;
	a_2=2.0;
	a_3=3.0;
	b_1=4.0;
	b_2=5.0;
	b_3=6.0;
	//結果の出力
	printf("A:%f,B:%f\n",func(a_1,a_2,a_3),func(b_1,b_2,b_3));
	return 0;
}
float func(const float a_1,const float a_2,const float a_3){
	float a;
	a=a_1*a_1+a_2*a_2+a_3*a_3;
	a=sqrt(a);
	return a;
}

となります。長さをもとめる部分を関数で書いたので、mainの部分がすっきりしています。関数の定義の仕方は以下のようになっています。

データ型 関数名(データ型 仮引数名,データ型 仮引数名,…);

関数の使い方ですが、まず、mainの前に宣言します。

float func(const float a_1,const float a_2,const float a_3);

そして、mainの後に具体的に書いていきます。

float func(const float a_1,const float a_2,const float a_3){
	float a;
	a=a_1*a_1+a_2*a_2+a_3*a_3;
	a=sqrt(a);
	return a;
}

float func(…)のfloatは戻り値の型を意味していて、returnの値が返されます。括弧の中身a_1,a_2,a_3は関数で使用する値を意味します。floatの前についているconstは定数を意味します。関数で変化しない変数にはconstをつけましょう。constをつけることで、誤って値を変更することがなくなります。また、関数を使用する人が、どの値が変化するかを把握できます。

使用頻度が高い関数は、関数化しておくと色々と使えて便利です。コピペするだけで、使用出来るので時間の節約になります。いろいろな関数を作ってみてください。

著者:安井 真人(やすい まさと)