C言語入門 第5回 ループ(for文)
2014年10月より個人の方を対象に、Study C無料提供を開始しました。
C言語を勉強中の方は、学習・教育に最適なC言語インタープリタのStudy Cを使ってみてください(個人の方は無料です)。
大学・高専・高校などの教育機関での採用実績も多数あるロングセラー商品Study Cが、個人向けに無料提供を始めました。
インタープリタの手軽さに加え、ゲームや3Dタートルグラフィックで楽しく勉強したりと、C言語の学習を強力にサポートします。
また、このようなボタンの用意されているページでは、掲載しているプログラムをStudy Cに直接ロードし実行したりすることができます。
Study C無料利用についての詳細は、このページを参照してください。
プログラムでは同じ内容を繰り返し実行させることがあります。C言語には、
このような繰返し(ループ)のための方法が何通りかありまが、その中のforループに
ついて説明します。
for (;;) { 繰り返し実行したい内容 }
forループを使ってprintfでtestという文字を繰り返し表示させてみましょう。
***注意*** このプログラムはただ見ていると永久に停止しません。動作を確認したら F2キー(Abort)でプログラムを強制終了させてください。
main() { for (;;) { printf("test "); } }
test test test test test test test test test test test test test test test test test test test test test test test test test tes t test test test test test test test test test test test test te st test test ....
このプログラムを実行すると、画面にtestという文字が繰り返し表示されます。 これを確認したらF2キー(Abort)を押してプログラムを強制終了させてください。 このプログラムは強制終了させない限り文字列"test "を表示し続けます。
前の例のように、繰り返しが無限に続いてしまったのではあまり利用価値がありません。 普通は何回ループさせるかを指定した形で使用します。最も一般的なforループの形式は 次のようになります。
for (変数 = 0; 変数 < 繰り返しの回数; 変数++) { 繰り返し実行したい内容 }
この形式で変数++という式の新しい表現方法がでてきましたが、これは変数の内容を 1増加させるものです。たとえば変数iの内容が10のときにi++を実行すると、変数iの 内容は11に変化します。また、これは+, =を使って次のように表現することもできます。
変数 = 変数+1
変数名をiとすればi = i+1となります。数学的な表現ではありえない形ですが、 プログラムではiを入れ物と考え、その中の値に1を加えた値を再びiという入れ物に 格納するという意味で使われています。このi = i+1という表現はよく使われるので、 C言語ではこれを簡単にi++とすることも可能にしてあります。
前の例を変更して、20回だけ表示させるプログラムを作ってみましょう。main() { int i; for (i = 0; i < 20; i++) { printf("test "); } }
test test test test test test test test test test test test test test test test test test test test
変数名としてはiを使用しています(for文の中で使う変数名は習慣的にiやnを使います)。 このプログラムを実行するとtest test ...と20回表示されます。
2番目の形式をもう少し詳しく見てみましょう。for文の中には3個の式が使われてい ます。変数の内容は1番目の式(変数 = 0)によって0にセットされ、1回のループ毎に 3番目の式(変数++)によって1ずつ増加されていきます。そして、条件(2番目の式) が満たされなくなると繰り返しが終了されます。
ループ内で変数の内容が変化していく様子を表示させてみましょう。
main() { int i; for (i = 0; i < 10; i++) { printf("%d ", i); } }
0 1 2 3 4 5 6 7 8 9
このプログラムを実行すると、1回のループ毎にiの値が増加しながら0, 1, 2, 3, ..., 9と 表示されます。
また、for文の1番目と3番目の式は、次のようにfor文の外に書くこともできます。
main() { int i; i = 0; for (; i < 10;) { printf("%d ", i); i++; } }
0 1 2 3 4 5 6 7 8 9
for文の1番目の式はループを開始するときに1回だけ実行されるので、for文の直前に
書かれたものと同じ意味になります。3番目の式は1回のループ毎に実行されるので、
繰り返し実行したい内容の最後に書いたものと同じ意味になります。また、この例で
もわかるように、for文の3つの式はどれも省略することができ、2番目の条件を省略
したい場合は形式7と同じで無限ループになります。
for文の使い方を2つの形式で固定して説明しましたが、for (i = 1; i < 20; i++)や
for (i = 10; i <= 25; i++)と書くこともできます。最初の例は、iが1から19まで1ずつ
変化して19回のループが行われ、次の例は、iが10から25まで1ずつ16回のループが
行われます。
しかし、このようにいろいろな形式の書き方をしていると、ループの回数が
解らなくなるので、最初のうちは1つのパターンに統一しておいたほうが良いでしょう。
変数nの値を繰り返し回数として、その数だけ*印を表示するプログラムを作って みましょう。たとえば、nが10の場合は10個の*印が表示されます。
main() { int i, n; n = 10; for (i = 0; i < n; i++) { printf("*"); } printf("\n"); }
**********
nの値を40にすれば'*'が40個表示されます。このような表示を利用すれば、
棒グラフを描くことができます。
この例を変更して、変数nの値より1つ少ない数(n-1個)の空白を表示して最後に'*'を
1つ表示するプログラム(つまりn文字目の位置に*印を表示するプログラム)を作って
みましょう。
main() { int n, i; n = 10; for (i = 0; i < n-1; i++) { printf(" "); } printf("*\n"); }
*
変数iを0から9まで変化させ、i、i*i(iの2乗)、i*i*i(iの3乗)の結果を表示する プログラムを作ってみましょう。
main() { int i; for (i = 0; i < 10; i++) { printf("%d,%d,%d\n", i, i*i, i*i*i); } }
0,0,0 1,1,1 2,4,8 3,9,27 4,16,64 5,25,125 6,36,216 7,49,343 8,64,512 9,81,729