プログラミングにおいて、繰り返し処理は非常に重要な概念です。C++では、主にwhile文とfor文という2つのループ構文を使用して繰り返し処理を行います。これらの構文を適切に使用することで、効率的で読みやすいコードを書くことができます。本記事では、C++初心者の方向けに、while文とfor文の基本的な使い方から応用まで、具体的なコード例を交えながら詳しく解説していきます。
while文の基本
while文は、条件が真である間、指定された処理を繰り返し実行します。基本的な構文は以下の通りです:
while (条件) {
// 繰り返し実行する処理
}
簡単な例を見てみましょう:
#include <iostream>
int main() {
int count = 1;
while (count <= 5) {
std::cout << "カウント: " << count << std::endl;
count++;
}
return 0;
}
このプログラムは、1から5までのカウントを表示します。while文の条件count <= 5
が真である間、ループ内の処理が繰り返されます。
出力:
カウント: 1
カウント: 2
カウント: 3
カウント: 4
カウント: 5
while文の注意点
- 無限ループに注意:条件が常に真になる場合、ループが永遠に続いてしまいます。
- ループ変数の更新:while文の中で必ずループ変数(この場合は
count
)を更新してください。
for文の基本
for文は、指定された回数だけ処理を繰り返す場合によく使用されます。基本的な構文は以下の通りです:
for (初期化; 条件; 更新) {
// 繰り返し実行する処理
}
先ほどのwhile文の例をfor文で書き直してみましょう:
#include <iostream>
int main() {
for (int count = 1; count <= 5; count++) {
std::cout << "カウント: " << count << std::endl;
}
return 0;
}
このプログラムは、while文の例と同じ結果を出力します。for文では、初期化、条件チェック、更新が1行で記述されるため、コードがより簡潔になります。
for文の特徴
- 初期化、条件、更新が1行にまとまっているため、ループの構造が分かりやすい。
- ループ変数のスコープをループ内に限定できる。
- 複数の変数を同時に初期化・更新できる。
while文とfor文の使い分け
一般的に、以下のような基準で使い分けます:
- while文:ループの継続条件が明確で、終了点が不定の場合
- for文:ループの回数が事前に分かっている場合、または反復処理の構造が明確な場合
実践的な使用例
例1: 数の合計を計算する
1から10までの数の合計を計算する例を、while文とfor文の両方で実装してみましょう。
while文を使用した例:
#include <iostream>
int main() {
int sum = 0;
int i = 1;
while (i <= 10) {
sum += i;
i++;
}
std::cout << "1から10までの合計: " << sum << std::endl;
return 0;
}
for文を使用した例:
#include <iostream>
int main() {
int sum = 0;
for (int i = 1; i <= 10; i++) {
sum += i;
}
std::cout << "1から10までの合計: " << sum << std::endl;
return 0;
}
両方のプログラムとも、同じ結果(合計55)を出力します。for文を使用した方が、ループの構造がより明確になっていることがわかります。
例2: ユーザー入力を受け取る
ユーザーが「終了」と入力するまで、入力を受け付けて表示し続けるプログラムを作成してみましょう。この場合、while文の方が適しています。
#include <iostream>
#include <string>
int main() {
std::string input;
while (true) {
std::cout << "何か入力してください(「終了」で終わります): ";
std::getline(std::cin, input);
if (input == "終了") {
break;
}
std::cout << "入力された文字列: " << input << std::endl;
}
std::cout << "プログラムを終了します。" << std::endl;
return 0;
}
このプログラムでは、無限ループ(while (true)
)を使用し、break
文でループを抜けています。ユーザーの入力が予測不可能なため、while文の使用が適しています。
例3: 配列の処理
配列の要素を処理する場合、for文が非常に便利です。以下は、配列の各要素を2倍にする例です:
#include <iostream>
#include <array>
int main() {
std::array<int, 5> numbers = {1, 2, 3, 4, 5};
std::cout << "処理前の配列: ";
for (int i = 0; i < numbers.size(); i++) {
std::cout << numbers[i] << " ";
}
std::cout << std::endl;
for (int& num : numbers) {
num *= 2;
}
std::cout << "処理後の配列: ";
for (int num : numbers) {
std::cout << num << " ";
}
std::cout << std::endl;
return 0;
}
この例では、3つの異なるfor文を使用しています:
- 従来の添字ベースのfor文
- 範囲ベースのfor文(C++11以降)で、各要素を変更
- 範囲ベースのfor文で、各要素を表示
出力:
処理前の配列: 1 2 3 4 5
処理後の配列: 2 4 6 8 10
高度な使用法
do-while文
while文の変種として、do-while文があります。これは、条件をループの最後でチェックするため、最低1回は処理が実行されることが保証されます。
#include <iostream>
int main() {
int num;
do {
std::cout << "1から10までの数字を入力してください: ";
std::cin >> num;
} while (num < 1 || num > 10);
std::cout << "入力された数字: " << num << std::endl;
return 0;
}
この例では、ユーザーが正しい範囲の数字を入力するまで、入力を求め続けます。
ネストしたループ
ループの中に別のループを入れることで、より複雑な処理を実現できます。以下は、掛け算の表を生成する例です:
#include <iostream>
#include <iomanip>
int main() {
for (int i = 1; i <= 9; i++) {
for (int j = 1; j <= 9; j++) {
std::cout << std::setw(4) << i * j;
}
std::cout << std::endl;
}
return 0;
}
このプログラムは、1から9までの掛け算の表を表示します。外側のループが行を、内側のループが列を制御しています。
C++のwhile文とfor文は、プログラミングにおける基本的かつ重要な構文です。これらを適切に使用することで、効率的で読みやすいコードを書くことができます。初心者の方は、まずは基本的な使い方を理解し、徐々に複雑な例に挑戦していくことをお勧めします。実際のプログラミングでは、問題の性質に応じて適切なループ構文を選択することが重要です。
練習を重ね、様々な状況でwhile文とfor文を使用することで、より柔軟なプログラミングスキルを身につけることができるでしょう。例えば、ファイルの読み込み、データ処理、簡単なゲームの作成など、実際のアプリケーション開発を想定した練習を行うことをお勧めします。
ループ構文の理解と適切な使用は、効率的なアルゴリズムの実装につながります。C++プログラミングの奥深さを探求し、より複雑な問題解決に挑戦していってください。継続的な学習と実践を通じて、プログラミングスキルを向上させることができるでしょう。
コメント