プロンプトが出ているところで「↑」キーを何度か押すと、 以前に打ち込んだコマンドが出てくる。 行きすぎたら「↓」で戻れる。 それを編集してから実行することもできる。
「emacs hello.c &」としてみよ。 起動された emacs の一番下に 「Loading cc-mode...done」と出たであろう。 そのうえの灰色の帯状の部分には hello.c というファイル名のほかに「C Abbrev」と書かれている。 いったん emacs を終了する。
次に 「cp -ip ~cf5326/.emacs .」を一度だけ実行する。
次に「emacs hello.c &」として、 「Loading cc-mode...done」が出ず、 「C Abbrev」の代わりに「Fundamental」と書かれていれば成功である。
注: これは、ユーザ cf5326 の設定ファイル .emacs を諸君のところへコピーしたことにあたる。 ほかにも変わった点がいくつかあるのだが、何だろうか?
デスクトップの左上にある「... のホーム」 をダブルクリックすると File Manager が起動する。 この中でファイルのコピー、改名、削除などができる。 それぞれのやりかたは順に説明してゆく。
== hello.c ===================================================================== #include <stdio.h> main() { printf("hello, world\n"); } ================================================================================
「ソースファイル」「実行ファイル」「コンパイル」「コンパイラ」 「字下げ」「インデント」については口頭で説明する。 バックスラッシュ「\」と円マーク「¥」は、 半角文字では同じものと思ってよい。
K&R2 の §1.1 を合わせて読むこと。
注意: 教科書では cc とあるがここのシステムでは gcc である。 実行させる際、a.out の前の ./ に注意。 a.out から(たとえば)hello という名前に改名した場合は、 「./hello」として実行する。 (改名は、File Manager 内で「選択」 (=そのファイルのアイコンをクリックしてアイコンの色を変えること) し、それから「編集」「名前変更」。)
注意: インデントは Tab キーを押してタブを挿入して行なうのが最も簡単である。 ホームページではスペース四つがはいっているので、 ホームページからコピー&ペーストした場合はスペース四つになるが、 コンパイル結果には影響しないので気にしなくてよい。
練習問題(第一部)
printf("..."); printf("...");のようになる。)
練習問題(第二部)
== tasizan.c =============================================== /* たし算 1990-04-28, written by Iwase */ #include <stdio.h> main() { int a, b, sum; /* 変数の宣言 */ a = 2; /* 代入 */ b = 3; sum = a + b; printf("%d たす %d は %d です.\n", a, b, sum); } ============================================================
練習: 0 で割り算をするとどうなるか、試しなさい。 具体的には、次をやってみなさい。
注意:「core を出力しました」と言われたら、 core.????(「?」は数字)という名前のファイルができている。 このファイルは場所ふさぎなだけなので、 なるべく早く削除すること。 (削除は、File Manager 内で「選択」してから「編集」「ゴミ箱へ移動」。 これでは単にゴミ箱に移動しただけなので、 デスクトップの「ゴミ箱」をダブルクリックして開き、 本当に削除してよいことを確認してから「ファイル」「ゴミ箱を空にする」 とすれば本当に削除される。)
============================================================ #include <stdio.h> main() { int a, b; printf("数を入れてください.\n"); scanf("%d", &a); /* 数の入力 */ printf("もう一つ数を入れてください.\n"); scanf("%d", &b); printf("%d たす %d は %d です.\n", a, b, a+b); } ============================================================
「数の入力」の行。 ここでプログラムは止まってキーボードからの入力を待つ。 変数名 a の前に & がついて &a となっていることに注意。 なぜ & が必要かは、いまは説明できない。
scanf() は K&R2 §7.4 でくわしく論じられているが、 いま読んでもむずかしいだろう。
============================================================ #include <stdio.h> main() { double a, b; printf("数を入力してください.\n"); scanf("%lf", &a); printf("もう一つ数を入力してください.\n"); scanf("%lf", &b); if (b == 0) { /* if による分岐 */ printf("0 では割れません.\n"); } else { printf("%f 割る %f は %f です.\n", a, b, a/b); } } ============================================================
double 型は浮動小数点数(i.e. 小数点以下がある数) を格納する型のうちの代表的なものである。 int と double について、 入出力のしかたをまとめておく。
入力 | 出力 | |
---|---|---|
int | scanf("%d", &a); | printf("%d", a); |
double | scanf("%lf", &a); | printf("%f", a); |
「if による分岐」の行からの5行。
if (条件1) { 文1 } else { 文2 }は次のように動作する。 「条件1をまずチェック。 それが真ならば文1を実行し、文2は飛ばして先へ進む。 条件1が偽ならば文1は飛ばし、文2を実行して先へ進む」。
if (条件1) { 文1 } else if (条件2) { 文2 } else if (条件3) { 文3 } else { 文4 }は次のように動作する。 「条件1が真ならば文1だけを実行する。 条件1が偽で条件2が真なら文2だけを実行する。 条件1も条件2も偽で条件3が真ならば文3だけを実行する。 条件1も条件2も条件3も偽なら文4だけを実行する」。 文のうち一つだけが実行されることに注意。
(この項、続く)