第6回 同じ処理を繰り返し行う反復処理
はじめに
前回は、条件によって処理を切り替える条件分岐について学びました。
しかし、プログラムでは同じ処理を何度も繰り返したい場面が数多くあります。
例えば、
- 1から10までの数字を表示する
- 100人分のテストの点数を処理する
- ゲームを終了するまで処理を繰り返す
このような処理を実現するために使用するのが反復処理です。
今回の到達目標
- 反復処理とは何かを説明できる。
while文を使用できる。do-while文を使用できる。for文を使用できる。break文とcontinue文の役割を説明できる。
反復処理とは
反復処理とは、同じ処理を繰り返し実行する仕組みです。
例えば、「こんにちは」を5回表示したいとします。
これまで学習した内容だけでは、次のように同じ命令を何度も書く必要がありました。
std::cout << "こんにちは" << std::endl;
std::cout << "こんにちは" << std::endl;
std::cout << "こんにちは" << std::endl;
std::cout << "こんにちは" << std::endl;
std::cout << "こんにちは" << std::endl;
これでも実行できますが、同じ処理を何度も書くのは大変です。
反復処理を使用すると、同じ処理を簡潔に記述できます。
while文
最も基本的な反復処理が**while文**です。
基本的な書き方は次のようになります。
while (条件)
{
繰り返す処理
}
条件がtrueである間、ブロックの中の処理が繰り返し実行されます。
次のプログラムを見てみましょう。
#include <iostream>
int main()
{
int i = 1;
while (i <= 5)
{
std::cout << i << std::endl;
i++;
}
}
実行結果
1
2
3
4
5
このプログラムでは、iの値が5以下である間、数字を表示し続けます。
インクリメント演算子の復習
前回、変数の値を1だけ増やす書き方としてインクリメント演算子を紹介しました。
i = i + 1;
は、
i++;
と書くことができます。
どちらも同じ意味ですが、反復処理ではi++という書き方がよく使用されます。
無限ループに注意
反復処理では、繰り返しを終了する条件を必ず考える必要があります。
例えば、
int i = 1;
while (i <= 5)
{
std::cout << i << std::endl;
}
このプログラムでは、iの値が変化しません。
そのため、条件は常にtrueとなり、処理が終了しなくなります。
このような状態を無限ループといいます。
反復処理では、条件を変化させる処理を書き忘れないように注意しましょう。
do-while文
while文では、最初に条件を判定してから処理を実行します。
一方、do-while文では、処理を実行してから条件を判定します。
基本的な書き方は次のようになります。
do
{
繰り返す処理
}
while (条件);
次のプログラムを見てみましょう。
#include <iostream>
int main()
{
int i = 1;
do
{
std::cout << i << std::endl;
i++;
}
while (i <= 5);
}
実行結果
1
2
3
4
5
do-while文は、条件に関係なく必ず1回は処理が実行されることが特徴です。
for文
繰り返す回数が決まっている場合は、for文を使用することが多くあります。
基本的な書き方は次のようになります。
for (初期化; 条件; 更新)
{
繰り返す処理
}
例えば、
#include <iostream>
int main()
{
for (int i = 1; i <= 5; i++)
{
std::cout << i << std::endl;
}
}
実行結果
1
2
3
4
5
for文では、
- 初期化
- 条件を判定
- 処理を実行
- 更新
という流れを繰り返します。
カウンタ変数
for文では、
int i = 1;
のように、繰り返し回数を管理する変数を使用します。
このような変数をカウンタ変数といいます。
変数名にはiがよく使用されますが、必ずiでなければならないわけではありません。
例えば、
for (int count = 1; count <= 5; count++)
{
std::cout << count << std::endl;
}
のように書くこともできます。
while文とfor文の使い分け
while文とfor文はどちらも反復処理を行いますが、使用する場面が異なります。
while文
for文
繰り返す回数が決まっていない場合
繰り返す回数が決まっている場合
入力待ちやゲームなど
1から100までの表示など
どちらを使用しても同じ処理を書ける場合がありますが、目的に応じて使い分けることが大切です。
break文
反復処理を途中で終了したい場合は、break文を使用します。
for (int i = 1; i <= 10; i++)
{
if (i == 6)
{
break;
}
std::cout << i << std::endl;
}
実行結果
1
2
3
4
5
breakが実行されると、その時点で反復処理が終了します。
continue文
繰り返しの途中で、それ以降の処理を飛ばして次の繰り返しへ進みたい場合は、continue文を使用します。
for (int i = 1; i <= 5; i++)
{
if (i == 3)
{
continue;
}
std::cout << i << std::endl;
}
実行結果
1
2
4
5
continueが実行されると、その回の残りの処理を実行せず、次の繰り返しへ進みます。
まとめ
今回は、同じ処理を繰り返し実行するための反復処理について学びました。
- 反復処理は、同じ処理を繰り返し実行する仕組みです。
while文は、条件がtrueである間、処理を繰り返します。do-while文は、必ず1回は処理を実行します。for文は、繰り返す回数が決まっている場合によく使用されます。break文は反復処理を終了し、continue文は現在の繰り返しを終了して次の繰り返しへ進みます。- 反復処理では、条件を変化させる処理を書き忘れると無限ループになるため注意が必要です。
ここまでで、C++の基本的な制御構造である順次処理・条件分岐・反復処理を学びました。
次回は、同じ種類のデータをまとめて管理するための配列について学びます。