このサイトは更新終了し, こちらに移行しています。

C言語入門: C言語プログラミングの体験

筑波大学農林工学系 奈佐原(西田)顕郎

ホーム


C言語プログラミングの体験

まず、C言語プログラミングを体験してみよう。コンソールを立ち上げ、以下のプログラム(ソースコード)を、viエディターで入力・編集し、add.cというファイル名で保存せよ.

注: 既にCを熟知しているエキスパートの人以外は,必ず,以下のプログラムリストはひとつづつ手で入力すること.コピー・ペースト(コピペ)はダメ.コピペでは学習効果が上がりません.ちなみに、以下のソースコードをブラウザでコピーしてどこかに貼り付けても、コンパイルするとエラーが出ることがあります。それは、皆さんが横着をしないようにするために埋め込まれた、秘密の妨害暗号のためです。

/* add.c */
/* 2008/07/15 K. Nasahara */         
# include <stdio.h>

main()
{ 
int x, y, z;
printf("What is x? ");
scanf("%d", &x);
printf("What is y? ");
scanf("%d", &y);
z=x+y; 
printf("x+y= %d\n", z);
}
注: システムによっては、下から2行目のprintfの文で\という記号が、「日本円」(Yに横棒2つ)として表示されたり、バックスラッシュ(左上から右下に延びる直線)として表示されるが、これらは計算機の中では同じ文字であり、どちらでもよい。いずれもキーボードの右上(back spaceのとなり)にあるキーを(shiftを押さずに)押せばよい。

これは、2つの整数をユーザーが入力すると、その和を計算して表示するプログラムである。C言語のソースコードは、.cという拡張子を持ったファイル名で作る。

入力が終ったら、次のコマンドでコンパイルしよう:

$ gcc add.c -o add
gccは、コンパイラ(ソースコードを、計算機が実行可能なプログラム、つまりバイナリコードに変換する機能)のコマンドである。-o以下に、生成したいバイナリコードのファイル名を指定する。ここではaddという名前にしておく。

ソースコードにミスがあると、上記のgccコマンドを実行するとエラーが出たりする。その場合は、エラーメッセージに現れる行番号を手がかりに、ソースコードを修正し、再度、上記のコマンドでコンパイルする(ヒストリー機能を使えば楽)。ミスがなくなると、メッセージなしにコンパイルが終了する。

では、バイナリーコードを実行してみよう:

$ ./add
すると、
What is x?
と聞かれるので、キーボードから、適当な整数(たとえば2)を入れてリターンキーを押す。するとまた
What is y?
と聞かれるので、同様に適当な数を入れる(たとえば8)。すると、
x+y= 10
のように、足し算の結果が表示される。

もしうまく行かなかったら!!? ... 意に反して、プログラムがうまく走らずに、止まらなくなってしまった場合は、慌てないで、CTRLキー(キーボードの左下)を押しながら、Cのキーを押してみよう。プログラムの実行が途中で強制的に中断されて、プロンプトに戻ることができる。


C言語のソースコードの基本

いま体験したプログラムを、行番号と解説付きで再掲すると以下のようになる:

  1. /* add.c */ // コメント
  2. /* 2008/07/15 K. Nasahara */ // コメント
  3. # include <stdio.h> // ライブラリのヘッダーファイルの読み込み
  4. // 空白行。あってもなくても良い。
  5. main() // プログラムの本体のはじまり
  6. {   // 14行目の}と対になって、プログラムの範囲を囲む。
  7. int x, y, z; // 変数x, y, zの宣言。
  8. printf("What is x? "); // メッセージをコンソールに表示。
  9. scanf("%d", &x); // ユーザーから変数xに値を入れてもらう。
  10. printf("What is y? "); // メッセージをコンソールに表示。
  11. scanf("%d", &y); // ユーザーから変数yに値を入れてもらう。
  12. z=x+y;   // 足し算を計算し、その結果を変数zに格納する。
  13. printf("x+y= %d\n", z); // メッセージといっしょに、変数zをコンソールに表示。
  14. } // プログラムの終り。
1〜2行目: /*と*/で囲まれた部分や、//で始まる部分は、人間のためのコメント。ここは計算機は無視する。ソースコードの頭には、作成日と作製者名を入れる習慣をつけよう。以後の課題では、ここに相当する箇所を、今日の日付と諸君の名前に置き換えること。

3行目: stdio.hのように、.hを拡張子に持つファイルを「ヘッダーファイル」と呼ぶ。ヘッダーファイルには、システムがあらかじめ用意してくれている関数などの定義が入っている。includeは、「このプログラムではそれらを使いますよ」という宣言。慣れないうちは、ここは「おまじない」だと思うこと。なお、stdio.hは標準入出力(standard input-output)に関する機能をまとめている。(初心者は、よくこの部分をstudio.hと間違って書いてしまうが、「スタジオ」じゃないよ!)

4行目: 空白行。空白の行が適当にソースコードに入っていても問題ない。

5行目: mainというのは、プログラムの本体部分の関数。

6,14行目: 関数は必ず"{"で始まって、"}"で終る。

7-13行目: プログラムの核心部。命令の最後は必らずセミコロン(;)で終わるのが規則。

7行目: x, y, zという3つの変数を宣言する。変数は宣言しないと使えない。intは(4バイトの)整数型の変数という意味。変数には整数型変数以外にもいろんなタイプがある。

8, 10行目: コンソールにメッセージを表示する。

9, 11行目: キーボードから値を読み込む。&は変数の位置(アドレス;住所)を指定する記号。これをつけないと、きちんと変数xやyに値が入らない。

12行目: 足し算の結果を変数zに代入する。C言語ではイコール(=)記号は「等しい」という意味よりもむしろ「代入する」という機能を表す。

13行目: メッセージといっしょに、変数zをコンソールに表示する。%dは、変数の中身を表示するときの書式を表す。ここでは「10進法(decimal)整数として表せ」という意味。9行目や11行目と違って、表示のときは変数に&は不要。\nは改行の記号。

課題1. 上のプログラムで、13行目の\nを削除してコンパイル・実行せよ。何が起きるか?

課題2. 上のプログラムを改造し、2つの整数のかけ算を表示するプログラムを作れ。

課題3. 上のプログラムを改造し、3つの整数の足し算を表示するプログラムを作れ。


プログラミング習得の秘訣

プログラミングの上達の秘訣は、「戯れ」である。何かを習ったら、それを利用したプログラムを戯れに作ってみる。わからなくてもいろいろ改造して試す。そういうことを繰り返し、体験的にプログラムのコツをつかんでいくこと。

C言語には非常に多くの文法規則や機能があるが、それらを全て習得する必要はない。むしろ、少数の機能やコマンドを駆使して、自分にとって必要なプログラムを書けるようになることが大切である。ちょうど、英語の習得には多くの文法や単語をマスターするよりも、少数の単語を駆使して実践的にコミュニケーションすることが大切なのと同じである。


(ブラウザの「戻る」ボタンで戻ってください)