この章では、同じ処理を繰り返すための for 文と while 文について学びます。ループ処理を使うことで、同じ処理を何度も効率よく実行できます。C言語と書き方は変わりません。
03章で学んだとおり、C++では変数を 使う直前に、意味のある初期値を与えて宣言する のが基本です。for 文に入る前に、それと深く関係する「スコープ(有効範囲)はできるだけ狭く」という考え方を確認しておきましょう。これが for の書き方に直結します。
C言語(特に古い規格)では 関数の先頭ですべての変数を宣言する 必要がありました。C++では 必要になった場所で宣言できる ため、次の利点があります。
{ } のブロックの中で宣言した変数は、そのブロックの中だけで有効です(この有効範囲を「スコープ」と呼びます)。役目が終わった変数を外に残さないことで、別の場所で誤って使う・書き換える事故や、名前の取り違えを防げます。次の for 文はその代表例です。
#include <iostream>
using namespace std;
int main() {
cout << "繰り返す回数を入力:";
int times; // 直後の cin で値が入る(入力で受け取る変数はこの形)
cin >> times;
for (int i = 1; i <= times; i++) { // i は for の中だけで有効
cout << i << "回目の処理" << endl;
}
// ここで i は使えない(for の外なので)= 役目が終わった変数が残らない
return 0;
}
ループカウンタ i はループの中でしか使いません。だから for の 初期化部で「使う直前に」「初期値 1 を与えて」宣言し、しかも「for の中だけ」に閉じ込めています。03章で学んだ宣言スタイルを、もっとも自然に実践した形です。
for (int i = 1; ...) はこの3つを全部満たした書き方です。
#include <iostream>
using namespace std;
int main() {
for (int i = 1; i <= 5; i++) {
cout << i << "回目の処理" << endl;
}
return 0;
}
int i = 1i <= 5i++#include <iostream>
using namespace std;
int main() {
int count = 1;
while (count <= 5) {
cout << count << "回目の処理" << endl;
count++;
}
return 0;
}
#include <iostream>
using namespace std;
int main() {
int count = 1;
do {
cout << count << "回目の処理" << endl;
count++;
} while (count <= 5);
return 0;
}
do-while は他のループと異なり、条件に関係なく必ず1回は実行されるという点が特徴です。// loop_basic.cpp
#include <iostream>
using namespace std;
int main() {
for (int i = 1; i <= 5; i++) {
cout << i << "回目の処理" << endl;
}
return 0;
}
sum を用意し、sum += i; でループのたびに加算します。cin >> n; でキーボード入力を受け取れます。
次のコードを実行したとき、最後に表示される数字はいくつですか?
for (int i = 1; i <= 5; i++) {
cout << i << endl;
}
i は1から始まり、i <= 5 の間繰り返します。i=5のとき最後に実行され、5が表示されます。i=6になると条件が偽になりループが終了します。
次のコードの出力として正しいものはどれですか?
int count = 1;
while (count <= 3) {
cout << count * 2 << endl;
count++;
}
do-while 文と while 文の最大の違いはどれですか?
do-while はブロックを先に実行してから条件を評価します。そのため条件が最初から偽でも、必ず1回は処理が実行されます。
次のコードを実行すると sum の値はいくつになりますか?
int sum = 0;
for (int i = 1; i <= 4; i++) {
sum += i;
}
cout << sum << endl;
sum += i はループのたびに i の値を sum に加算します。
C言語で学んだ「関数」はC++でもそのまま使えます。 ここで一度確認しておきましょう。クラスを学ぶ前に、 「クラスに属さない普通の関数」(グローバル関数) の書き方を整理します。
戻り値の型 関数名(引数の型 引数名, ...) {
// 処理
return 戻り値;
}
// 例:2つの数の大きい方を返す関数
#include <iostream>
using namespace std;
int maxValue(int a, int b) { // 関数の定義(main の前に書く)
if (a > b) {
return a;
} else {
return b;
}
}
int main() {
int result = maxValue(10, 20); // 関数の呼び出し
cout << "大きい方:" << result << endl;
return 0;
}
add」と
「挨拶を表示する関数 greet(文字列を受け取り Hello, ○○ と表示)」を作りましょう。
add(int a, int b) は int を返す。greet(string name) は戻り値なし(void)にする。
for 文は「回数が決まっている」場合に便利while 文は「条件を満たす間」繰り返したい場合に便利do-while 文は「少なくとも1回実行したい」場合に便利for 文の初期化部での宣言はその代表例