今回は関数について勉強していきましょう
関数とは
今までのプログラムで毎回書いてきたものがありますよね?その中の以下の部分をmain関数といいます。
int main(void)
{
//省略
}
また、printfやscanfなどをライブラリ関数といいます。
これまではmain関数のみのプログラムを作成してきましたが、自分で関数を作成し、それを組み合わせてプログラムを作ることもできます。そこで今回は関数の作り方と関数の使い方について学んでいきましょう。
関数の作り方
二つの整数値のうち大きい方を返す関数を作ってみましょう。
int bigger (int x, int y)
{
if (x > y)
return x;
else
return y;
}
この関数の名前(関数名)はbiggerです。
この関数はintで宣言されているため、関数が呼び出されたとき、intの値を返します。
int x, int yは仮引数と呼ばれます。
関数の使い方
作成した関数を使うためには関数呼び出しをしなければなりません。
では先程作った関数をmain関数の中で呼び出して、二つの整数値のうち、大きい方の値を求めるプログラムを作成しましょう。
#include<stdio.h>
int bigger(int x, int y)
{
if(x > y)
return x;
else
return y;
}
int main(void)
{
int num1,num2;
printf("ひとつ目の数字は:");
scanf("%d", &num1);
printf("ふたつ目の数字は:");
scanf("%d", &num2);
printf("大きい方の値は%dです.\n", bigger(num1,num2));
return 0;
}
ふたつ目の数字は:8
大きい方の値は8です.
解説
上のソースコードのmain関数内のprintfに注目してください。
赤の部分が関数呼び出し式とよばれ、関数呼び出し式の記述により関数を呼び出すことができます。また、()内のnum1, num2のことを実引数といいます。実引数の値が仮引数にセットされ、関数内で処理が行われた後return文により、その値が関数呼び出し式に返却されます。

関数の引数には配列を使用することもできます。平均を計算する関数を作成し5人のテストの点数の平均を求めるプログラムを作ってみましょう。
#include<stdio.h>
#define NUM 5 //受験者数
double ave(int v[], int x)
{
int i,sum;
sum = 0;
for(i=0;i<x;i++)
sum += v[i]; // sum = sum + v[i];
return (double)sum/x;
}
int main(void){
int score[NUM];
puts("テストの点数を入力してください");
for(int i=0;i<NUM;i++)
{
printf("%d番目:",i+1);
scanf("%d", &score[i]);
}
printf("テストの平均は%.1f点です.\n", ave(score, NUM));
return 0;
}
1番目:50
2番目:78
3番目:92
4番目:34
5番目:66
テストの平均は64.0点です.
いかがでしたか?機能ごとに関数を作成することで、ソースコードがわかりやすくなり、エラーが発生した時も全体に影響を及ぼしにくくなったり対処がしやすくなったりと様々な利点があります。

C言語学習におすすめのテキストはこちら