コンピュータは計算速度が速いので、大量の計算をわずかな時間で行うことができます。
同じような計算を繰り返し処理させるのにもっとも有力な方法はループ処理を行うことです。初期状態と継続条件を指定し、継続条件を満たしている間、処理を行うというものです。方法は3種類あります。
方法 | 判定 | 初期条件設定 | 継続条件設定 | 継続時処理設定 |
---|---|---|---|---|
for | 前方判定 | ○ | ○ | ○ |
whole | 前方判定 | × | ○ | × |
do - while | 後方判定 | × | ○ | × |
for([初期状態];[継続条件];[ループするごとに行われる処理]){ [連続して行う処理] }
forでは初期状態、継続条件、ループするごとに行われる処理を指定します。継続条件を満たしている間、中括弧内部の処理を行います。この3条件はあってもなくても構いません。1つの条件もない、
for(;;){ [処理] }
も、文法上OKです。この場合、無限ループになります。無限ループを抜けるにはbreakを使用しますが、これは条件分岐のページで扱います。
初期状態には代入文を書きます。Page 2でやった「a = 2」などです。ループ変数(ループ数をカウントする変数)の初期値を設定することが多いようです。
継続条件には「○○以上」などの条件を指定します。条件式は次の通りです。
条件式 | 意味 |
---|---|
a == b | aがbと同じ場合 |
a != b | aがbと異なる場合 |
a < b | aがbより小さい場合 |
a > b | aがbより大きい場合 |
a <= b | aがb以下の場合 |
a >= b | aがb以上の場合 |
ループするごとに行われる処理にはループ変数の加算処理(a++など)を入れることが多いようです。(a++はa=a+1の意味でした。Page 2参照。)
次のプログラムは1から10までの和を計算するプログラムです。
#include <stdio.h> int main(){ int a; /* ループ変数 */ int b; /* 答え */ b = 0; for(a = 1; a <= 10; a++){ b += a; } printf("Ans. %d\n",b); return 0; }
aをループ変数として使用し、aが10以下である場合に繰り返し計算します。aの初期値は1、ループするごとに1加算されますので、aは1, 2, 3, ... 10と変化していき、11になった時点でループの外へ抜けます。
ループの内部では計算の答えの変数bにaが加算されます(「b += a」は、「b = b + a」の意味でした : Page2)。aの値は1, 2, 3, ... と変化していきますので、bに加算される値も変化していきます。ループ1回目は1、2回目は2 ...。その結果、b = 1 + 2+ ... + 10の計算を行うことができます。
ループの外では計算結果の表示を行います。画面出力にはprintf、整数型の変数を表示させているので、「%d」を使用しています。
1から10までの足し算結果は55と、値を覚えている人も多いと思いますので今度は少しひねってみます。どんな計算をしているか、答えは何になるのか、考えてみてください。
#include <stdio.h> int main(){ int a; /* ループ変数 */ int b; /* 答え */ b = 0; for(a = 1; a <= 1000; a+=7){ b += a; } printf("Ans. %d\n",b); return 0; }
初期状態は「,」区切りで、複数設定できます。ループごとに行われる処理も同じです。
継続条件を複数指定する場合は、「||」(or)、「&&」(and)を使用します。
記述 | 意味 |
---|---|
a == b || c == d | aとbが同じ、または、cとdが同じ場合 |
a == b && c == d | aとbが同じ、かつ、cとdが同じ場合 |
#include <stdio.h> int main(){ int a; /* ループ変数 */ int b; /* 答え */ for(a = 1, b = 0; a <= 1000 && b < 60000; a+=7){ b += a; } printf("Ans. %d\n",b); return 0; }
while([継続条件]){ [処理] }
whileは継続条件のみを指定します。forで初期状態と、ループ時の処理を設定しないのと同じことを行います。
#include <stdio.h> int main(){ int b; /* 答え */ while(b < 20000){ b += ( b / 2 ); } printf("Ans. %d\n",b); return 0; }
do{ [処理] }while([継続条件])
継続条件をループ後に判定します。一度は必ずループ内を通ります。
#include <stdio.h> int main(){ int b; /* 答え */ do{ b += ( b / 2 ); }while(b < 20000) printf("Ans. %d\n",b); return 0; }
処理の途中でループを抜ける方法など(break, continue)は次のページで扱います。