C++スコーラ

関数

最終更新:

cschola

- view
管理者のみ編集可

関数(function)

今回は関数という存在について説明します。
javaでは「メソッド」と呼ばれます
関数といっても数学で使う関数とは別物です。
関数はそんなに難しいものではありません。なぜならすでに、関数を使っているからです。

ライブラリ関数

実は、今まで使っていた main() や printf() も関数なのです。
main() は一番最初に実行される関数です。 printf() は画面に文字を出力する関数です。

関数は事前に「宣言」「定義」して、パソコンに教えてあげないと使うことができません。
main()関数はC言語で必ず使うのでパソコンはもとから覚えています。
printf()関数 や scanf_s()関数 は <stdio.h> の中で 「宣言」「定義」されています。
 #include
は< >の中身をそのままそこに張り付けるような仕事をします。
C言語では # のついた命令はコンパイル(コンピュータが読める状態にする)前に実行されます。
こういったコンパイル前の処理をプリプロセッサなどと呼びます。
今回はその関数を自分で作る方法について説明します。

自作関数

自作関数を作る(書く)ときは main()関数よりも前に書きます。そうしないと main()関数の中で使えません。
#include <stdio.h>

// 合計を返す関数
int Add(int x,int y){
	int num = 0;
	num = x + y;
	return num;  // xとyを足した数を返す
}

int main() { 	
	int a = 0; 
	int b = 0;
	int sum = 0;

	printf("整数値を2回入力してください。\n");

	scanf_s("%d%d",&a,&b);

	sum = Add(a, b);

	printf("合計は%d\n",sum);

	return 0;
}
int Add(int x,int y)  これが関数の宣言になります。
int が返り値の型です。(返り値については後で説明します。)
Add が関数の名前です。
(int x,int y)  この中の x , y を仮引数(かりひきすう)と呼びます。
ここには関数の外から取り入れたいデータを書きます。 今回はint型のデータ二つです。
次に {} があります。関数の定義(内容)は { } で区切られているのです。
int num = 0; は変数の宣言です。 関数の中でも変数を宣言することができます。
num = x + y; は今までの知識で理解できると思います。 わからない人は少し前に戻ってみましょう。
return num; ここで戻り値を返します。戻り値とは関数を呼び出した(使った)ときに帰ってくる(出てくる)値のことです。
今回は int型 で宣言しているので int型 の数値を返すことになります。
main()関数の中にある sum = Add(a,b); でAdd関数を呼び出しています。 

呼び出し

関数は「宣言」「定義」されただけでは意味がありません。
呼び出されて初めてその効果を発揮します。
今回は sum の中に Add関数の計算結果(戻り値)を代入しています。
関数はいくつでも作ることができます。 また、関数の中で関数を使うこともできます。
関数の引数として関数を使うこともできます。
上の例をよく見ると int a という変数が二回宣言されています。
違う関数の中でなら同じ名前の変数を宣言することができます。
この二つの変数は全く別のもので、それぞれ宣言された関数の中でしか使えません。
// double型の合計を返す関数
double Add_Double(double x,double y){
	return x + y;
}
// 2つの数値の平均を返す関数
double Average(double x,double y){
	return Add_Double(x,y)/2;
} 

int main() {
  	double x = 0;
	double y = 0;
	 
	printf("実数値を二回入力してください。\n");

	scanf_s("%lf%lf",&x,&y);

	printf("平均値は約%.3f\n",Average(x,y));

	return 0;
}

練習問題

次のようなユーザー関数とプログラムを使って作ってください

第1問
 二つの引数をとり、大きいほうだけを返すMax関数と、小さい方だけを返すMin関数。
第2問
 二つの引数をとり、大きい方から小さい方を引いた差を返すSub関数。
第3問
 第1問、第2問の関数を使い、ユーザーから入力された二つの数値の差を求めるプログラム。
目安箱バナー