C++スコーラ
関数
最終更新:
cschola
-
view
関数(function)
今回は関数という存在について説明します。
javaでは「メソッド」と呼ばれます
関数といっても数学で使う関数とは別物です。
関数はそんなに難しいものではありません。なぜならすでに、関数を使っているからです。
javaでは「メソッド」と呼ばれます
関数といっても数学で使う関数とは別物です。
関数はそんなに難しいものではありません。なぜならすでに、関数を使っているからです。
ライブラリ関数
実は、今まで使っていた main() や printf() も関数なのです。
main() は一番最初に実行される関数です。 printf() は画面に文字を出力する関数です。
main() は一番最初に実行される関数です。 printf() は画面に文字を出力する関数です。
関数は事前に「宣言」「定義」して、パソコンに教えてあげないと使うことができません。
main()関数はC言語で必ず使うのでパソコンはもとから覚えています。
printf()関数 や scanf_s()関数 は <stdio.h> の中で 「宣言」「定義」されています。
main()関数はC言語で必ず使うのでパソコンはもとから覚えています。
printf()関数 や scanf_s()関数 は <stdio.h> の中で 「宣言」「定義」されています。
#include
は< >の中身をそのままそこに張り付けるような仕事をします。
C言語では # のついた命令はコンパイル(コンピュータが読める状態にする)前に実行されます。
こういったコンパイル前の処理をプリプロセッサなどと呼びます。
今回はその関数を自分で作る方法について説明します。
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関数を呼び出しています。
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 という変数が二回宣言されています。
違う関数の中でなら同じ名前の変数を宣言することができます。
この二つの変数は全く別のもので、それぞれ宣言された関数の中でしか使えません。
呼び出されて初めてその効果を発揮します。
今回は 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問の関数を使い、ユーザーから入力された二つの数値の差を求めるプログラム。
二つの引数をとり、大きいほうだけを返すMax関数と、小さい方だけを返すMin関数。
第2問
二つの引数をとり、大きい方から小さい方を引いた差を返すSub関数。
第3問
第1問、第2問の関数を使い、ユーザーから入力された二つの数値の差を求めるプログラム。