プログラミングにおいて特定の処理をするプログラムをまとめておくということは重要なことです。 そうすることによってその機能を何度も書かずに済んだり、ソースコードが読みやすくなります。 C言語では関数によってプログラムをまとめることができます。
関数は
関数名(引数リスト);
という形で使います。たとえば
getchar();
とするとgetchar()という関数を使うことになります。
関数には引数を与えてその動きを制御することができます。 たとえば
putchar('c');
とするとコンソールに指定した文字を出力する関数であるputcharをcを出力するよう指定して呼び出したことになります。 この引数は複数渡すことができます。
printf("%d",i);
と書くと%dとiを渡すことができます。
また関数はプログラムを実行した結果を伝えることができます。これを関数の戻り値といいます。 戻り値は値なのでiを変数とすると
i = getchar();
とするとコンソールに入力された文字をiに代入することができます。 引数の数や型、戻り値の型は関数ごとに決まっています。
当然ながら関数は作ることができます。関数は以下のように書きます。
戻り値の型 関数名(引数1の型 引数1の名前,引数2の型 引数2の名前....)
{
関数の処理
return 戻り値;
}
引数はその関数の中だけであらかじめ値の入った変数として扱うことができます。
引数を持たなかったり戻り値を返さない関数を作りたいことが出てきます。その時にはvoidと書けばよいことになっています。
たとえば
void K(void)
{
....
}
とすると引数を持たず戻り値もない関数Kが出来上がります。 戻り値がない場合、関数の最後のreturn;は省略できます。
C言語は先に宣言してからでないと関数や変数を使うことができません。 しかし関数はかなりの行数を書くことになり使う前に宣言したくないという場合があります。 この場合関数の戻り値、名前、引数だけを指定して内容を後で書くことができます。この中身のない関数の宣言をプロトタイプ宣言といい以下のように書きます。
戻り値の型 関数名 (引数リスト);
皆さんがプログラムを作るとき
void main(void)
{
...
}
と書いていたと思います。このmain関数は特別な関数でプログラムが実行されるとき最初に自動的に呼び出されます。
またこの関数の戻り値はint型でそのプログラムの実行結果を表します。通常は正常終了の0を返します。
引数については
void main(int argc, char *argv[])
とするとコンソールに入力されたコマンドラインを取得することができます。 コマンドラインはコンソールに
プログラム名 引数1 引数2 ...
とすることで指定できます。この時argcは引数の数、argvが入力された文字列になります。 *や[]の意味については後の講でやります。]
C言語にはプログラムの流れを制御する専用の構文が用意されています。これをステートメントといいます。
ある条件が真つまり0以外か、偽つまり0かで処理を分岐します。 条件分岐はif構文て行うことができます。
if(条件1)
{
条件1が真の時の処理
}else if(条件2)
{
条件2が真の時の処理
}else
{
すべての条件が偽の時の処理
}
else if や elseは省略することができます。条件には式や関数を入れることができます。
特殊なケースとしてある式の結果の値で処理をたくさん分けたいときがあります。その場合swichを使います。
switch(条件)
{
case 数値1:
条件式が数値1になった時の処理。
break;
case 数値2
条件式が数値1になった時の処理。
break;
default:
すべての条件に合わなかった時の処理。
break;
}
break;はここで処理を中断するという意味です。もしbraek;がないとcaseの下の処理まで行われます。
条件が真の間中処理を繰り返します。 繰り返しにはfor構文とwhile構文があります。
for(初期化式;条件式;更新式)
{
繰り返す処理
}
初期化式とはfor構文の最初に必ず実行される式です。更新式は繰り返す処理が終わるたびに実行される式です。 通常は初期化式で変数を初期化して、更新式で変数を変更します。
一方while構文は
while(条件式)
{ 繰り返す処理 }
または
do
{
繰り返す処理
}while(条件式)
do whileは先に処理を実行してから条件を判断します。
繰り返し処理の中にcontinue;と書くとそのループを中断し次のループに移ります。 break;と書くと繰り返しを中止します。