main 関数の引数は、 その引数の値を利用しない限り、なんと宣言してよい 普通は、 int argc, char *argv[] だが、 void でもよい main 関数 C 言語における関数ではあるが、次の点、他異なる 1. 最初に呼び出される関数 2. 必ず必要な関数 3. 呼び出すのは、他の関数ではなく、コマンドライン(shell)から.. => コマンドライン引数がある (int argc, char *argv[]) => 引数宣言(関数同士で呼び出すときには双方でそろえる必要がある) => main は、関数から呼び出されないので、適当でよい 4. 返す値も、他の関数ではなく、コマンドライン(shell) == 制御構造 命令を組み合わせる仕方と、その表現 順接 意味:二つ命令 A, B があるときに、それをその順に実行する 表現: 並べるだけ => A B 条件分岐 意味: 二つの命令 A,B と条件 P があるとき P の成立、不成立によって、A, B のいずれか一方を実行する 表現: if ( P ) { A } else { B } 繰り返し 意味: 一つの命令 A と条件 P が与えらえたとき、 条件 P が成立する限り A を何度も実行する 例: n が与えられたときに、順に n を減らしながら、 P: n が 0 より大きい間 A: n を出力する 表現: 再帰呼び出し f() { if ( P ) { <= P は引数の値を参照する A f() <= P の条件が変化するように引数の値を変更する } else { } } => 短い命令の記述で、長い命令の実行が可能になる cf. 順接や、条件分岐は、 命令の記述の長さより、実行の長さが長くならない == 制御構造は、何度でも適用可能(組み合わせも可能)なので、 制御構造を繰り返し適用する事により、複雑な命令が作れる 順接の組み合わせ : いくらでも長いプログラムがかける 条件分岐の組み合わせで : いくつでも場合わけができる 実は、(数学的/原理的に)作成可能なプログラムと同じ機能を この三つの制御構造だけで、実現できる => 万能性 繰り返しは一回 次は、条件分岐(複数) 個々の条件に、順接をする の形のプログラムでも、万能になる == 関数の定義とその利用法 C 言語のプログラムは、main 関数がないといけない => main 関数だけがあればよい (cf. Hello, World ) => *最悪* main の本体のところにいろいろかけば、 任意の機能のプログラムがかける => main だけにする 一度に全部を考える => 一定のサイズをこえると対応できなくなる 関数を作る 関数とは「命令の一部に名前つけて、名前で、その命令を実行するできるようにしたときのその名前」 => 目的は「命令に名前をつける事」ではない <= 関数を利用すると、(長い)命令が、(短い)関数呼び出しになる => 関数を呼び出す側が関数を利用を利用する事により短くなる => 関数の定義そのものは、命令数が少ないので短くなる => 関数を利用しないと長いプログラムが、 関数を利用する事により、短いプログラム集まりになる => 複雑すぎて解けないような一つの問題を、 単純で解けそうな複数の問題に還元する 分割統治法 関数定義する手順:命令に名前を付ける 1. 名前を決める sub 2. その前に void と後ろに (void) そして、{} をつける void sub(void) { } 3. {} の間に名前をつけたい命令をかく void sub(void) { printf ( "Hello, World\n" ); printf ( "Hello, World\n" ); } 4. 関数の使いかた 関数名(); とする sub(); /* Hello、World が二度実行される */ == より一般的な関数の定義 型宣言 型宣言 : 関数の返す値の型 (void とした場合は、値を返さない 型宣言 関数名 関数名 : 個々の関数を識別するための名前 型宣言 関数名 ( 関数引数並び ) 関数引数並び : その関数を呼び出すとき、 どの型の値をどの順で指定するかを定める その引数を、次の関数の本体の中で、参照する名前(変数)を定める 引数がない場合は、void とする 引数がある場合は、 「型 変数名」の対を「,」で区切って並べる 型宣言 関数名 ( 関数引数並び ) { 命令 } 関数の本体は、関数が表す命令列で、 { 命令 } の形 1. 関数引数で指定されている変数が利用できる 2. return 命令を利用する事によって、値を返す事がきる 3. 命令列は任意で、他の関数の呼び出しなども可能 # 再帰を呼び出しを利用して、繰り返しも実行できる ==