これまでの実習では,Haskell を用いてプログラムを作成した.ターミナル上で ghci を起動して対話的にコマンドを実行,またはファイルに作成された関数をロード( :load, :l ) することにより,式を評価することができた.
これから学ぶ C 言語では,作成したソースプログラムを「コンパイル」という処理により機械語に翻訳しプログラムを実行する.
C 言語は手続き指向のプログラミング言語のひとつである.C 言語の実行時環境では,状態をそれぞれの命令で読み書きすることで計算していく.それに対して Haskell は関数指向のプログラミング言語であり,出力が入力のみから決まる関数の組合せでプログラムを作成し,式を簡約することで計算する.
C 言語でも一般に関数と呼ばれるものを用いる. C 言語の関数は「まとまった処理や手続きの単位」である. この意味の「関数」はプログラムの部品(サブルーチン)を組み合わせてプログラムを作っていく,とい うモダンなプログラミング技術には必須の考え方である.
C 言語では特別な関数「main 関数」を作る.main 関数とは,プログラム実行時に最初に実行される手続きを記述した関数である.C 言語のプログラムでは main 関数を必ず作成する.
実習では,毎回 多くのプログラムを作成する.各回に専用の作業ディレクトリを用意し, そのディレクトリに移動して作業しなさい.
例: ホームディレクトリにある progbasic の下に ディレクトリ c を作成し, さらにその下に 07 という第7回目用のディレクトリを作成する.
$ ls Desktop/ progbasic/ ... $ cd progbasic $ mkdir c $ cd c $ mkdir 07 $ cd 07 $
注意: 下記の問題において, ダウンロードしたファイルは,作業用ディレクトリに移動させてから利用すること.
C言語によるプログラミングは通常以下のような手順で行なわれる. 下記を熟読し,問題に答えなさい.
例: begin.c, example01.c, practice02.c
$ emacs ex0701.c & $
上記のプログラムは C 言語を学ぶときに最初に紹介されることの多い典型的なものである.最初の行の #include <stdio.h> は, その下に出てくる printf 関数を利用するためのライブラリ stdio.h を読み込むという指示である.stdio は STanDard IO と覚えればよい(studio.h と書かないように). printf 関数の機能はあらかじめ stdio.h に用意されているので,わざわざ printf 関数の機能を自分で作成する必要はない,ということである.
int main(void) から 最後の } までが main 関数である.main 関数の中で printf 関数を呼び出していることに注意しよう. main 関数の最後に return 0; があるのは,main 関数は 0 を返す関数である,ということを示している.
使い方: cc ソースファイル名
例 : cc ex0701.c
意味 : ソースファイル ex0701.c をコンパイルし a.out という実行ファイルを作成する.
cc -Wall ソースファイル名
今日の範囲では必要ないと思われるが,プログラムが意図どおりに動いてくれないときには役に立つかもしれない.$ ./a.out << 実行結果の表示等 >> $
これらの手順は上から順に行うだけではない. 1 から 4 を何度も繰り返すことでデバッグや改善を行ないながら完成させていくのが 一般的なプログラミングスタイルである.
コーディングの目的は正しいプログラムファイルを作成することである. この目的を素早く達成するためには, 守っておくべきコーディングの方法がある.
コーディングとコンパイルや実行,デバッグをウインドウの切り替えだけで効率的に行うために, emacs と GNOME端末 は常に使える状態になっている方がよい. emacs は,アイコンを(シングル)クリック,またはコマンドラインから & をつけて実行して起動する習慣をつけよう.
通常,次の手順でプログラムを作成していく.
ソースコード内において /* と */ で囲まれた部分は, コンパイル時に無視されるコメントとして認識される. コメントはソースコードを読みやすくするために記述する.
printf 関数の引数部分(かっこの中)のダブルコーテーション( " )で囲まれた部分が画面表示される. その中に記述された %d は,画面表示のその部分に10進数の整数を表示する書式文字である. printf 関数の引数部分における2番目の引数(カンマ以降)の値が表示される.円記号(バックスラッシュ)n の位置で改行が行われる.
変数を用いるときは「変数の宣言」が必要である.変数を使う場合は,変数の使用前に,使用する変数の「データ型」を明示して宣言する. 上の例で int は,整数のデータ型宣言である.