プログラミング基礎 第07時限 実習資料

目標


内容

  1. 概要
  2. 注意事項
  3. 準備
  4. プログラミングの手順
  5. コーディング

概要

これまでの実習では,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言語によるプログラミングは通常以下のような手順で行なわれる. 下記を熟読し,問題に答えなさい.

1. コーディング
例: begin.c, example01.c, practice02.c
$ emacs ex0701.c &
$
 問題1. 以下のソースコードをファイル名 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 を返す関数である,ということを示している.

確認事項

  1. ソースの先頭に #include <stdio.h> と記述する.
  2. コマンドの末尾にセミコロン(;)をつける.
  3. main 関数を作る.
2. コンパイル
使い方: cc ソースファイル名

例  : cc ex0701.c

意味 : ソースファイル ex0701.c をコンパイルし a.out という実行ファイルを作成する.
練習. 先ほど作成したソースファイル ex0701.c をコンパイルし,a.out が作成されることを確認しなさい.
3. デバッグ

参考 -Wall (Warning all)オプションを使用すると,コンパイル時に不具合を起こしそうな記述に対し警告(warning)メッセージが出力される.
      cc -Wall ソースファイル名
      
今日の範囲では必要ないと思われるが,プログラムが意図どおりに動いてくれないときには役に立つかもしれない.

4. プログラムの実行
$ ./a.out
<< 実行結果の表示等 >>
$
練習. 先ほど作成したソースファイル ex0701.c コンパイルし,エラーが出ないことを確認したら a.out を実行しなさい.

これらの手順は上から順に行うだけではない. 1 から 4 を何度も繰り返すことでデバッグや改善を行ないながら完成させていくのが 一般的なプログラミングスタイルである.


コーディング

コーディングの目的は正しいプログラムファイルを作成することである. この目的を素早く達成するためには, 守っておくべきコーディングの方法がある.

ウィンドウを切り替えて作業しよう

コーディングとコンパイルや実行,デバッグをウインドウの切り替えだけで効率的に行うために, emacs と GNOME端末 は常に使える状態になっている方がよい. emacs は,アイコンを(シングル)クリック,またはコマンドラインから & をつけて実行して起動する習慣をつけよう.

コーディング(プログラム作成)手順のまとめ

通常,次の手順でプログラムを作成していく.

  1. GNOME端末 を起動
  2. プログラミング実習用ディレクトリにカレントディレクトリを変更
  3. emacs ソースファイル名 & と入力
    ( コマンド末尾に & をつけることで emacs を終了させずに GNOME端末 を 継続して 使用できる)
  4. emacs でソースファイル作成,保存 (C-x C-s)
    ここで emacs を終了させないこと!
  5. GNOME端末 で cc ソースファイル名 と入力
  6. エラーメッセージが表示される場合 4, 5 を繰り返す
  7. GNOME端末 で ./a.outと入力し,プログラムを実行
  8. 実行結果が正しくない場合 4 に戻る
  9. プログラム完成

コメント

ソースコード内において /* と */ で囲まれた部分は, コンパイル時に無視されるコメントとして認識される. コメントはソースコードを読みやすくするために記述する.


 問題2. 以下のコメント付きのソースコードをファイル名 ex0702.c として作成し,コンパイル,実行しなさい  
    

(以降の問題において,コメントの記述は任意である)
 問題3. 以下のソースコードをファイル名 ex0703.c として作成,コンパイル,実行しなさい  
    

printf 関数の引数部分(かっこの中)のダブルコーテーション( " )で囲まれた部分が画面表示される. その中に記述された %d は,画面表示のその部分に10進数の整数を表示する書式文字である. printf 関数の引数部分における2番目の引数(カンマ以降)の値が表示される.円記号(バックスラッシュ)n の位置で改行が行われる.

 問題4. 以下のソースコードを ex0704.c として作成,コンパイル,実行しなさい  
    

変数を用いるときは「変数の宣言」が必要である.変数を使う場合は,変数の使用前に,使用する変数の「データ型」を明示して宣言する. 上の例で int は,整数のデータ型宣言である.