KID's World
 

おしながき
トップページ
プログラミング
研究
いんすぴ
色日記
ソフトウェア
KID's Worldの歴史
リンク
小出俊夫について


C言語って?

C言語のちょ〜基本的なことをここで頭に叩き込もう

 

プログラミング言語上達の法則

 ようこそいらっしゃいました。納得行くまで読み返して、実際にプログラムを作って、動くことを試してみてください。実際にやることで力がつきます。もし質問があればメールでしてください。できるだけこのホームページ上で解答をし、また分かりやすいように文章を変えるなどの努力をします。どうかご協力をお願いします。

 ところで僕は、プログラミング言語を習得できるかできないかは、極端にいえば以下のいくつかの条件に当てはまるか、そうではないかだと考えています。

  1. パソコンがすき
  2. 自分で物を作る喜びを知っている
  3. 手に入れた電化製品は、いじり倒さずにはいられない
  4. 取説に書いていないことをやってみたくなる
  5. 好奇心は旺盛だ

 まずこれに当てはまる人なら、どんどん上達することは間違いありません(^_^)。好きこそ物の上手なれです。まぁこれのいずれに当てはまらなくとも、一番重要なのはC言語によって自分で何かを作る楽しみを見出すことができるということです。これができるようになれば、あっという間にプロに引け目をとらないプログラマになる事でしょう。これは間違いありません!

 

ソフトウェア作成の手順

 これからソフトウェアを作るにあたって、基本的にやらなくてはならないことを、おおざっぱに書いてみます。以下の説明で出てくる用語は非常に重要なものばかり(プログラマの間では基本中の基本となっている言葉です)ですので、しっかり頭の中に叩き込んでおきましょう。

■ プログラム言語

 ソフトウェアを作るには、まず人間がコンピュータにどのような手順で動いてもらいたいかを記述する必要があります。広い意味で言えば、それをプログラミングといいます。そして、これから学ぶ「C言語」はそのプログラミングに使う言語の一種です。プログラム言語の多くは、人間が分かりやすいように英単語がベースになっています。このような人間が見て分かる状態のものをソースコードと言います。

■ ソースコード

 そのソースコードというものは、テキストファイルとして保存します。テキストファイルとは、簡単に言えば純粋に文字だけからなるファイルの事です。テキストファイルとして保存するには、エディタを使います。UNIXなら、VIエディタやEmacs等が有名で、Windowsなら標準で付いてくるメモ帳やWordPadなどがそれです。テキストファイルの名前は、C言語の場合は「lesson1.c」のように、最後に「.c」を付けるのが一般的です。

■ コンパイル

 しかし、人間に分かる英単語を基本に書かれたプログラムを見せたって、コンピュータには何のことだかさっぱり分かりません。それをコンピュータが分かる機械語の形式に変換する作業---コンパイルをしなくてはなりません。つまりコンパイルとは、人間の使う言葉から、コンピュータが使う言葉へ翻訳する作業といえます。この翻訳作業をする人(いわゆるコンピュータ上で動くプログラムですが)のことを、コンパイラと言います。

 コンパイルの具体的な方法は、コンパイラによって違います。なのでここではコンパイルの仕方は説明しません。各コンパイラの説明書を読んでください。PC-98 や IBM PC/AT(DOS/Vといわれるやつです)をお使いで、もしまだコンパイラを持っていないなら、とりあえずしばらくの間は、MS-DOS上で使うフリーのLSI C-86 v3.30c 試食版をお使いください。このコンパイラを使ったコンパイル方法はこちらで説明をしています。UNIXをお使いの方は、「cc」というコンパイラがありますので、それをお使いください。ccについては、簡単にですが説明を書いておきました

■ つまり。

 長々と文が続きましたが、つまり簡単に言えば「テキストファイルで保存したソースコードを、コンパイラでコンパイルし、ソフトウェアを作る」という事です。といわれても、多分よく分からないでしょう。でもこればっかりはいろいろなスタイルがあるので、詳しく説明する事ができません。このC言語入門ページでは、C言語を理解するのが目的ですので、自分の環境ではどういう方法で作るのかは、詳しそうな人に聞くか、自分で調べてみてください。

 

プログラムは何からできているのか?

 これは誰もが疑問に思うことでしょう。コンピュータは、「命令」を受けて何かを「実行」します。つまりプログラムは「命令」のかたまりです。よってプログラマは、ソースコードに何かしらの「命令」をたくさん書いていくわけです。

 しかし命令と言っても、「JPEGファイルを開いて画面に表示しろ」と英語で書いたりするわけではありません。少し考えを変えなくてはならないのはこの部分です。JPEGファイルとは何なのか? 画像を表示するとはどういうことなのか? コンピュータはそんなことはまったく知りません。ですから、人間がいちいち、「このファイルを読みこんで、何バイト目から何バイト目までをこのように計算して、結果を画面のこのドットにこの色で表示するんだよ」という(まぁJPEGファイルを表示するというのはこんな簡単なことではないのですが)ことを一つ一つの「命令」としてソースコードとしてあらわし、実行させなくてはならないのです。

 でも、「なーんだ、そんなことは俺にはできない」などとは思わないでください。実はこのような、実現するのは面倒くさいが良く使いそうな機能というのは、すでに誰かが作っていて、簡単に使えるようになっているものです。C言語自体にも、画面に文字を表示する機能や、ファイルとアクセスする機能などをライブラリとしてすでに用意しています。それを呼び出すだけでハードウェアのことを知らなくても自由に操ることができるのです。もちろん、世の中にはJPEGファイルを簡単に扱えるライブラリなども出回っています。

 ただしこのページでは、JPEGのような付加的なライブラリを使うプログラミングを説明しても、一般的な説明にはならないし、基礎が分からないと、そのようなライブラリの使い方も理解できないので、C言語に必ずついてくるライブラリを使用したプログラミングを説明して、理解をしていきたいとおもいます。まずは、文字を表示するところからはじめましょう。

 

初歩的なプログラム

 さて、下のコードを見て見ましょう。(コードの先頭に書かれている数字は書きません。ここでは説明の便宜上、追加してあるだけです)

1 #include <stdio.h>
2
3 main()
4 {
5   printf("Hello!\n");
6 }

 実は、たったこれだけのコードで、画面に「Hello!」と表示するプログラムが作れます。このコードの詳しいことは、これから説明していくので、よーく理解をしながら進んでください。

余談:

 もうほとんどのコンピュータがGUIな世の中にあって、こんなCUIなプログラムはどうかと思いますが、C言語を理解するためには、やはりこのようなテキストベースのプログラミングからはじめるのが上達の近道だと思います。それに、はたから見れば「なんだかすげー事やってるなぁ、俺には理解できないよ」と、尊敬のまなざしに包みこまれることでしょう。もしGUIなプログラミングからはじめたければ、Windows用のアプリケーションを作ることができるDelphiの解説ページをご覧ください。(^-^;

 

プログラムはどこから実行されるのか?

 これも、誰もが疑問に思うことでしょう。コードの3行目を見てください。ここにはmain( )と打ってあります。一つのプログラムには、必ずこの main が一つあります。じつは、この main こそが、一番初めに実行される部分なのです。(どのプログラム言語でもmainがあるわけではありません。GUIによるオブジェクト指向のプログラミングでは、はじめに実行されるところという概念がない場合がほとんどです。)

 ですが、 main という命令があるわけではありません。 main の実体は、直後の「{」から「}」で囲まれた部分、つまり5行目です。というわけで、このプログラムは、

printf("Hello!\n");

を実行するものだ、ということが分かると思います。

 この形はC言語の基礎中の基礎です。

 何をいきなりでかい文字で、と思うかもしれませんが、これは重要です。C言語では「{」から「}」をブロックと呼び、一つのかたまりとしてみなします。これからいろいろなところでよく使うものなので、この書き方はよく覚えていてください。

 ところで、5行目には

printf("Hello!\n");

とありますが、これは画面に文字を表示する命令だと思ってください。「"」で囲まれた文字、つまり「Hello!\n」が表示される文字になります。ただし、\や%で始まる文字はちょっと特殊で、そのまま表示されずに、ある解釈をされます。たとえばこの例の「\n」は、ここで改行しろという意味になります。

 さっき「命令」といいましたが、C言語では関数と呼ばれています。しかも、main( )も「関数」といいます。この関数の持つ本当の意味は、まだ別の機会に理解するとしましょう。

 

プログラムの流れ

 さて、話を先に進めます。さっきのコードでは、関数を一つしか書いていません。続けて関数を評価(実行)させるにはどうしたらいいのでしょうか。この答えは明快です。

 
#include <stdio.h>

main()
{
    printf("Hello!\n");
    printf("My name is Toshio Koide.\n");
}

 このように2行つづけて書いてしまえばいいのです。まず5行目の、「printf("Hello!\n");」が実行され、次に「printf("My name is Toshio Koide.\n");」が実行されます。つまり、命令は上から順に実行されます。これはほとんどのプログラミング言語で鉄則となっている事です。

 

#include <stdio.h>?

 そして、最初の行の「#include <stdio.h>」。コンパイル作業は、大まかに見ると「プリプロセッサ」と「コンパイラ」で行われていて、「プリプロセッサ」は、この「#include」という文字を見つけると、指定されたファイル(つまりここでは"stdio.h"というファイル)をこの位置に読んで追加します。これをインクルードといいます。

 stdio.hという名前のファイルは、コンパイラをインストールしたときに、どこかに作られたはずです。これには標準的な入出力に関する様々な事が書いてあり、printf関数もこのファイルの中で定義されています。なので、printf関数を使うときは、stdio.hをインクルードしなくてはなりません。一度stdio.hの中身をエディタなどで見て見ると良いでしょう。

 この"stdio"という名前は、Standard Input/Outputを省略したものです。間違ってもstudio.hなどとは書かないでくださいよ。

 ところで、文末についた「;」マークは気になりませんでしたか? このマークは文の終わりに必ずつけるものです。もしこのマークが無いと、どこが区切りか分からないのでコンパイルができません。

 

パソコンにちょっとした計算をさせてみよう

 文字を表示させるには、printf関数を使えばいいことは分かりました。でもパソコンを相手にしているんだから、少し計算をさせてみたいですよね。ではさせてみましょう。

 
#include <stdio.h>

main()
{
    printf("計算結果 = %d\n", 1+2*3-4/2);
}

 前に、\や%で始まる文字はある解釈をされる、と言いましたね。このコードで新しく出てきた「%d」は、ここに整数値を表示しろという意味です。その整数値はどこで指定するかというと、表示する文字のあとに「,」コンマを書いて、そのあとに指定します。その時に普通に整数を指定してもいいのですが、ここでは次の計算をさせています。

1+2*3-4/2

 これは普通の数式のように考えてかまいません。*は×、/は÷に対応しています。つまり、「1+2×3−4÷2」です。もちろん掛け算や割り算は先に計算するので、画面には「計算結果 = 5」と表示されます。

 整数では無く、実数を表示するには「%f」を使います。ただし、注意したいのは実数を扱うとき、数値は「2.0」のように小数点をつけなくてはなりません。つけないと整数として扱ってしまいます。そのため実数を対象にする「%f」では表示できません(ただしコンパイルはできます)。

 
#include <stdio.h>

main()
{
    printf("計算結果 = %d %f\n", 1+2*3-4/2, 2.0/3.0);
}

 ところで、いきなり%dと%fを同時に使ってしまいましたが、printf関数ではいくつでも、しかも同時に使うこともできます。このように、コンマで区切ってどんどん書いていけばいいのです。

 

 いきなり最初から頭に詰め込むことが多すぎましたが、これはみんな重要な事なので、ちゃんと頭の中に叩き込んでください。一ページ毎に最後に「まとめ」を作ってあるので、これを活用するといいでしょう。

まとめ。

  1. C言語のプログラムでは、main関数が必ず一つ必要。
  2. プログラムを実行するとmain関数、つまり「main( )」の後の「{」と「}」で囲まれた内容が実行される。
  3. printf関数は文字を画面に表示する関数。
  4. #includeは、指定されたファイルをその位置に読み込む。
  5. 「;」は文の終わりに必ず書く。
  6. printf関数で「%d」は整数、「%f」は実数を表示する。
  7. 数値は、小数点をつけると実数、つけないと整数として扱われる。
 

質問

(1997/01/30作成、10/15, 10/29, 11/02, 1999/3/13 改)


PCパーツを買うならここがお勧め!ソフトもあります。液晶ディスプレイがかなり安いと思います。私もここで買いました↑

[目次へ] [次へ]

 著作権は全て小出 俊夫にあります。KID's World © 1996-2003 Toshio Koide.

 対応ブラウザについて