最も基本的なプログラム

Hello,World

これから、C言語でプログラムを作る方法を学習していきます。その中でも、一番基礎的で、かつ有名なプログラムが、これから紹介する、Hello,Worldと呼ばれるサンプルです。

サンプルプログラム

では実際に、そのプログラムを入力して、試してみましょう。以下のプログラムを入力・実行してみてください。

list1-1:main.c
#include <stdio.h>

void main(){
	printf("HelloWorld.¥n");
}
実行結果
HelloWorld.

実行結果からもわかるとおり、このプログラムを実行すると、"HelloWorld."という文字列が表示されます。このプログラムは、ほとんどのC言語のプログラムの入門書などでいちばん最初に記述されているサンプルプログラムである、Hello,Worldと呼ばれる、簡単な文字列が画面表示されるだけのものです。

プログラムの仕組み

ヘッダファイル

では、一体、このプログラムはどのような仕組みになっているのでしょうか?

1行目に出てくる、#includeという記述は、ヘッダファイルと呼ばれるファイルを読み込むときに用いる宣言です。ここで読み込むファイルは、stdio.hというファイルです。".h"は、C言語のヘッダファイルの拡張子です。ヘッダファイルと何かということは、7日目に説明しますが、基本的にC言語のプログラムはこの宣言から始まるということを抑えておきましょう。

ヘッダファイルの読み込み
#include <stdio.h>

とすることにより、stdio.hと呼ばれるヘッダファイルを読み込んでいます。

関数

3行目のvoid main()の部分ですが、ここはメイン関数の宣言と呼ばれます。C言語は、このメイン関数の中に処理を書くことにより、実行されます。処理の中身は、"{"および"}"で囲まれています。この処理の中には、printfという命令があり、これは、コンソールに文字を出力するものなのです。こういった命令のことを、C言語では、正式に関数(かんすう)と呼びます。関数には、もともとC言語に備わったものと、ユーザーによって後から付け足されるものがあります。printf関数は、もともとC言語に備わっている関数のうちの一つです。

printf()関数は、()内にあるものをコンソール画面に表示すると言う機能があります。特に、文字列を表示する場合は、"(ダブル・クオーテーション)で囲みます。

printf()関数の呼び出し
printf("HelloWorld¥n");

様々な記号

最後に記述されている記号;は、セミコロンと言い、処理の末尾に記述するものです。現在、このプログラムには、1行の処理しかありませんが、複数行にわたる処理が記述 される場合、必ずこのセミコロンによって、それぞれの処理を区切る必要があります。

エスケープシーケンス

また、この中にある¥nは、改行を表す特殊な文字です。この文字があると、文字列はそこで改行され、続く文字は次の行から改行されます。この改行記号のように、¥マークで始まる文字を、エスケープシーケンスと言います。エスケープシーケンスは表1-1のように、他にも沢山あります。

表1-1:主なエスケープシーケンス
記号意味
¥a警告音
¥bバックスペース
¥n改行
¥tタブ
¥¥文字としての¥
¥?文字としての?マーク
¥"ダブルクオーテーション(")
¥'シングルクオーテーション(')
¥0ヌル(null)文字

次のサンプルは、このエスケープシーケンスを用いたサンプルです。実行して結果をみてみましょう。

list1-2:main.c
#include <stdio.h>

void main(){
    printf("123¥n456¥n789¥n");
	printf("シングルクオーテーション:¥'ダブルクオーテーション:¥"¥n");
	printf("¥t円マーク¥¥¥n");
}
実行結果
123
456
789
シングルクオーテーション:'ダブルクオーテーション:"
        円マーク¥

このように、様々な記号を表示することが出来ました。

色々表示してみよう

サンプルプログラム

C言語の基本と、printf()関数の基本がわかったところで、この関数を利用して様々な処理を試してみましょう。次に、以下のプログラムを実行してみてください。

list1-3:main.c
#include <stdio.h>

void main()
{
	printf("こんにちは。私の名前は%sです。¥n年齢は%d歳です。¥n","山田太郎",20);
	printf("イニシャルは、%cです。¥n",'Y');
	printf("%f + %f = %f¥n",1.2,2.7,1.2 + 2.7);
}
実行結果
こんにちは。私の名前は山田太郎です。
年齢は20歳です。
イニシャルはYです。
1.200000 + 2.700000 = 3.900000

書式指定

まずは5行目のprintf()に注目してください。このように、¥nを、文字列の途中に入れると、途中に改行が入ります。また、文字列の中に、%sや、%dや、といったような不思議な記号がついています。この部分は、後に","(コンマ)で区切った値を表示するのです。

例えば、5行目の%sには、山田太郎という文字列が、%dには、20という数値が入るという具合です。文字列の後にコンマで区切られた一つ、もしくは複数の値を入れるのですが、そこに並べたとおりにデータが表示されます。(図1-1)

図1-1.printf()関数の様式

C言語のprintf関数の様式

この記号と書式の指定は、表1-2のようなに対応しています。

表1-2:色々な書式指定
書式 意味 使用例
%d 整数値を10進数で表示する。 1,12,30,-4,5 + 5
%f 実数値を10進数で表示する。 0.15,-4.2,2.21,1.3 + 3.8
%lf 実数値を10進数で表示する。(&fより長い桁が表示可能)
%c 文字。ASCIIコードで表示された文字列が表示される。 'A','b','8'
%s 文字列。文字列をそのまま表示できる。数 "ABC","佐藤俊夫"

面白いのは、%dや、%fといった、数値を表示する書式の場合、単に数値を入れるだけではなく、式を入れてもきちんと結果が出るということです。例えば、%dには、10といった整数だけではなく、5+3といった、式を入れることも可能です。その表示結果は、その計算結果である、8が表示されます。

さらに詳しいprintf()による表示方法についてはこちらを参照してください。

文字と文字列

なお、文字文字列を分けて考えていることに注意してください。文字とは、char型の値(2日目参照)のことであり、'(シングルクオーテーション)で囲ってあります。 それに対し、文字列は、"(ダブル・クオーテーション)でかこってあります。

また、気をつけたいのは、printf()でこれら書式を使った時の表示結果です、文字列の後に続ける値は、すでにのべたように,で区切るわけですが、その際、必ず書式の出現した順序で対応する値を入れるようにしてください。

そうしないと、表示結果としておもわしくないものが得られる場合があります。場合によっては、プログラムが止まってしまう場合もあるので気を付けてください。

エラーの処理

コンパイルエラー

まずは、以下のプログラムを入力、実行してみてください。

list1-4:main.c(エラーあり)
#include <stdio.h>

void main(){
	printf("ABC");
	print("DEF¥n");
}

プログラムを実行すると、以下のようなメッセージが出現すると思います。(図1-2.)

図1-2.コンパイラが発するエラーメッセージ

コンパイラが発するエラーメッセージ

これは何を意味するのでしょうか?実はこのメッセージ、ソースコードのビルドに失敗したことを意味するメッセージなのです。つまり、このプログラムには文法上誤った記述があるということなのです。 コンパイラは、誤った記述がある場合、このようなメッセージを発します。当然ながら機械語への翻訳は出来ませんから、プログラムを実行することは出来ません。

では、一体どこに誤りがあるのでしょうか?コンパイラーの発するエラーメッセージに従い、5行目を見ると、printとなっています。これは本来、printfとすべきところを、誤って記述したものです。 そこで、ここを正しい記述、printfに直してみましょう。

list1-4:main.c(再掲載)
#include <stdio.h>

void main(){
	printf("ABC");
	printf("DEF¥n");
}
実行結果
ABCDEF

これで正しく実行されました。ABCとDEFがつながっているのは、最初の4行目のprintf()の中に改行コードが無いからです。このように、printf()に改行コードがないと、次のprintf()でその続きから文字列が表示されます。

これで、C言語の基本は一通り説明しました。これからは、この知識を基にして、更に高度な知識を身につけていきましょう。

練習問題 : 問題1.