まずごく簡単な、基本的なプログラムを書いてみます。その中でまずはC言語に、あるいは変数や関数といった基本的な処理の流れについて理解しましょう。 :説明pdf|#ref(firstday.pdf) :advance説明pdf|#ref(firstday-a.pdf) プログラム1・2はごく基本的な処理になっています。とくに1に関しては「hello,world!」といってプログラムを始めるときのお決まりのプログラムになっています。 さて、暇があるならプログラムの「どこが変えられるか」、「どこを変えてはいけないか」を書き換えながらじっくり検討してみてください。 ---- では、説明をしていきます。 :プレゼン|#ref(firstday-p.pdf) **変数 プリントでは、変数について >コンピュータ(のメモリ上)に確保される作業エリアです。 という説明がなされています。また、よくなされる説明としては >数字を入れる箱のようなもの というものがあります。コンピュータが処理するに当たって、当然処理途中の数字を記憶したりしておく必要がでてきます。人間では、例えば2+3*5という計算をするならば、3*5の結果15を記憶してから2+15という処理をするわけです。この処理途中の数字を記録するために変数は確保されます。 >数字をいれる箱のようなもの という説明からすればわかりやすいですが、当然箱は用意してやらなければなりません。ない箱に数字など入れることはできませんから。そのためにプログラムではその用意にあたる「&bold(){宣言}」が必要になります。この形は「&bold(){データ型 変数名;}」というものになります。データ型とはその変数が何を保存するものか、というものです。例えば「int」であれば整数ですし、「double」であれば実数になります。他のデータ方については[[データ型>C言語講座-データ型]]のページを参照してください。 **関数 xが変数ならf(x)がまさに関数にあたるわけですが、まずは関数、という言葉についてみていきましょう。かつて東西の数学の差はこの「関数の概念の有無」にあるともいわれていますが(和算は微積の直前といえるところまで発展していたが、関数の概念がなかった)、この関数という言葉はもともと英語でfunctionといいます。これが中国に入ったときに「函数:ハンシュー」という言葉に訳され、この言葉をそのまま日本でも使いました。しかし、戦後教科書に採用するに当たり、函という漢字がなかったために関という漢字が当てられ、現代に至ります。 このfunctionという言葉ですが、辞書を引くと >1 (人間・物・制度などに固有の)機能, 作用, 働き, 効用;職務, 役割, 役目 という訳がやはり最初に出てきます。つまり、functionは「機能」という意味を持つわけです。 この概念はCにおける関数には特に顕著であります。つまり、Cの関数とは「&bold(){機能のひとまとまり}」を示すことになります。同じような機能が複数出てくるときに、そのまとまりを一つにわけて外部においてしまえばプログラムは簡潔になります。特によく出てくるものであれば、C言語が固有にもったり、あるいは自分で作ったものなら関数だけ外部ファイルに分けてしまうこともできるわけです。 functionですが、これは特に二つの概念の理解が必要です。それは「&bold(){引数}(ひきすう)」と「&bold(){返り値}(戻り値)」です。 引数とは、関数に渡す値のことです。たとえば、a+bをさせる関数をつくれば、aとbの値を与えてやらなければなりません。 返り値とは、関数が呼び出し元に返す値です。たとえば、上の関数であれば、a+bの計算結果になります。これが返されなければ関数を呼び出した意味が有りません。 なお、これらは必要がない場合もあります。例えば引数がいらないものとして「現在時刻を知る関数」のようなもの、あるいは返り値がいらない例として「画面に表示する命令」があげられます(Cに標準でついているこれらの機能を持つ関数は引数・返り値を持つものも多いですが)。 関数を定義するときは、「&bold(){返り値の型 関数名(引数,引数…){}}」という形で行います。例えばプログラム2の >double waru(int a) なります。その後、{}で囲って関数の機能を記述します。その際、返り値が必要な関数であれば「&bold(){return 返り値;}」 を最後に書くことで実装できます。 なお、int main(){}という部分もやはり関数です。これをmain関数と言って、プログラムはここから始まります。ところで、このmain関数の後に関数を定義するとき、一見main関数が実行された時点では関数がないように見えるため、エラーが返されることがあります。そのため、main関数の前に&bold(){プロトタイプ宣言}を行う必要があります。これはmain関数の前に「&bold(){返り値の型 関数名(引数の型,引数の型…)}」だけを記述するものです。