ちぇりーの館

1−10 C言語プログラミング講座 プログラムの繰り返し処理 〜for文〜



こんにちは! 今回は、繰り返し処理であるfor文について説明します。for文はif文やswitch文 と同じくらい重要で頻繁に使う構文です。今回もしっかりと抑えていきましょう。 それでは、いきなりですが、"九九の7の段を画面に表示する"プログラムを書いてみてください。

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
	printf("%d×%d = %d\n",7,1,7*1);
	printf("%d×%d = %d\n",7,2,7*2);
	printf("%d×%d = %d\n",7,3,7*3);
	printf("%d×%d = %d\n",7,4,7*4);
	printf("%d×%d = %d\n",7,5,7*5);
	printf("%d×%d = %d\n",7,6,7*6);
	printf("%d×%d = %d\n",7,7,7*7);
	printf("%d×%d = %d\n",7,8,7*8);
	printf("%d×%d = %d\n",7,9,7*9);
	printf("end\n");

	scanf("a");
	return 0;
}


皆さんは、たぶんこのようなプログラムを考えたと思います。このプログラムは、 C言語の文法として正しく問題ありません。では、今度は7の段を1000個 表示するプログラムを考えてみましょう。どうですか? 1000行のプログラムは 非常に手間がかかりそうですね。それでも、手間がかかっても何とか表示は行えそうです。 それでは、更に、『画面に入力された数字の分だけ掛け算を表示する』プログラムを考えてみましょう。 この場合、ユーザーがどの程度の数字を入力するのか検討がつきませんので、この方法でプログラムを書く事は 非常に難しくなります。  そこで、for文の登場です。for文は、似たような処理を繰り返し行いたい場合に使用します。 それでは、上記のプログラムをfor文を使って書き直して見ましょう。

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
	int i;
	for(i=1; i<10; i++)
	{
		printf("%d×%d=%d\n",7,i,7*i);
	}
	printf("end\n");

	scanf("a");
	return 0;
}

どうですか? printfが一つだけ書かれて、すっきりと見やすい形になっています。 それでは、for文について詳しく見ていきましょう。

【for文の構造】

for文の説明

for文を使うためには、まずは数値型(int,long,short)で変数を用意します。この変数の値が、 終了条件を満たした時、繰り返し処理が終了します。for句の( 〜 )の間では、 変数の初期値、終了条件、増加値を設定します。 それでは、先ほどのプログラムをもう一度見てみましょう。

 int i;
 for(i=1; i<10; i++)
 {
   printf("%d×%d=%d\n",7,i,7*i);
 }

for文で使われる変数として、"i"が宣言されています。C言語では、慣例として繰り返し処理を行う場合は、 "i"や"j"など一文字の小文字の英語が良く使われます。初期値は、"i=1"となっており、繰り返し処理を行う場合は、 変数iが1から始まります。終了条件は、"i<10"となっているので、変数"i"が10よりも小さい間は繰り返し処理が行われます。 "i++"という表現は、"i = i+1"と同じ意味で、1回の繰り返し処理で1増加するという意味になります。

【for文の流れ】

次は、for文の処理の流れについて考えて見ましょう。

for文の処理

上記の図で示した通り、for文の一番始めの処理は、初期化処理となります。 二番目に来る処理は、終了判定となります。つまり、初期値で、 終了条件を満たす値がセットされた場合には、処理は一度も行われずにfor文が 終了します。これは、大した事ではない様に聞こえますが、初期値が想定していない 値をセットしたばかりに処理が行われずにバグが発生してしまった……、なんてことは、 良く起こる事です。初期値と終了条件は、for文を使う上でよく考えて設定しましょう。
それでは、以下にfor文のサンプルプログラムを示します。

#include <stdio.h>
#include <stdlib.h>

/*******************************/
/*       グラフを書く          */
/*******************************/
int main(void)
{
	int i,j;
	for(i=0; i<10; i++)
	{
		for(j=0; j<i; j++)
		{
			printf("*");
		}
		printf("\n");
	}

	scanf("a");
	return 0;
}

グラフの表示実行結果

どうですか? 実は、このプログラムは私が始めて作った時に躓いたプログラムです。 このプログラムを理解するためのコツは、外側のiのプログラムはいったん置いておいて 内側のfor文にだけ注目します。内側のfor文は初期値が0でかつ終了の条件が"j<i" となっています。ここで、iをいったん数字に置き換えて内部のループ処理について考えると 内側のfor文は、"*"を指定した個数だけ画面に表示する処理である事がわかります。これが十分理解できたら、 次は"i"の部分に着目します。"i"は、外側のfor文が1回ループする度に1づつ値が増えています。 また、外側のループでは、内側のfor文の後に改行文字が入っています。従って、外側の処理では、 『ループ回数分の"*"を画面に表示して改行を行う』処理である事がわかります。


 いかがでしたか? 以上で、今回の説明は終了です。プログラムは、融通が利かないので、同じ処理を 何百回、何千回と繰り返しその中で条件が一致する事を抽出する事は良く行います。その時に使われるのが 今回説明した、for文です。今回のfor文では事前にループを行う回数があらかじめ判っている時に使われます。 次回は、ループの回数がわからない場合に良く使われる繰り返し処理、while文について説明します。 前回同様、内容が判り難かったり、疑問・質問等がありましたら時間の許す限りお答えしようと思いますので どしどしメールを送ってください。でわでわ、お疲れ様でした (^_^)/

< 一覧ページへ戻る


当サイトが面白いと感じた方は、お手数ですが下記リンクをクリックしてください。
クリック毎に当ホームページの評価が上がります。ご協力お願いします!
inserted by FC2 system