前回は、配列のお話に入りました。
今回も、配列のお話の続きを見ていきましょう。
では、前回の終わりの方のプログラムを見てみましょう。
プログラム名:sample07.c
#include <stdio.h>
int main(void)
{
char s[10];
char y[10] = "どら焼き";
s[0] = 'd';
s[1] = 'o';
s[2] = 'r';
s[3] = 'a';
s[4] = 'y';
s[5] = 'a';
s[6] = 'k';
s[7] = 'i';
s[8] = '!';
s[9] = '\0';
printf("1:%s\n",s);
s[0] = 't';
s[1] = 'e';
s[3] = 'i';
printf("2:%s\n",s);
printf("3:%s\n",y);
return 0;
}
このようなプログラムでした。
画面表示はこのようになります。
1:dorayaki!
2:teriyaki!
3:どら焼き
まず、画面表示の1行目は、「1:dorayaki!」となっています。
これをプログラム上で確認しましょう。
プログラムでは、文字型の配列「s」を作っています。要素数は「10」です。
この各要素に一文字ずつ文字を入れて文字列を構成しています。
各要素に文字を入れるには、「添字」を使う必要があります。
s[0] = 'd';
s[1] = 'o';
s[2] = 'r';
・
・
・
このように、添え字は「0」から始まることに注意して下さい。
「文字型配列sの0番目の要素にdをいれる」
言葉で表現すると、このように言うことができます。
これを続けて、最終的に配列sの9番目の要素に「\0」を入れて配列に値の代入は終わります。
ここで「\0」という文字が出てきました。
これは一体何でしょうか。
これは、「文字列がここで終了ですよ」ということを知らせるマークみたいなものです。
C言語で文字列を扱う場合必要になるので覚えておきましょう。
これは決まりですので、文字列の最後には「\0」を入れます。
画面表示の2行目は、「2:teriyaki!」となっています。
プログラム上で確認してみましょう。
プログラムでは、中ほどに
s[0] = 't';
s[1] = 'e';
s[3] = 'i';
このような記述になっています。
ここでは何をしているのでしょうか?
そうです、ここでは要素の値を変更しているのです。
ちなみに、「文字」のこともプログラミングでは「値(あたい)」といいます。変数の中身のことを全般に値といいます。
添字を使って、変更したい要素変数の中身を変えています。
変数は、もともと値が入っていると、後からその変数に別の値を代入する操作をすると「上書き」されるので覚えておいてください。
このように、添字を使うと個別に値の操作をすることが出来るのです。
そして、画面表示の3行目は、「3:どら焼き」となっています。
プログラム上で確認しましょう。
プログラムでは、まず、変数の宣言部分に注目します。
char y[10] = "どら焼き";
このような記述になっています。
これは何をしているのでしょうか?
大体想像がつきますね。
以前にプログラミングの勉強では、プログラムを読むことも大切な勉強方法のひとつだといいました。
そして、読むときに必要な考え方として「想像する」というのも大事な要素なのです。
本などを読むときにも「想像」が必要になってきたりするのと同じような感じで捉えるといいと思います。なんとなくでいいので。
で、この記述は、言葉で表現すると「文字型の要素数10の配列yを作り、文字列”どら焼き”を、それぞれの要素に代入する」という意味になります。
分かりにくいですね。
ここでは、「宣言」と「初期化(一番最初に値を入れる作業のこと)」が同時に行われているのです。
宣言と同時に値を入れているのです。
ここでプログラムを良く眺めてみると、何かお気づきになられましたでしょうか?
ようく眺めてみてください。
文字型の配列を作るというのはいいのですが、値を代入するのに、値に「日本語」を使っていますし、文字列の最後は「\0」でないといけないという決まりも守られていません。
何故でしょうか?
これは、このような記述をするときは、自動的にコンパイラが判断をして値の操作を行ってくれているのです。
ここで、話を逸らします。
コンピュータの世界で、日本語(ひらがな、カタカナ、漢字など)は「2バイト文字」と言います。
反対に、英数文字(半角の数字、半角のアルファベットなど)は「1バイト文字」と言います。
半角と全角の違い分かりますでしょうか?
キーボードの左上の方に「半角/全角」というキーがあります。
このキーを押すと、日本語が入力できたり出来なくなったりします。
日本語の入力が出来ない状態の文字を「半角」、日本語が入力できる状態の文字を「全角」といいます。
半角は、全角の半分の情報量を扱います。
全角は、半角の2倍の情報量を扱います。
見た目では、「8」は全角文字、
「8」は半角文字です。
文字の大きさを比べると、だいたい表示領域は半分くらいですね。
さて、このことを踏まえてプログラムに戻りましょう。
プログラミングで漢字などを扱う場合、「2バイト」の変数が必要になります。
文字型の変数は「1バイト」なので、日本語を扱うときには変数2つ分必要になってきます。
で、配列の各要素に値を入れるやり方だと、1バイトの領域には入れられないので不都合が起こってしまいます。
ここで可能にする記述の仕方が、宣言と同時に初期化してしまう方法です。
しかし、更に疑問が出てきます。
宣言以外の時には値を入れることは出来ないのでしょうか?
答えは、出来ます。
記述は、こうします。
まず、宣言で
char *ss;
と、記述します。変数の作成ですね。
次に、値を代入します。
ss = "回転焼き";
などと記述します。
あとは、printf関数などで、
printf("5:%s\n",ss);
と記述すると、その文字列が画面に表示されます。
では、実際にプログラムを組んでみましょう。
sample07.cを変更して、名前を付けて保存しましょう。
プログラム名:sample07a.c(ファイル名に注意して下さい。)
#include <stdio.h>
int main(void)
{
char s[10];
char y[10] = "どら焼き";
char *c;
s[0] = 'd';
s[1] = 'o';
s[2] = 'r';
s[3] = 'a';
s[4] = 'y';
s[5] = 'a';
s[6] = 'k';
s[7] = 'i';
s[8] = '!';
s[9] = '\0';
printf("1:%s\n",s);
s[0] = 't';
s[1] = 'e';
s[3] = 'i';
printf("2:%s\n",s);
printf("3:%s\n",y);
c = "ドラ焼き";
printf("4:%s\n",c);
c = "回転焼き";
printf("5:%s\n",c);
return 0;
}
どのような表示になりましたか?
なんだかよく分からないかもしれませんが、「ふ〜ん、こんなものか」くらいで考えてくださいね。
今回は、前回のループの続きと配列について少し見ていこうと思います。
まずは、前回のおさらいです。
前回は、「ループ」の「前判定」と「後判定」を見ていきました。
前判定ループとは、ループに入る直前で、ループの終了条件を評価します。
後判定ループとは、ループに一度入り、ループの終わりで終了条件を評価します。
では、前回の最後の例題プログラムを見てみましょう。
お分かりになったでしょうか?
ファイル名:sample05a.c(ファイル名に注意して下さい)
#include <stdio.h>
int main(void)
{
int a;
int b;
a = 1;
b = 0;
printf("1〜10まで順番に足し算します。\n");
do{
b = a + b;
printf("%d回目:現在の値は %d です。\n",a,b);
a++;
}while( );
printf("合計は、%d です。\n",b);
return 0;
}
このようなプログラムでした。
早速答えですが、do-while文のwhileの括弧の中には、
a<=10
という条件式が入ります。
do{
b = a + b;
printf("%d回目:現在の値は %d です。\n",a,b);
a++;
}while(a<=10);
これが正しい文です。
この文は、「後判定ループ」です。
一度、ループ内を通って、ループの終わりで条件の判断をしています。
では、実際の「後判定」をプログラムをいじって確認しましょう。
それでは、前回と同様に条件式を「a>=10」に変更し動かしてみましょう。
どのようになったでしょうか?
このようになります。
1〜10まで順番に足し算します。
1回目:現在の値は 1 です。
合計は、1 です。
このように、一度ループ内を通っているのが分かると思います。
前回の前判定ループでは、同じように条件式を「a>=10」に設定してみると、
1〜10まで順番に足し算します。
合計は、0 です。
というふうに、ループ内の処理は一度も行われませんでした。
しかし、今回の表示結果をみると、1回目が表示されていますね。
ですから、後判定ループの場合は、必ず一度は処理が行われるのです。
プログラムは、条件分岐とループを使って、あたかもパズルを組むように、様々な処理が出来るので、それぞれの特徴を理解できるようにしましょう。
では、ここから「配列」について見ていきましょう。
まず、C言語で配列を作る方法です。
配列は変数なので、作り方は通常の変数と同じようにします。
今回は「文字型」の配列を作って、画面に文字を表示してみましょう。
作り方はこうです。
char s[10];
プログラムの最初の方で、このように記述すると変数(配列)が作られます。
ちなみに、プログラムの最初の方で、あらかじめ変数を作ることを「宣言」といいます。
「宣言」とは、プログラムの最初の方で、コンピュータに対し、「今から、こういう変数名の変数を使うよ」というふうに教えているのです。
コンピュータは指示通りにしか動きませんから、「宣言」のない状態だと変数が作ることができないので、コンピュータはどうすればいいのか分からなくなってしまいます。ですので、「宣言」は変数などを作る際には、必ず必要になるので覚えておきましょう。
配列は、変数の集まりだと以前お話しました。
で、先程の記述を見てください。
この文の意味ですが、「文字型の変数sを10個作り、ひとまとめにしたもの」という意味になります。
慣れてくると、「要素数10の配列s」という風に考えられるようになります。
では実際のプログラムを記述してみましょう。
ファイル名:sample06.c
#include <stdio.h>
int main(void)
{
char s[10];
s[0] = 'd';
s[1] = 'o';
s[2] = 'r';
s[3] = 'a';
s[4] = 'y';
s[5] = 'a';
s[6] = 'k';
s[7] = 'i';
s[8] = '!';
s[9] = '\0';
printf("%s\n",s);
return 0;
}
これを実行すると、
dorayaki!
という文字が画面に表示されます。
このように配列は扱われます。
プログラムをじっくりと見て下さい。
何かお気づきになったでしょうか?
そうです、各要素には「背番号」のように数字が付いています。
この数字のことを「添字(そえじ)」と言います。
配列は、各要素に対し通常の変数と同じように値を扱うことが出来ます。
その時に必要になるのが「添字」なのです。
この背番号のようなものを変数名の後ろの[]の中に記述すれば、操作することが出来るようになります。
そして、今一度良く見てみてください。
もう一点、お気づきになったでしょうか?
各要素に対して、一文字ずつ文字を変数の中に格納しています。
ここで添字に注目してください。
s[0] = 'd';
s[1] = 'o';
s[2] = 'r';
・
・
・
という風に、添字が「0」から始まっています。
C言語では、各要素に対して添字を使って操作する場合は、その添字は「0」から始まる決まりになっています。
char aa[200];
char bb[50];
char cc[3];
このような配列があったとします。
各配列の1番目に「z」という文字を入れたいとします。
このときは、このように指定します。
aa[0] = 'z';
bb[0] = 'z';
cc[0] = 'z';
こうすれば、それぞれの配列の一番最初の要素には「z」を入れることが出来るのです。
このように、C言語では、要素の最初の番号は「0」から始まるのが決まりになっていますので注意しておいてください。
まとめましょう。
「宣言」では、「型・変数名(配列名)・要素の個数」を指定し、実際の扱う場面では、添字を使って各要素を操作します。添字は「0」から始まります。
先程の配列の例では、
「char」 が 型
「aa」 が 変数名
「[200]」 が 要素数
添字は、
aa[0]〜aa[199] までの200個となります。
ちなみに言葉で表現する場合には、「aaの0番目の要素」というふうに表現します。
それでは、以下のプログラムを記述して動かしてみましょう。
sample06.cのプログラムに追加すれば手間を少し省くことができます。その際ファイル名を間違えないようにしてくださいね。
プログラム名:sample07.c
#include <stdio.h>
int main(void)
{
char s[10];
char y[10] = "どら焼き";
s[0] = 'd';
s[1] = 'o';
s[2] = 'r';
s[3] = 'a';
s[4] = 'y';
s[5] = 'a';
s[6] = 'k';
s[7] = 'i';
s[8] = '!';
s[9] = '\0';
printf("1:%s\n",s);
s[0] = 't';
s[1] = 'e';
s[3] = 'i';
printf("2:%s\n",s);
printf("3:%s\n",y);
return 0;
}
どのような表示になりましたか?
今回も、前回と同じ「ループ(繰り返し)」について、C言語で考えて見ましょう。
まず、前回のプログラムsample05.cを見てみましょう。
ファイル名:sample05.c
#include <stdio.h>
int main(void)
{
int a;
int b;
a = 1;
b = 0;
printf("1〜10まで順番に足し算します。\n");
while( a <= 10 ){
b = a + b;
printf("%d回目:現在の値は %d です。\n",a,b);
a++;
}
printf("合計は、%d です。\n",b);
return 0;
}
このようなプログラムでした。
では、今回はどこに注目するかというと、前回はfor文をみましたが、そのfor文と同じ場所が、whileに変わっています。
なんとなく、想像がつきますね。
そうなんです、実はこのブログラム、前回と処理内容は全く同じなのです。
単にfor文をwhile文に置き換えただけでした。
C言語には、ループをさせるためのキーワードが2種類あります。
一つは「for」、もう一つは「while」です。
ここで疑問が出てきます。
何故、2種類のループが存在するのでしょうか?
これは、ループの種類にかかわってきます。
少しおさらいをすると、ループには「前判定ループ」「後ろ判定ループ」の2種類があると説明しました。
で、このループを実現するのに必要なキーワードが「while」なのです。
前判定ループは、ループに入る前に一度条件の判定を行ってからループ内の処理に移ります。ということは、条件が満たされなければ、ループ内の処理は一度も実行されない可能性があるわけです。
後判定ループは、ループ内の処理を一度移ってからループの終わりで条件の判定を行います。ですので、必ず一度はループ内の処理は行われます。
それでは、今回のsample05.cのプログラムは、どちらの判定ループなのでしょうか?よく、プログラムを読んでみてください。
少し余談ですが、プログラミングの勉強で大切なことの一つに、プログラムを読む練習をすることが挙げられます。
人が書いた、若しくは、自分で書いたものを冷静に見つめてみるというのは、とても大事なことだと思います。
最初からじっくり読むのは大変なことなので、まずは眺めてみることから始めてもいいと思います。回数を重ねると、だんだんと読めるようになってきます。あせらず、ゆっくりでいいので、頑張りましょう。
さて、答えですが、今回のプログラムは「前判定ループ」なのです。
見てみましょう。whileのところに注目してください。
while( a <= 10 ){
b = a + b;
printf("%d回目:現在の値は %d です。\n",a,b);
a++;
}
このようになっていますが、whileの後の括弧を見てみると、何だか条件の式のように見えます。
そうですね、これがループを終わらせるかどうかの条件判定の内容になります。
たいていプログラムは上から順に逐次実行されますので、自然と条件判定の式(条件式といいます)にたどり着きますね。ですから、まずループに入る前に、条件式が評価されるのです。
試しに、「a <= 10」の部分を、「a >= 10」に変更してみるとどうなると思いますか?実際に試してください。
これは、ループはされないのです。
何故でしょうか?
プログラムの上の方で、変数を作って、その変数に値を入れて初期化している部分があります。見てみましょう。
int a;
int b;
a = 1;
b = 0;
このようになっていますね。
変数aを見てみると、「1」が代入されいています。
つまり、whileの条件式は満たされないのです。
ループ内の処理は一度も実行されること無く、プログラムは終了してしまいます。
これが、前判定ループです。
表示結果は、こうのようになります。
1〜10まで順番に足し算します。
合計は、0 です。
では、後判定ループはどのように記述すればよいのでしょうか?
それは、do-while文というのを使います。
書き方は、
do{
処理したい内容
}while( 条件式 );
注意ですが、最後の「;」は忘れずに記述してください。
それでは、sample05.cのプログラムを改良してみてください。分からなくても構いませんので、一度は考えてみてくださいね。
以下にヒントを示します。
ファイル名:sample05a.c(ファイル名に注意して下さい)
#include <stdio.h>
int main(void)
{
int a;
int b;
a = 1;
b = 0;
printf("1〜10まで順番に足し算します。\n");
do{
b = a + b;
printf("%d回目:現在の値は %d です。\n",a,b);
a++;
}while( );
printf("合計は、%d です。\n",b);
return 0;
}
コンパイルして、実行してみてください。
どのような表示になりましたか?
今回も引き続き、プログラミングの基本構造をC言語で考えて見ましょう。
まず、前回のsample04.cを見てみましょう。
ファイル名:sample04.c
#include <stdio.h>
int main(void)
{
int a;
int b;
b = 0;
printf("1〜10まで順番に足し算します。\n");
for( a = 1; a <= 10; a++ ){
b = a + b;
printf("%d回目:現在の値は %d です。\n",a,b);
}
printf("合計は、%d です。\n",b);
return 0;
}
このようなプログラムでした。
答えですが、このようになります。
1〜10まで順番に足し算します。
1回目:現在の値は 1 です。
2回目:現在の値は 3 です。
3回目:現在の値は 6 です。
4回目:現在の値は 10 です。
5回目:現在の値は 15 です。
6回目:現在の値は 21 です。
7回目:現在の値は 28 です。
8回目:現在の値は 36 です。
9回目:現在の値は 45 です。
10回目:現在の値は 55 です。
合計は、55 です。
では、プログラムを見てみましょう。
変数は2つ、aとbを作っています。
メッセージを表示した後、この2つの変数を使って処理をしています。
どのような処理でしょうか?
数字の1〜10を順番に足し算しています。
ここで必要になってくるのが、「ループ(繰り返し)」処理です。
1〜10までを順番に足す処理ならば、式を10個書き連ねればループを使わなくても大丈夫ですが、これが、1〜100000000までを順番に足す処理だとすると、大変な作業になってしまいますね。
それに、変数の扱いの練習にもなりますよ。
さて、プログラムの記述を確認しましょう。
for( a = 1; a <= 10; a++ ){
b = a + b;
printf("%d回目:現在の値は %d です。\n",a,b);
}
この部分が「ループ」です。
「for」というキーワードを使い、条件を満たすまで繰り返します。
for文といいます。
forの後の括弧の中を見てみましょう。
a = 1;
これは、変数aに「初期値」の1を入れています。
この初期値を変化させて、ループの終了条件に利用します。
a <= 10;
この記述で条件を設定しています。
この条件は、「変数aの値が10以下の間」という意味です。
a++
この記述は、「変数aの内容を1ずつ増やす」という意味です。
まとめると、「変数aを1ずつ増やし、aの値が10以下の間はループを行う」ということになります。
for( 初期値; 条件; 増分値 ){ }
これがfor文の書式です。
for文にもブロックがあります。
繰り返しを行う処理を記述するためのブロックです。
では、ブロックの中身を見ていきましょう。
b = a + b;
変数bに、変数aの値と変数bの値を足したものを変数bに入れています。
変数aというのは、for文で使われているaです。
そうです、forの条件に使われている変数を使うことが出来るのです。
変数の値の変化を見てましょう。( )内の数字は、その変数の値を指します。
1回目: b(1) = a(1) + b(0)
2回目: b(3) = a(2) + b(1)
3回目: b(6) = a(3) + b(3)
4回目: b(10) = a(4) + b(6)
5回目: b(15) = a(5) + b(10)
6回目: b(21) = a(6) + b(15)
7回目: b(28) = a(7) + b(21)
8回目: b(36) = a(8) + b(28)
9回目: b(45) = a(9) + b(36)
10回目: b(55) = a(10) + b(45)
このように変化していきます。
式の次のprintf関数の中に「\n」がありますが、これは「改行」を行うための特殊文字です。
このように、変数と式を使ってループを利用すると、非常に便利な構造なので、是非理解できるように頑張ってください。
以下のプログラムを記述してコンパイルし、実行してみてください。
ファイル名:sample05.c
#include <stdio.h>
int main(void)
{
int a;
int b;
a = 1;
b = 0;
printf("1〜10まで順番に足し算します。\n");
while( a <= 10 ){
b = a + b;
printf("%d回目:現在の値は %d です。\n",a,b);
a++;
}
printf("合計は、%d です。\n",b);
return 0;
}
どのような表示になりましたか?
今回は、プログラムの基本構造をC言語で見ていきましょう。
前回の「sample03.c」のプログラムを使ってお話します。
前回のプログラムは、
ファイル名:sample03.c
#include <stdio.h>
int main(void)
{
int a;
printf("1〜10までの数字を入力して、Enterキーを押してください:");
scanf("%d",&a);
if(a>5){
printf("この数字は、「5」よりも大きいですね。");
}else{
printf("この数字は、「5」であるか、それよりも小さいですね。");
}
return 0;
}
このようなプログラムでした。
さて、答えですが、画面には、
1〜10までの数字を入力して、Enterキーを押してください:
というメッセージがでます。
ここで、1〜10の数字を入力し、Enterキーを押します。
たとえば、7を入力すると、
この数字は、「5」よりも大きいですね。
というメッセージがでます。また、5を入力すると、
この数字は、「5」であるか、それよりも小さいですね。
というメッセージがでます。
ここでお気づきでしょうか?
そうです、「条件分岐」なのです。
このプログラムは、ユーザから数字を受け取って、その数字により、表示するメッセージを「選択」しているのです。
では、順番に見ていきましょう。
メイン関数の中を見てください。
最初に、int a で変数を作っています。
次に、printf関数で、入力を促すためのメッセージを表示しています。
その次に、実際に入力するための関数を利用しています。
scanf関数です。読み方は「スキャンエフ」と読めばいいと思います。
この関数は、入力された値を変数へ送る動作をします。
scanf関数の括弧の中身を見てみましょう。
最初に出てくる”%d”ですが、これは受け取る値は「10進数」であることを指定しています。
そして、次の”&a”では、変数aに受け取った値を渡す指示をしています。
ここからが本題です。
次の「if(a>5)」という記述が、プログラムの基本構造の一つである「条件分岐」です。
読み方は、「イフ文」と読めばいいでしょう。
この文の意味ですが、ifの後ろのカッコ内が条件になります。
ここでは、「変数aが5よりも大きいか?」という条件です。
この条件が、「OK」なら、「○○を実行」し、「NO」なら、「××を実行」するのです。
この例題で説明すると、まず、ifのあとに「{ }」と「else」と「{ }」があります。
そうですね、「{ }」はブロックというのでした。
このif文では、ブロックが二つあります。これは、実行して欲しい内容が二つある場合は、ブロックが二つになります。
もし、実行して欲しい内容がひつだけの場合は、「else」以降の内容は要らないことになりますので、省略可能です。
ifのあとのブロックは、ifの条件が正しい時、つまり「OK」のときに実行して欲しい内容です。
elseのあとのブロックは、ifの条件が正しくない時、つまり「NO」のときに実行して欲しい内容です。
まとめて見ましょう。
if( 条件 ){
条件が正しい時の内容
}else {
条件が正しくない時の内容
}
となります。if文の書き方の基本なので覚えておきましょう。
ちなみに、条件が正しい時のことを「真」といい、条件が正しくない時のことを「偽」といいます。
if文を記述するときの注意ですが、「{ }」の対応、つまりブロックの始まりと終わりの「{ }」を記述し忘れることが結構ありますので、忘れずに記述するようにしましょう。
以下のプログラムを記述し、コンパイルして、実行してみましょう。
ファイル名:sample04.c
#include <stdio.h>
int main(void)
{
int a;
int b;
b = 0;
printf("1〜10まで順番に足し算します。\n");
for( a = 1; a <= 10; a++ ){
b = a + b;
printf("%d回目:現在の値は %d です。\n",a,b);
}
printf("合計は、%d です。\n",b);
return 0;
}
どのような表示になりましたか?
(毎回のことですが、プログラム部分をコピーして貼り付けても、コンパイルの段階でエラーになりますので、お手数ですがきちんとタイピングしてくださいね。)
さて、今回は変数について、C言語で考えて見ましょう。
前回の例をもとに見てみましょう。
前回の例は、
ファイル名:sample02.c
#include <stdio.h>
int main(void)
{
int a;
int b;
a = 200;
b = 300;
a = a * b;
printf("%d",a);
return 0;
}
というプログラムでした。
で、答えですが、どのような表示になるかというと、「60000」という数字が画面に表示されます。
まず、準備です。コマンドプロンプトを起動してください。
「スタート」→「すべてのプログラム」→「アクセサリ」→「コマンドプロンプト」の順にマウスで操作します。
出てきた画面上で、
>cd my documents\cwork
と入力してEnterキーを押します。
前回のプログラムをメモ帳で開きます。
マイドキュメントからcworkの中のsample02.cをダブルクリックで開いてください。
それではまずは、おさらいです。空白行は飛ばして行数を数えて行きます。
一行目は、呪文なので、はじめにこの文を記述します。
深くは考えないでおきましょう。もっとC言語を理解してからでも遅くはありません。
二行目は、プログラムの主要部分、メイン関数です。
この記述でプログラムが成り立ちます。実行させるプログラムには必ず記述する必要があります。
三行目は、ブロックの始まり、ブロックとは関数などの”塊”を表します。「こっからここまで」の区切りをコンピュータに教えているわけです。ですから、必ずブロックの始まりがあれば、終わりもありますので、その対応は覚えて起きましょう。
十行目は、呪文なので、このように記述しておきましょう。これも後から勉強すればいいので、今はそっとしておきましょう。
十一行目は、ブロックの終わりです。ここでメイン関数が終わります。つまり、プログラムの終わりです。
それでは、本題です。メイン関数の中身を見ていきましょう。
int a;
int b;
この記述は、何を表しているのでしょうか?
お察しが早い人は、「あ、これって変数?」と思ったかもしれません。
そうです、この記述が変数を作る記述です。「宣言」といいます。
C言語では、変数などをあらかじめ「宣言」しておいてから、扱わなくてはならない決まりになっています。
まず、「int」ですが、これは「型」を表します。「型」とは、変数の種類のことです。
「int」は「整数」を表します。つまり、変数a・b共に、整数を扱う変数ということです。
ですから、この変数の中には整数以外の数値は入れることができません。少数とかはダメです。
a = 200;
b = 300;
このように、整数であれば「代入」をすることができます。
変数に内容を持たせることができるのですな。
この場合だと、「aは200である。bは300である。」ということになります。
a = a * b;
この記述は、「変数aに、変数aと変数bを掛け合わせた内容を代入する」ことを表しています。
まず、a*bを計算しておきます。その後、aの内容を、先程計算した内容に書き換えます。
ちなみに、「*」は、「掛け算」の記号です。
「+」は「足し算」
「-」は「引き算」
「*」は「掛け算」
「/」は「割り算」
C言語での四則演算(しそくえんざん)の記号は、このようになっています。
printf("%d",a);
この記述で、画面上に変数aの内容を表示させています。
この関数の中の「"%d"」が気になりますね。
これは、「"%d"」に、後ろで指定している変数などの内容を表示するためもので、「変換指定子」と言います。
で、この「%d」は整数表示のためのものです。
ちなみに、この関数を使うには、一行目の呪文が必要なのです。
「stdio.h」の読み方ですが、どのように読んでも構わないと思います。ただ、よく言われている読み方を挙げておくと、「スタンダード・アイオー・ヘッダ」とか「エスティーディー・アイオー・ヘッダ」などの読み方をされています。
この関数の中の「"%d"」が気になりますね。
ためしに、この部分を次のように変更してコンパイルしてみてください。
printf("%d %d",a,123456789);
%dと%dの間は空白を入れてくださいね。
表示は、このようになります。
60000 123456789
ここでお気づきでしょうか、変数などの値と「%d」は1対1で対応しているのです。この関数の仕様なので覚えておきましょう。
C言語で変数は、このように扱われています。
それでは、次のプログラムを記述してコンパイルしてみてください。
ファイル名:sample03.c
#include <stdio.h>
int main(void)
{
int a;
printf("1〜10までの数字を入力して、Enterキーを押してください:");
scanf("%d",&a);
if(a>5){
printf("この数字は、「5」よりも大きいですね。");
}else{
printf("この数字は、「5」であるか、それよりも小さいですね。");
}
return 0;
}
さて、どのような動作になりましたか?
C言語のお話に入る前に、必要なファイルの見つけ方、設定手順をお話します。
ボーランドC/C++コンパイラは、「Borland C++Compiler 5.5無償ダウンロード」と検索してください。
「setbcc」は、そのまま「setbcc」で検索すると見つかると思います。
そして、見つかったファイルをダウンロードしてください。
インストールは、まず「Borland C++Compiler 5.5」をインストールします。何も考えずに、次へを押していけば、インストール完了です。基本的にデフォルトでインストールしていることを前提にお話をしていきますので。
それから、「setbcc」を起動します。ここでも何も考えずに、次へを押していけば、最後に設定ボタンがあるので、それを押して完了です。
最後に、必ずコンピュータを再起動させてください。
再起動後、マイドキュメントの中に「cwork」という作業用のフォルダを作っておいてください。
C言語に入る前に、コマンドプロンプトを呼び出してください。
そして、このように入力してEnterキーを押します。
>cd my documents\cwork
これで、作業フォルダに移動しましたので、始めましょう。
さて、C言語の続きです。
前回は、何も考えずに、ただメモ帳で文章を打って、コンパイルして、実行しました。
今回は、プログラムの書き方を説明したいと思います。
まず、前回のプログラムを見てみましょう。
#include <stdio.h>
int main(void)
{
printf("Hello,World!");
return 0;
}
このようなプログラムでした。
1行目から順に見ていきましょう。空白行は飛ばしてくださいね。
まず、1行目ですが、この一文は「インクルード文」といいます。
インクルードとは、英語で「含める」という意味の語です。何を「含める」のかというと、includeの次の文字に注目してください。<stdio.h>というのがありますね。これは、「ヘッダーファイル」と言います。このファイルを「含める」文章なんですな。
この後に出てくる「printf("Hello,World!");」に関係があります。実は、この文が無ければ「printf("...");」が利用できないのです。
C言語では、後々必要なファイルをあらかじめ「インクルード」しておく必要があるのです。
さて、「ヘッダーファイル」とは何なんでしょうか?
これは、関数の集まりを示したファイルなのです。
なので、後で「printf("Hello,World!");」の一文を必要とするので、最初に、この関数の場所を示しているファイルを「インクルード」する必要があるのでした。
ちなみに、「printf("...");」は「プリントエフ関数」といいます。(というか決まった日本語読みはないので、好きなように読めばいいと思います。たとえば「プリントフ」とか、読みにくいですが。)
標準出力にデータを出力する関数です。
「ん?標準出力?なに?」と思いますよね。
これは、大概は「モニタ(ディスプレイ)」に出力をするという意味だと思っていてください。コンピュータのシステムによって、そのコンピュータが「標準」にしているものが違っていたり、関数の指定の際に変更できたりするので、この関数の説明には、「デフォルトでは」という意味で、このような言い方をしているわけですな。
次に、2行目の「int main(void)」の文です。
これは、「プログラムはここから出発ですよ。」という意味合いの文です。一番メインとなります。じつは、これも関数なのです。ですから、「メイン関数」といいます。
様々な処理のプログラムは、基本的には、この「メイン関数」の中に記述することになります。
3行目です。3行目には「{」が書かれてあります。
これは、「ブロック」の始まりを表しています。
つまり、メイン関数のブロックの始まりで、6行目で終わっています。
このように、C言語では、ブロックを作って、その中にいろいろな記述するという作法がありますので、覚えていてください。
次に、4行目です。
「printf("Hello,World!");」の文があります。
これは、画面に「Hello,World!」というデータを出力するように作られた関数です。
ここで注目していただきたいのが、文の最後の「;」です。
C言語では、文の終わりは必ず「;」で終わることになっています。これも覚えておいてください。
次に、5行目です。
「return 0;」という文ですが、これも関数です。
これを話すと、さらにややこしさ倍増しますので、とりあえず、最後にはこの呪文を唱えておきましょうというぐらいで理解しておいてください。
で最後に「}」で締めくくりです。
このような書式で、C言語のプログラムは記述されます。
さて、次のプログラムを記述して、コンパイルしてみてください。
ファイル名:sample02.c
#include <stdio.h>
int main(void)
{
int a;
int b;
a = 200;
b = 300;
a = a * b;
printf("%d",a);
return 0;
}
記述し、保存できたら、このように入力しEnterキーを押します。
>bcc32 sample02.c
コンパイルが終わったら、
>sample02
と入力して、Enterキーを押してみてください。
どんな表示になりましたか?
今回から、簡単なプログラミングをしていきたいと思います。
まず、作業するためのフォルダ(ディレクトリ)を作りましょう。
コマンドプロンプトを呼び出して、以下のように入力します。
まず、マイドキュメントへ移動します。
>cd my documents
入力できたら、Enterキーを押してください。
続けて、
>mkdir cwork
入力できたら、Enterキーを押してください。
続けて、
これで、フォルダの作業は完了です。
>dir
と入力してEnterキーを押してください。
出てきた一覧を良く見てください。
cworkというフォルダが出来ていると思います。
これでフォルダ作成は終わりですが、現在のフォルダ位置がcwork上ではないので、移動します。
>cd cwork
と入力してEnterキーを押してください。
これで下準備は終わりです。
では、さっそくC言語を体験してみましょう。
メモ帳を開いてください。
基本的に、すべて半角英数文字入力してください。
日本語入力状態をOFFにした状態で作業を行って下さい。
そして、以下の文章を入力してください。
#include <stdio.h>
int main(void)
{
printf("Hello,World!");
return 0;
}
このように入力したら、保存します。
(上記の文をコピー貼り付けすると、エラーが出ます。)
保存の仕方は、単純に「ファイル」→「名前を付けて保存」を選択し、マイドキュメントのcworkに、ファイル名は「sample01.c」と入力して保存します。
ここで注意ですが、保存する際のファイルの種類に気をつけてください。
ファイルの種類が「テキスト文書(*.txt)」となっていると、正しく保存できなくなる場合がありますので、ファイルの種類は、「すべてのファイル」に切り替えて、ファイル名を「ファイル名.c」というように、必ず「.c」をつけるようにしてください。
保存ができたら、さっそく動かしてみましょう。
まず、「コンパイル」をします。
以下のように入力してみましょう。
>bcc32 sample01.c
入力できたら、Enterキーを押します。
そうすると、数行なにかメッセージが出てきて、終了します。
もし、警告などのエラーがでれば、先ほど入力したファイルを見直してください。
では、フォルダの中身を確認してみましょう。
>dir
入力したら、Enterキーを押します。
すると、sample01と名前がついたファイルが幾つか表示されると思います。そのなかで、sample01.exeの名前が付いたファイルがあることを確認してください。
これが、実行ファイルです。
では、実行させて見ましょう。
>sample01
入力できたら、Enterキーを押してください。
どうでしょうか?Hello,World!の文字が表示されましたでしょうか?
あとは、sample01.cのファイルのHello,World!の部分を自分の好きな文字などに変更して、コンパイルすると変更されますので、いろいろ試してみてください。
ちなみに、Hello,World!の部分だけは、日本語入力してもかまいません。他の部分はだめですけど。
このように、C言語のプログラミングは行っていきます。
今回から、C言語について少しずつ、お話していこうかとおもいます。
C言語とは何でしょうか?
これは、世界中で広く普及しているプログラミング言語です。
プログラミング言語とは、コンピュータに仕事をさせるための「命令書」「指示書」を記述するための「ことば」です。
私たちの世界でも「日本語」「英語」「中国語」「韓国語」などの複数の「言語」が存在するように、コンピュータの世界にも複数の「言語」が存在します。その複数の言語のうちのひとつです。
C言語という名前は、昔々、トンプソンさんという人が作った「B言語」というものをもとに、リッチーさんが改良を加えて「仕様」を整えたのが「C言語」なんですね。Bの次だからCということですな。以外に安直ですな。
ということで、この言語を使えば、コンピュータに複雑な作業もさせることが出来るのです。
さて、このC言語を利用するために必要なものがあります。
それは、C言語を記述するための「テキストエディタ」と、C言語をコンピュータ言語に置き換えてくれる「コンパイラ」というものです。
「コンパイラ」とは、言い換えると「通訳」の人だと思っていいでしょう。
この翻訳することを「コンパイル」といいます。
「テキストエディタ」は、Windowsに付属のメモ帳でかまいません。
「コンパイラ」は、インターネットのフリーソフトとして、「Borland C++ Compiler 5.5」というのがあります。
ボーランドという会社のホームページで手に入れることができます。
そして、「Borland C++ Compiler 5.5」をダウンロードし、インストールのあとは、それを利用できるように、パソコンを設定しないといけません。が、その設定は、慣れていないと少々ややこしく感じるかもしれません。
それを簡単にしてくれるソフトがあります。
「setbcc」というソフトを利用すると、簡単に設定を行うことができます。
手順としては、
「Borland C++ Compiler 5.5」ダウンロード
「Borland C++ Compiler 5.5」インストール(デフォルトのまま)
「setbcc」ダウンロード
「setbcc」ダブルクリックで解凍、インストールは次へのボタンを押していき、設定ボタンで終了
ここまでで、設定は終わると思いますので、コンピュータを再起動させて、設定を反映させてください。
基本的に、プログラムの記述は「メモ帳」で行い、翻訳作業である「コンパイル」は、コマンドプロンプト(DOSプロンプト)で操作します。
コマンドプロンプトは、WindowsXPでは、「スタート」→「すべてのプログラム」→「アクセサリ」→「コマンドプロンプト」の順で開くことができます。
設定がうまくできてるかどうかの確認ですが、コマンドプロンプト(DOSプロンプト)で、「bcc32」と入力してEnterキーを押せば、何だかいっぱいの文字が出てくると思います。バージョン情報などが書かれてあるのですが、その何だかいっぱいの文字が出てくれば大丈夫だと思います。
あとは、メモ帳でプログラムを記述して、コンパイラを使ってコンピュータが理解できる形にした後、出来上がったファイルを実行すればコンピュータに仕事をさせることが出来るようになるのです。