はじめに,技術的なことを話します。Cのプログラミングは,次のような 順序で行います。
やること | 使用するツール | 具体的にやること |
---|---|---|
1. 問題の提示 | ||
2. 問題の解析 | your blain | 頭をしぼろう |
3. プログラムを書く | エディタ (mule) | いつもどおりmuleを立ち上げ, 例えばp.7のようなプログラムを書く |
4. プログラムをセーブする | mule でC-x C-s | 例えばファイル名"hello.c"でセーブ かならず,.c の拡張子を付ける |
5. コンパイル | コンパイラ (gcc) | gcc hello.c[return]で コンパイルする。 |
6. 実行 | UNIX上 | ./a.out [return]でプログラムが走る。 |
こでコンパイルとは,C言語(人間が分かる言語)のファイルを
コンピュータの言語に翻訳することです。C言語のファイルにエラーが
なければ,a.out (実行形式ファイル)が生成され,すぐ実行できます。
エラーがあれば,メッセージが出てコンパイルが止まります。
エラーが出てもファイルもワークステーションも壊れません。あわてずに,
エディタ (mule)でプログラムを修正し,再度コンパイルをしましょう。
ちなみに,この方法でできる実行形式ファイルの名前はすべてa.out です。 しかし,例えば上のプログラムの実行形式ファイルは, "hello" という 名前にしておいて, hello[return] でプログラムが走るようにしたほうが より良いでしょう。これを『オブジェクトを作成する』といいます。 オブジェクトを作成する場合は,-o オプションを用いて,
エラー無くコンパイルができても,それで「プログラムが完成」では
ありません。まだまだ,プログラムの中に『バグ』(プログラムのミス)が
あるかも知れません。『バグ』を取る作業のことを「デバッグ」といいます。
デバックの方法には,
|
Cは関数{文と変数}と変数からなります。『文』とは,行なうべき
制御の過程(条件判断など)を指示するもの,『変数』は計算で使われる値を
格納するものです。一般にこれらが集まって,関数を形作ります。Cでいう
関数とは,普通の意味での関数の拡張です。
普通の関数は例えば,
Hello world を印字する |
定版のプログラムです。その注意点は,以下のとおりです。
もう少し難しい問題をやりましょう。こんどは,
摂氏=5/9(華氏-32)の公式を使って,温度を華氏から摂氏に 変換する |
という問題です。ここではループ(繰り返し)を使用します。
p.11のプログラムの説明です。
#標準入出力のヘッダファイルを読み込む /*コメント(プログラムの内容)/* main() ←パラメータのないmain関数 { 変数を宣言する 初期値を設定する while (式){ ←後述 文; } } |
使用する変数については,必ず『宣言』を行います。これは『それぞれの 変数について,コンピューターのメモリ領域をどれだけ使用するか』 ということを,コンピュータに対して宣言することです。宣言には, つぎのようなものがあります。
int | 整数型 | (JAISTでは)4バイト | 整数や文字の変数 |
float | 浮動小数点型(単精度) | 4バイト | いわゆる実数の変数 |
double | 浮動小数点型(倍精度) | 8バイト | 実数で精度の必要な変数 |
char | 文字型 | 1バイト | 文字の変数 |
関数内部で使う変数は,必ず関数の入口で初期値を設定します。
ここでは,ループにはwhile文を使っています。while文は,()で
囲んだ式が「真」であれば『文』を実行し,また式に戻ります。式が
真である限りループが続きます。式が「偽」になるとループから
抜け出します。
また,プログラムはどこで行変えなどをしても動きます。が,論
理構成が分かりやすいように,一定のやり方で字下げや行替えをします。
ちなみに'='は「代入」という意味です。右の値を左の変数に代入せよ, という意味です。等式ではありません。等式(xとyが等しい)は x == y と書きます。同様に,
書式付出力は,桁数をそろえて出力する方法です。例えば関数printf() を用いて,
ちなみに,printf()はCの関数ではありません。Cには入力も出力も ないです。入出力のないプログラムというのは考えにくいですが……。 printf()は"stdio.h"のライブラリに含まれている関数です。そのため, いつもプログラムの最初で,標準入出力のヘッダファイルを #inclide<stdio.h>で読み込む必要があります。 |
float(単精度浮動小数点型)版のプログラムは,ここでは説明しません。 見ておいてください。大きな違いは,
for文もループの一つです。良く使用される書式は,
制御に関する定数は,文中(特にループの中)に入れないように
しましょう。記号定数にして,プログラムの頭に置くべきです。
記号定数は一般には大文字で書き,定数であることを分かりやすく
しましょう。また文の後に;がついていません。これは実行文でないことを
示しています。#define は,あくまでも「定義」であって「代入」では
ないので,= は付きません。間違えないように。