預金を月ごとに複利計算するプログラムを使って、ループ(繰り返し)構文、「for」文を説明します。その前に、ループをやると無限ループといってループ処理から抜けられなくなることがあるので対策を先に書いておきます。ループ処理に限りませんが、プログラムを途中で強制終了させたい時は「Ctrl + c」で終了できます。重要ですので覚えておいてください。ではこのセクションのソースを示します。
/*01*/ #include <stdio.h>
/*02*/
/*03*/ main()
/*04*/ {
/*05*/ float principal; /*元金*/
/*06*/ float months; /*月数*/
/*07*/ float y_rate; /*利率(年利)*/
/*08*/ float m_rate; /*合計*/
/*09*/ int count;
/*10*/
/*11*/ printf(" 元金を入力してください ---------</C> ");
/*12*/ scanf("%f", &principal);
/*13*/ printf(" 利率(年利:%%)を入力してください -> ");
/*14*/ scanf("%f", &y_rate);
/*15*/ printf(" 何ヶ月の預金ですか? -----------</C> ");
/*16*/ scanf("%f", &months);
/*17*/
/*18*/ m_rate = y_rate / 12; /*年利から月利を計算*/
/*19*/
/*20*/ for(count = 0; count < months; count++)
/*21*/ principal += principal * (m_rate / 100);
/*22*/
/*23*/ printf("\n %.1f 円に増えます。\n", principal);
/*24*/
/*25*/ return 0;
/*26*/ }
for(count = 0; count < months; count++)
principal += principal * (m_rate / 100);
/*書式
for([1]条件式用変数の初期化; [2]条件式; [3]条件式用変数値の増加) 実行文;
*/
まず、[1]で条件式用の変数を初期化します。普通は「i = 0(上では count = 0)」としますが、必要に応じて好きな値にしてかまいません。この初期化は for 文に入った1番最初だけ行なわれます。
次に[2]で条件の判断をし、それが「true」ならば、ループ処理を続け、「false」ならばループ処理を抜けます。この条件式も自由(「i <= 10」のよう)にしてかまいません。例えば
/*** パターン1 ***/ for(i = 1;i <= 10;i++) /*** パターン2 ***/ for(i = 0;i < 10;i++)
[3]では、条件式用の変数値を増加させます。ここは、初期化と違いループされるごとに行なわれます。(ただし、一番最初のループ時は、初期化で「0」にされるため飛ばされます。)また、インクリメント演算子以外にも好きな方法で値をかえてかまいません。例えば「i += 2」「i--」などとしてもかまいません。ですが、「i = 10」などとやってしまうといつまでたっても条件式用変数の値が変わらず、無限ループになってしまうので注意してください。また、「i++」「++i」の違いですがこれは、まず条件式の判定してから条件式用変数の値を変更するので、どちらにしても変わりはありません。
if 文と同様ブロックを使うことで複数の実行文を for 文で実行させることができます。それから、条件式用の変数を実行文中で使うときは注意してください。
for(count = 0; count < 10; count++){
count += 5;
printf("count = %d\n", count);
}
ところで、[1][2][3]の各項目は省略することが出来ます。例えば、for 文に入る前に条件式用の変数を初期化してあれば[1]を省略したり、for 文の中で条件式用の変数を意識的に変更したい場合は[3]を省略しても良いでしょう。また、[2]の条件処理を省略したり、「1(真)」と書いたりすれば無限ループといって、永久にグルグル処理を続けます。しかし、これらのような応用的な使い方は次にやる while 文でほとんど代用できるので、for 文はできるだけ「n 回処理をする」ために使いましょう。ちなみに、無限ループから抜けるための方法は後ほど書きますので参考にして下さい。もし、やってしまったらとりあえず「Ctrl + c」で強制終了させてください。
それと for 文の中に for 文を入れても(好きなだけ)かまいません。また、そのような場合を
C99 では[1]の部分で条件式用の変数を宣言することができます。例えば
for(int count = 0; count < 10; count++){
printf("count = %d\n", count);
}
{
int count;
for(count = 0; count < 10; count++){
printf("count = %d\n", count);
}
}
変換文字の使い方について復習しておきます。
printf("\n %.1f 円に増えます。\n", principal);
%-x.y(変換文字) 例:%6.2f :%-5d
自然数 x を読み込んで、1 から x までの総和を求めてください
for 文による二重ループを利用して九九表を表示させてください。
#include <stdio.h>
main()
{
int i, x, wa = 0;
printf("整数値を入力して下さい。 ->");
scanf("%d", &x);
for(i = 1; i <= x; i++){
wa += i;
}
printf("1~%d までの和 -> %d\n", x, wa);
return 0;
}
外側のループの変数を「行」、内側のループの変数を「列」として、その積を利用する。
#include <stdio.h>
main()
{
int i, j;
for(i = 1; i <= 9; i++){
for(j = 1; j <= 9; j++){
printf("%2d ", i * j);
}
printf("\n");
}
return 0;
}