PC Technique logo

小学校高学年から中学生を対象にした、無料公開中のC言語の入門講座です。

【12時間目】whileよりも更に便利 ループのfor文

前回は、同じ処理を、条件が正しくなるまでずっと続ける「ループ」というものを学習しました。また、そのループを実現するために、「while」文がある、ということも学習しました。

同時に、「while」文と、もう一つ、「for」文がある、ということも書いてありました。では、for文とは一体何なのでしょうか。

「for」文とは?

「for」の読み方

まず、forの読み方ですが、これは「フォー」と呼びます。for文は「フォーぶん」となります。

昔(?)、レイザーラモンHGという芸人さんがいましたが、知っている方はこれに引っ掛けて覚えると良いかもしれません。気になる方は、 youtubeででも調べていただければ、 たくさん出てきます。

「for」の使い方

while文と同じところは、条件式②がtrueになるまで、ひたすら③の部分の処理を繰り返します。

そしてwhile文と異なるところは、forを始める前にかならず実行される初期化①と、毎回のループの最後に実行される処理④を書くことができる、というところです。

ただ、それだけです。なぜ、それで便利になるの?と思うかと思います。これは実際にコードを書いてみるとわかりやすいです。

前回のループをforで書き直そう

前回の時間のループは、「Hello」と画面に10回表示する、といったものでした。

#include <stdio.h>

int main(void){
	int i = 1;
	while(i <= 10){
		printf("%d回目のHelloです\n", i);
		i = i + 1;
	}
}

さて、ここで前回のコラムをもう一度確認します。

ループ用の変数はよくiを使用します。また、今回のプログラムではわかりやすさを重視して、初期値を1に、そして10以下の間ループするとしましたが、これから先は「0スタート」に慣れていく必要があります。初期値を0にして、10未満の間ループする、という書き方がよく出てきます。これは、後々勉強する「配列」を扱うときに便利だからです。

つまり、0スタートで10回ループしたいので、iが「0、1、2、3、4、5、6、7、8、9」、つまり10より小さい時にループし、iが10になったら終わる、という風に書くと良さそうです。いったん、前回のwhile文をその方式に直してみます。

#include <stdio.h>

int main(void){
	int i = 0;	//最初にカウント用の変数iに0を入れて、
	while(i < 10){	//iが10より小さい間ループを続ける
		printf("%d回目のHelloです\n", i);
		i = i + 1;	//iの数を1増やして、頭に戻る
	}
	//iが10になったら終わる
}

さて、ではこれをfor文へ書き直すとこうなります。

#include <stdio.h>

int main(void){
	for(int i = 0; i < 10; i = i + 1){
		printf("%d回目のHelloです\n", i);
	}
}

たったこれだけで、前回と同じように、「Hello」が画面に10個表示されます。1つづつ見ていきましょう。

まず、for文の1つ目の場所「初期化」に、int i = 0と書いてあります。ループを始める前に、iという変数を用意して、0を入れておいてねという意味です。

次、for文の2つめの場所「条件式」に、i < 10と書いてあります。これはwhile文と全く同じで、iが10より小さい間だけ、ループを続けてねという意味です。

for文の3つ目の場所「毎ループ最後の処理」に、i = i + 1と書いてあります。毎回の最後に、iにi+1の値を入れてねという意味です。

printf文は、前回のwhileと全く同じです。

いかがでしたか?while文で書くよりも、とても簡単に、きれいに書くことができました!

このforループは、後々出てくる「配列」を扱う時に非常に便利になってきます。詳しくはまた「配列」のページにて説明しますが、大切なのは、「決められた回数だけループさせる」という処理はfor文が得意ということです。
while文を使ったループと、for文を使ったループ、2つのコードを書きました。それぞれの違いも、上に書いたとおり、なのですが、実はもう一つ違いがあります。それは、変数iの使える場所です。

while文のコードにおいて、変数iは、while文の中はもちろん、ループが終わった後にも使うことができます。しかし、for文のコードにおいて、変数iは、ループの中でしか使えません。どうしてもループの外、ループが終わった後などに使いたい場合は、int i = 0の文は、whileのコードのように、forの前に書かなければなりません。

この時間のまとめ

for文は、「フォー」と読む。

「for(はじめにやること;ループを続けるかどうか;1回のループが終わるごとに)」という風に使う

for文は「決まった回数繰り返す」時に使い、こういう使い方をすることがほとんど。形として覚えておくと良い!

for(int i = 0; i < /*繰り返す回数*/; i = i + 1){
	//何かしらの処理
}