C言語講座 第1回

C言語プログラムの基本構造

C言語のプログラムを作成するためには、C言語特有の基本構造をどうしても最初に覚えてもらう必要があります。それを、定番の“Hello, world”をもじったプログラムで説明していきましょう。

まず最初は、実行すると“Nagahama Taro”と表示するプログラムを作ることとします。以下のプログラムをエディタを使って入力してください。なお、左端の数字は行番号なので、それ以外のところを入力しましょう。

#include <stdio.h>

main()
{
   printf("Nagahama Taro\n");
}

入力できたら、「nagahama.c」という名前でファイルに保存しましょう。ここで、ソースプログラムのファイル名には、必ず“.c”という拡張子をつけることが、C言語ソースプログラムの決まり事です。これは必ず守りましょう。

では、中身を見ていきましょう。1行目は後で説明します。

2行目は空白行になっています。これは、プログラムを見やすくするためのものです。C言語は、Pythonとは違って、基本的には空白を自由にいれても大丈夫な言語なので、見やすいプログラムを作成するため、空白はどんどん活用しましょう。

3行目、4行目、6行目は一つのセットです。このセットで、“main()”という名前の「関数」を定義しています。3行目は関数の名前、4行目は関数の始まりの中括弧、6行目は関数の終わりの中括弧です。C言語における関数は「特定の内容を実行する処理のかたまり」と解釈できます(数学にでてくる関数のように入出力が必須という訳ではありません)。また、関数の名前の最後には必ず丸括弧がつきます。C言語における関数の特徴については、おいおい見ていきましょう。少し脇道にそれましたが、C言語の基本構造として、ソースプログラムのどこかに必ず“main()”関数を作ることが挙げられます。これは、C言語がmain()関数を一番最初に実行するように約束されているためです。

5行目は、1行だけですがmain()関数で実行される処理そのものになります。この行には、“Nagahama Taro”を改行付きで画面に表示させるための“printf()”関数が使われています。printf()関数の機能は、丸括弧の中にある””で囲まれた文字列を出力することです。C言語では、関数に何か値を渡すときは、丸括弧の中に書きます。これを関数の“引数”と呼びます。なお、先にC言語は基本的に空白を無視すると言いましたが、printf()関数の引数となっている””で囲まれた部分については例外的に空白が意味を持ってきます。””の中に入れたスペースはそのまま出力されます。また、””で囲まれた部分でリターンキーを押して改行をしてしまうと、コンパイルできません。改行を表示するには“\n”を使いましょう。また、Pythonとは異なり、C言語では命令文の最後に“;”をおきます。

さて、5行目でいきなり関数が出てきました(実際はmain()も関数ですが)。このようにC言語では、文字を画面に出力するだけでも関数が使われます。つまり、C言語自体には、画面に出力するための直接的な命令がないので、それを実現するために実装されている基本的な命令を組み合わせた関数(printf())が作られているということです。では、この関数はどこに記述されているのでしょうか?少なくとも入力したソースプログラムには見当たりません。実はコンパイルの作業の中に、printf()関数が記述された実行形式を作成したプログラムの実行形式にくっつける作業が含まれています。また、コンパイルを行うプログラム(コンパイラ)は、1行目にある文を見て、“stdio.h”というファイルを見に行きます。このファイルには、printf()を含めた標準入出力関数とよばれる関数の使い方などが書かれており、それに従ってソースプログラムに書かれている関数が正しい使われ方をしているかなどをチェックします。つまり、1行目はソースプログラムで使われている関数に対応させて正しく記述する必要があります。これもC言語の基本構造の1つです。この点はやや高度な内容なので今のところは記憶にとどめる程度でいいでしょう。今後多くの関数を使うにつれて、“#include”文が増えてきます。どの関数を使う時にどの“#include”文が必要かについてもその時に説明します。

プログラムの説明は一通り終了です。後はこれをコンパイルして実行してみます。コンパイルは、コマンドラインで以下のように入力します。なお、左端の$はコマンドラインを示すプロンプトなので、入力する必要はありません(今後も同じ様にに記述します)。

$ cc -o nagahama nagahama.c

“cc”が前述のコンパイラになります。次の“-o nagahama”がひと塊で、「実行形式をnagahamaという名前にしなさい」と言う意味になります。最後の“nagahama.c”がもちろんソースプログラムを保存したファイル名になります。もしコンパイル途中で何かエラーが出た場合は、ソースプログラムをもう一度確認してみましょう。無事コンパイルが終了し、nagahamaという実行形式ができたら、

$ ./nagahama

と入力すれば

Nagahama Taro

と表示されるはずです。

練習

  1. 自分の名前のローマ字表記を出力するプログラムを作成しなさい。
  2. 自分の名前のローマ字表記をアミノ酸の一文字表記と考えて、それに対応する三文字表記を表示するプログラムを作成しなさい。例えば、名前が“NAGAHAMA TARO”であれば、下記のように表示すること。
    Asn Ala Gly Ala His Ala Met Ala Thr Ala Arg Xaa
    

    なお、B : Asx(Asp or Asn)、U : Sec (Selenocysteine)、X : Xaa(未知アミノ酸)、Z : Glx(Glu or Gln)である。残念ながらJとOには対応する三文字表記がないので、Xaaとする。
    3. 自分の名前の下にアミノ酸の三文字表記を対応させて表示するプログラムを作成しなさい。出力例は以下の通り。

     N   A   G   A   H   A   M   A   T   A   R   O
    Asn Ala Gly Ala His Ala Met Ala Thr Ala Arg Xaa