第五回-01 for 文による繰り返し

同じ命令を何度も繰り返す際に用いられるのが「for 文」である。
覚えているかはさておき、1年生後期に学んだ VBA (Visual Basic for Applications) でも、一度For 文を学んでいる。
それと考え方はほぼ同じだが、記法 (文法) が異なるのでそれを学んで行く。
「for 文」は同じ命令を何度も繰り返す際に用いられる、というわけなので、
例えば、「『こんにちは』と 10 回表示するプログラム」から話を始めよう。
意味のない例だと思うかもしれないが、これを理解できないと先に進めない。

C++ で「『こんにちは』と 10 回表示するプログラム」を実現すると以下のようになる。

for(int i=0 ; i<10 ; i++){
	std::cout << "こんにちは\n";
}

上記のプログラムを実行するには、「第一回-03 初めての C/C++ プログラミング(コンソールアプリケーション編)」を参考に
コンソールアプリケーションのプロジェクトを作成し、冒頭に

#include <iostream>

を記述してから main 関数内にプログラムを記述すれば良い。実際に動作を確認してみよう。
下記のように「こんにちは」が10回表示されたはずである。

こんにちは
こんにちは
こんにちは
こんにちは
こんにちは
こんにちは
こんにちは
こんにちは
こんにちは
こんにちは

このプログラムで重要な部分は「for(int i=0 ; i<10 ; i++){」のカッコの中身である。 簡単に解説すると

int i=0 10回の回数を数えるカウンタとなる変数の初期化。初期化する値は 0 でなくとも構わない。
ここで定義した変数 i は for 文のコードブロック内で参照できる。
i<10 いつまで for 文を繰り返すか、を示す条件。ここでは「i が 10 より小さい間は繰り返す」
という条件になっており、結果的にはi=0~9 の10 回繰り返すことになる。
i++ カウンタとなる変数 i を更新する方法を示している。for 文の中の命令を一度実行するたびに実行される。
ここでは第四回-02 C/C++ における演算子で学んだインクリメント演算しを用いているので、
実行ごとに i が一増える。

for 文の実行中に回数を数えるカウンタ i という変数がどのように変化するのかを知ることが、for 文の理解に重要である。
そのため、for文の内部における画面表示に、i の値も追加してみよう。

for(int i=0 ; i<10 ; i++){
	std::cout << i << "回目のこんにちは\n";
}

実行した結果は以下のようになったはずである。

0回目のこんにちは
1回目のこんにちは
2回目のこんにちは
3回目のこんにちは
4回目のこんにちは
5回目のこんにちは
6回目のこんにちは
7回目のこんにちは
8回目のこんにちは
9回目のこんにちは

i が 0~9 の 10 回変化していることが表示されている。
先程の表で述べられているように、これを決めているのが「int i=0」、「i<10」、「i++」の3つなのである。

C/C++ に慣れていないうちは、「なぜ 1~10 の10回ではなく 0~9 の10回なんだ?」と思うかも知れない。
今は不自然に思えるかもしれないが、C/C++ の勉強を先に進めると「0 から数を数える」のは自然な考え方であると考えるようになると思う。
似た例として、「配列の添字は 0 から始まる」ことをいずれ学ぶ。

とは言え、「1~10 の10回」でプログラムを書くことは可能である。以下の通り、「int i=1」、「i<=10」への変更がポイントである。
なお、=を含む不等号「<=」はここで初めて登場した (本ページの末尾で改めて紹介する)。

for(int i=1 ; i<=10 ; i++){
	std::cout << i << "回目のこんにちは\n";
}

さらに、インクリメントの部分をデクリメント「i--」にすれば、以下のようなfor文も可能である。
この場合、i が 10、9、 ~ 1 と減りながら計10回命令が実行される。

for(int i=10 ; i>0 ; i--){
	std::cout << i << "回目のこんにちは\n";
}

ただし、それが必要ない場合に無理に複雑な書き方をすべきではない。
「0 から 9 の 10 回」という書き方が最も多く使われていると思う。


条件の書き方

先程、=を含む不等号「<=」を初めて紹介した。
for 文の終了条件を記述する際に用いることが可能な関係演算子の一覧を以下に挙げる。
いずれ必要になることもあると思う。

演算子 意味 備考
> 大きい
>= 以上
< 小さい
<= 以下
== 等しい C/C++ では「代入」は「=」、「等しい」は「==」、のように区別されているので注意。
Visual Basic ではどちらも「=」で区別していなかった
!= 等しくない C/C++ では「!」は「否定」の意味がある。



for 文を用いて整数の和を求めよう

for 文を用いた例題として、もう少し意味がありそうな「整数の和を求める」という課題を考えてみよう。
ここまでの内容と、プログラミング言語における変数の性質を理解していれば簡単なはずである。

例として、1 から 10 の整数の和を求めるプログラムが以下である。

int s=0;

for(int i=1 ; i<=10 ; i++){
	s=s+i;
}
			
std::cout << "sの値は" << s << "です\n";

for 文の仕組みにより、i が 1 から 10 まで変化するわけであるから、
「s=s+i;」という命令により、i を s に足し込んでいっているのである。

「s に i を足した結果を再び s に格納する」という命令が分かりにくいという学生は、
C/C++ における演算子」の冒頭にある「x=x+1」を解説した図を良く見ること。



←第四回課題第五回-02 if 文および if~else 文→

非情報系学生のための C/C++ 入門に戻る