プログラム
printf("おはようございます\n");
実行結果
おはようございます
プログラムを実行すると1回 おはようございます と表示されますね。
では おはようございます を3回表示してみましょう!
printf("おはようございます\n");
printf("おはようございます\n");
printf("おはようございます\n");
実行結果
おはようございます
おはようございます
おはようございます
となりますね。
では おはようございます を1万回表示してみましょう!
とした時に、
printf("おはようございます\n")を1万回書くのかといえば・・・そんなことはせず
繰り返し同じ処理を行いたい、そんな時用に繰り返しの構文文があります。
今回は繰り返し文を学びます。
繰り返しの構文は大きく分けて2つあります。
・while(ホワイル)
・for(フォー)
繰り返し処理はゲームにおいては条件分岐とならんで必ず覚えておく必要のある構文です。
1万行書かないといけないプログラムコードを3行で片付くと思えば必要性が分かると思います。
様々なプログラムで応用ができる構文となるので書き方と処理の流れをマスターしておきましょう!
書き方
while(条件式)
{
// 繰り返し行いたい処理
}
サンプル
int num = 0;
while(num < 5)
{
printf("おはようございます\n");
num += 1;
}
printf("こんにちは");
条件式の使い方はif文で学んだものと同じです。
条件式が正しければwhileの中の処理が繰り返されるという事になります。
一旦↑のサンプルをプログラミングして実行してみましょう!
実行結果
おはようございます
おはようございます
おはようございます
おはようございます
おはようございます
こんにちは
プログラムの流れを説明します。
int型の変数numを宣言し0で初期化しました。
while文の条件式(num < 5)が処理されてnumは0なので(0 < 5)となって正しいです。
printfでおはようございますが表示されます。
numに1をたし算しました。
while文の条件式(num < 5)が処理されてnumは1なので(1 < 5)となって正しいです。
printfでおはようございますが表示されます。
numに1をたし算しました。
while文の条件式(num < 5)が処理されてnumは2なので(2 < 5)となって正しいです。
printfでおはようございますが表示されます。
numに1をたし算しました。
そのまま繰り返されnumが3, numが4, numが5と進んで
while文の条件式(num < 5)が処理されてnumは5なので(5 < 5)となって正しくありません。
while文の繰り返し処理を抜けて、printf("こんにちは");が実行されて終わり
while文は条件が正しい間、
{}中かっこの処理を繰り返してくれる構文となります。
while文の↑の例で使用した変数numは繰り返し回数を扱う変数です。
この繰り返し回数を扱う変数の事を「カウンタ」や「カウンタ変数」と呼びます。
①int型のカウンタ変数numを宣言し0で初期化
②while文を使ってカウンタ変数を10回表示してみよう。
実行結果
0
1
2
3
4
5
6
7
8
9
①int型のカウンタ変数numを宣言し0で初期化
②while文を使ってprintfで「おはようございます」を10回表示
③カウンタ変数が5の時は「こんにちは」を表示してみよう
実行結果
おはようございます
おはようございます
おはようございます
おはようございます
おはようございます
こんにちは
おはようございます
おはようございます
おはようございます
おはようございます
次のプログラムの実行結果として
A・B・Cがどの順番で何回表示されるのか考えてみてください。
int num = 0;
while(num < 5)
{
if (num == 0)
{
printf("A\n");
}
else
{
printf("B\n");
}
}
printf("C\n");
考えたらプログラミングして答え合わせしてみよう!
for文はwhile文と同じく繰り返しの構文です。
書き方が少し異なり特殊なので覚えておこう。
書き方
int num;
for(num = 0; num < 5; num += 1)
{
printf("おはようございます\n");
}
printf("こんにちは");
while文のサンプルと同じく実行結果はこのようになります。
おはようございます
おはようございます
おはようございます
おはようございます
おはようございます
こんにちは
for文の()丸かっこの中は3つのブロックに分けてプログラムします。
一つ目は初期化です。
num = 0
二つ目は条件式です。whileの条件式と同じです。
num < 5
三つ目は変化式です。
num += 1
プログラムの流れです。
int型の変数numを宣言しました。
for文の初期化が処理されてnumに0を代入しました。
for文の条件式が処理されて0 < 5となって正しいのでfor文の{}中かっこの中に入ります。
printfでおはようございますが表示されます。
for文の変化式が処理されてnum += 1が実行されnumが1増えます。この時点でnumは1です。
for文の条件式が処理されて1 < 5となって正しいのでfor文の{}中かっこの中に入ります。
printfでおはようございますが表示されます。
for文の変化式が処理されてnum += 1が実行されnumが1増えます。この時点でnumは2です。
for文の条件式が処理されて2 < 5となって正しいのでfor文の{}中かっこの中に入ります。
printfでおはようございますが表示されます。
そのまま繰り返されnumが3, numが4, と進んで
for文の変化式が処理されてnum += 1が実行されnumが1増えます。この時点でnumは5です。
for文の条件式が処理されて5 < 5となって正しくないのでfor文を抜けます。
printfでこんにちはが表示されてプログラムを終了します。
初期化式はforに突入した1回目のみ処理される。
変化式は繰り返しの度に処理される。
条件式は初期化の後と変化式の後に処理されます。
①int型の変数numを宣言
②カウンタ変数numを使ってfor文で5回「おはようございます」を表示しよう
実行結果
おはようございます
おはようございます
おはようございます
おはようございます
おはようございます
①int型の変数numを宣言
②カウンタ変数numを使ってfor文で10回変数numを表示
③numが3の時は表示させないようにしてみよう
実行結果
0
1
2
4
5
6
7
8
9
初期化と変化式がfor文の()丸かっこの中に記述があるかないかの書き方の違いだけでwhileとforの処理は一緒です。
じゃあwhileとforってどっちを使えばいいの?
という事ですが、好きな方を使って貰っていいのですが
プログラマのお作法を教えておくと
カウンタ変数を使う繰り返しはfor、それ以外をwhile
と覚えておくとイイでしょう!
既にゲームプログラムにおいてゲームループにwhileを使っています。
そこでは「ウィンドウを閉じる×ボタンが押されていない間」という条件式でwhileを使っています。
カウンタ変数をあつかっていない条件式なのでゲームループはwhileがイイ!というような考え方です。
これは今そこまで気にしなくていい事なので、
今はwhileとforの書き方の違いだけ覚えておくようにしましょう!
while文とfor文つかう場合に
この時だけ中かっこの処理をスキップしたいんだよなー、という時があります。
この時だけ処理を"スキップ"したいスキップ処理を行うのがcontinueです。
for(num = 0; num < 10; num += 1) // continueするとここに処理が戻り変化式が実行される
{
if (num == 5)
{
continue;
}
printf("%d\n", num)
}
if文でnumが5の時にcontinueを呼び出しました。
そうするとfor文の変化式に処理を戻してnumが1足されて条件式が実行されます。
whileでcontinueを使う場合は注意が必要です。
num = 0;
while(num < 10)
{
if (num == 5)
{
continue;
}
num += 1; // ← 変化式
}
if文でnumが5の時にcontinueを呼び出しました。
変化式がwhileの最後の処理にあるのでnumが5の時にif文のcontinueが実行され続けて無限ループとなってしまいます。
num = 0;
while(num < 10)
{
if (num == 5)
{
num += 1; // while文でcontinueするときは変化式の取り扱いに注意
continue;
}
printf("%d\n", num)
num += 1;
}
while文ではcontinueするときに条件式でつかっている変数の扱いには注意しておきましょう。
while文とfor文つかう場合に
この時がきたら繰り返しを止めたいんだよなー、という時があります。
この時には繰り返しを"中断"したい中段処理を行うのがbreakです。
for文、while文、どちらも処理の流れが一緒なのでwhile文で説明します。
while(num < 10)
{
if (num == 5)
{
break;
}
printf("%d\n", num);
}
← breakが呼び出されるとここに処理が飛んでくる。
if文でnumが5の時にbreakを呼び出しました。
breakが呼び出されたのでwhileの{}中かっこを抜け出してプログラムが終了します。
continueやbreakは様々なアルゴリズムで応用されます。
今は存在と書き方だけ覚えておいてください。