C言語 関数の分かりやすい解説【初心者用】

今回は、関数について説明していきます。

#include <stdio.h>

void main(void) {
      int a;

      printf("数値を入力して下さい\n");
      scanf("%d", &a);
      printf("あなたが入力した数値は%dです\n", a);

}

関数と言うとなんだか難しそうに
思えるかもしれませんが、そうでもありません。

何かをしてくれる部品と考えましょう。

実は上記プログラムにも関数が使われています。

printf関数は画面に何かを表示してくれる部品です。
scanf関数はキーボードからの入力を受け付けてくれる部品です。

そして、mainも関数です。この関数はこの場合、
キーボードから入力された数値を表示する部品です。

と言う感じになります。

どうでしょう?なんとなく理解できたでしょうか?

C言語はその関数の集まりでできています。

また、自分でも関数を作る事ができます。

実際に作ってみましょう。

プログラム作成

三角形の面積を求めるプログラムを作る事にします。

#include <stdio.h>

int menseki(int teihen, int takasa);

void main(void) {
      int a, b, c;

      printf("三角形の底辺を入力してください\n");
      scanf("%d", &a);

      printf("三角形の高さを入力してください\n");
      scanf("%d", &b);

      /* 面積を求める */
      c = menseki(a, b);

      /* 面積表示 */
      printf("底辺%d、高さ%dの三角形の面積は%dです\n", a, b, c);

}

/* 三角形の面積を求める関数 */
int menseki(int teihen, int takasa) {
      int ans;

      ans = teihen * takasa / 2;

      return ans;
}
三角形の底辺を入力してください
10
三角形の高さを入力してください
5
底辺10、高さ5の三角形の面積は25です

成功すると上記のように表示されます。

プログラム解説

まず、変数と同じように、関数は実際に使う前に
あらかじめ、宣言しておかなくてはなりません。
プロトタイプ宣言と言います。)

ここでは、関数の処理内容を書く必要はありません。

int menseki(int teihen, int takasa); /* これがプロトタイプ宣言 */

関数のプロトタイプ宣言は、次のような書式で書きます。

戻り値の変数型 関数名(変数型 引数名1,変数型 引数名2・・・);

それぞれ、戻り値(もどりち)、引数(ひきすう)と読みます。
また、引数は順番に第1引数第2引数・・・と呼びます。

次にmenseki関数を呼び出しています。

c = menseki(a, b);

ここでプログラムがmenseki関数に飛びます。

int menseki(int teihen, int takasa) {
      int ans;

      ans = teihen * takasa / 2;

      return ans;
}

この時、int teihen部分には変数aの値が、
int takasa部分には変数bの値代入されます。(重要なポイントです)
そして、menseki関数内の処理が行われていきます。

returnという記述は、関数を終了すると言う意味と同時に
戻り値を返すと言う意味もあります。

この場合、変数ansの値を返し、
main関数内の変数cに代入される事になります。
その後、再び、c = menseki(a, b); の続きから
プログラムが動き出す流れになります。

menseki関数のイメージとしては、
「底辺と高さを言うから(引数)面積を計算して教えてくれ(戻り値)」
と言う感じになります。

用語

menseki関数のint teihenとint takasaという引数は
何の値が代入されるか分からないので、仮引数と呼ばれ、
実際にc = menseki(a, b); の文で
menseki関数の呼び出し時に指定する引数の事を実引数と呼びます。
このプログラム例の場合の実引数はabと言う事になります。