一週間で身につくC言語の基本

おさえておきたいプログラミングの基本

【1日目】 最も基本的なプログラム

C言語の最初の一歩を学びましょう。

1-1.Hello,World

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

(1) プログラミング言語

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

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

int main(int argc, char** argv){
    printf("Hello World.\n");
    return 0;
}
実行結果
Hello World.

実行結果からもわかるとおり、このプログラムを実行すると、"Hello World."という文字列が表示されます。

このプログラムは、ほとんどのC言語のプログラムの入門書などでいちばん最初に記述されているサンプルプログラムである、Hello Worldと呼ばれる、簡単な文字列が画面表示されるだけのものです。

1-2.プログラムの仕組み

(1) ヘッダファイル

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

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

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

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

(2) 関数

3行目のint main(…)の部分ですが、ここはメイン関数の宣言と呼ばれます。

C言語は、このメイン関数の中に処理を書くことにより、実行されます。処理の中身は、"{"および"}"で囲まれています。この処理の中には、printfという命令があり、これは、コンソールに文字を出力するものなのです。こういった命令のことを、C言語では、正式に関数(かんすう)と呼びます。

関数には、もともとC言語に備わったものと、ユーザーによって後から付け足されるものがあります。printf関数は、もともとC言語に備わっている関数のうちの一つです。printf()関数は、()内にあるものをコンソール画面に表示すると言う機能があります。特に、文字列を表示する場合は、"(ダブル・クオーテーション)で囲みます。

最後の「return 0;」はmain内の処理の終了を表します。

printf()関数の呼び出し
printf("Hello World.\n");

(3) セミコロン

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

(4) エスケープシーケンス

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

なお、「∖」はWindowsの日本語環境では「¥」と表示されます。見た目は違いますが意味は一緒です。

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

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

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

int main(int argc, char** argv){
    printf("123\n456\n789\n");
    printf("シングルクオーテーション:\'ダブルクオーテーション:\"\n");
    return 0;
}
実行結果
123 456 789 シングルクオーテーション:'ダブルクオーテーション:"

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

(5) 処理の流れ

今回、mainの中には複数のprintf()が存在します。プログラムは通常複数の処理によって構成されますが、3行目→4行目というように原則的に上から下に実行されます。そして最後の「return 0;」で終了します。

3行目の処理は一行で1から9までの整数を表示していますが、途中に「∖n」で開業することにより、表示は3行に分かれています。

図1-1.∖nの改行処理
\nの改行処理

また、ダブルクオーテーションも通常の方法では表示できませんが、前に"∖"を付けることにより文字列の中に埋め込むこともできます。

1-3.色々表示してみよう

C言語の基本と、printf()関数の基本がわかったところで、この関数を利用して様々な処理を試してみましょう。

(1) 書式指定

次に、以下のプログラムを実行してみてください。

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

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

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

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

図1-2.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より長い桁が表示可能) 0.15,-4.2,2.21,1.3 + 3.8
%c 文字。ASCIIコードで表示された文字列が表示される。 'A','b','8'
%s 文字列。文字列をそのまま表示できる。数 "ABC","佐藤俊夫"

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

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

(2) 文字と文字列

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

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

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

1-4.エラーの処理

(1) コンパイルエラー

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

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

int main(int argc, char** argv){
    printf("ABC");
    print("DEF\n");
    return 0;
}

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

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

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

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

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

list1-4:main.c(再掲載)
#include <stdio.h>
                   
int main(int argc, char** argv){
    printf("ABC");
    printf("DEF\n");
    return 0;
}
実行結果
ABCDEF

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

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

練習問題 : 問題1.

一週間で学べるコースの一覧
Udemy
...
2024/10/01

Udemyでも学びましょう!

一週間でわかるC言語・C++言語がオンライン講座になりました!動画音声によってさらにわかりやすくなりました!! 1講座で2つの言語を学ぶことができる上に、練習問題の回答もダウンロードできます。

Read →
Impress一週間シリーズ
1週間でC言語の基礎が学べる本
2024/10/01

書籍化された一週間シリーズ

本講座が「1週間でC言語の基礎が学べる本」として書籍化されました!サイトの内容プラスアルファでより学習しやすくなっています!Impressより発売中です!!

Read →
Impress一週間シリーズ
...
2024/10/01

書籍化された一週間シリーズ

一週間シリーズは書籍化されています。こちらもどうぞ!

Read →
プログラマーなら欲しいグッズ
プログラミンググッズ

プログラミンググッズ

快適なプログラミング環境を構築したい人々にぜひとも揃えてほしいグッズです。

Read →
制作・管理
シフトシステム株式会社

シフトシステム株式会社

このサイトはシフトシステム株式会社によって制作・管理がなされています。

Read →