for文


for文を使うと希望の回数だけ繰り返して実行ができます。

ソースコード

for (i = 1; i < 10; i++){
  文1;
  文2;
  ...
}

  1. 初期設定式は「i = 1」です。これは、最初のみ評価されます。
  2. このとき継続条件式(i < 10)は真です。
  3. 条件式が真なので文1,文2が実行されます。
  4. 再設定式が評価されます(まだ1増えない)。
  5. 次に条件が評価されます(iは1増えて2となる)。
  6. 条件式が真なので文1,文2が実行されます。
  7. 再設定式が評価されます(iは2のまま)。
  8. 条件式が評価されます(iは3になる)。
  9. 条件式は偽なので文1,文2は実行されません。


ソースコード

源文件
  1|/* for01.c */
  2|                                                                            
  3|#include <stdio.h>
  4|
  5|int main(void)
  6|{
  7|  int i;
  8|
  9|  for(i = 1; i < 10; i++){
 10|    printf("%d回目の繰り返しです\n", i);
 11|  }
 12|  return 0;
 13|}

実行結果

1回目の繰り返しです
2回目の繰り返しです
3回目の繰り返しです
4回目の繰り返しです
5回目の繰り返しです
6回目の繰り返しです
7回目の繰り返しです
8回目の繰り返しです
9回目の繰り返しです


次のプログラムがどのように動作するが予想してみて下さい。

ソースコード

源文件
  1|/* for02.c */
  2|
  3|#include <stdio.h>
  4|
  5|int main(void)
  6|{
  7|  int i;
  8|
  9|  for (i = 0; i <= 20; i += 2){
 10|    printf("i = %d\n", i);
 11|  }
 12|  return 0;                                                                 
 13|}

実行結果

i = 0
i = 2
i = 4
i = 6
i = 8
i = 10
i = 12
i = 14
i = 16
i = 18
i = 20


さて、for文の中にさらにfor文を書くことができます。それはどんな順番で繰り返しが起こるかということです。実験してみましょう。

ソースコード

源文件
  1|/* for03.c */                                                               
  2|
  3|#include <stdio.h>
  4|
  5|int main(void)
  6|{
  7|  int i, j;
  8|
  9|  for(i = 0; i < 4; i++){
 10|    printf("外側のfor文%d回目\n", i);
 11|
 12|    for(j = 0; j < 2; j++){
 13|      printf("\t内側のfor文%d回目\n",j);
 14|    }
 15|  }
 16|  return 0;
 17|}

実行結果

外側のfor0回目
    内側のfor0回目
    内側のfor1回目
外側のfor1回目
    内側のfor0回目
    内側のfor1回目
外側のfor2回目
    内側のfor0回目
    内側のfor1回目
外側のfor3回目
    内側のfor0回目
    内側のfor1回目

外側のfor文で、iは0から3まで1ずつ増加します。それについて内側のfor文で、jが0から2まで回ります。



for文を使って、コサインの値を求まります。cos関数を使うには math.h をインクルードする必要があります。

ソースコード

源文件
  1|/* cos01.c */                                                               
  2|
  3|#include <stdio.h>
  4|#include <math.h>
  5|
  6|int main(void)
  7|{
  8|  int i, j, genbun = 5;
  9|  double rad, cosvalue, pai = 3.1415926;
 10|
 11|  printf("角度\tcos値\tイメージ\n");
 12|
 13|  for(i = 0; i < 60; i++){
 14|    printf("-");
 15|  }
 16|
 17|  for(i = 90; i >= 0; i-= genbun){
 18|    rad = (pai * i) / 180;
 19|    cosvalue = cos(rad);
 20|    printf("\n%2d\t%f ", i, cosvalue);
 21|    for(j = 1; j <= (int)(cosvalue * 40); j++){
 22|      printf("*");
 23|    }
 24|  }
 25|  printf("\n");                                                             
 26|  return 0;
 27|}

実行結果

角度     cos値    イメージ
------------------------------------------------------------
90      0.000000 
85      0.087156 ***
80      0.173648 ******
75      0.258819 **********
70      0.342020 *************
65      0.422618 ****************
60      0.500000 ********************
55      0.573576 **********************
50      0.642788 *************************
45      0.707107 ****************************
40      0.766044 ******************************
35      0.819152 ********************************
30      0.866025 **********************************
25      0.906308 ************************************
20      0.939693 *************************************
15      0.965926 **************************************
10      0.984808 ***************************************
 5      0.996195 ***************************************
 0      1.000000 ****************************************


for文を3回つかっています。最初のfor文(13行目)でprintfを使って「-」を60回出力しています。次のfor文(17行目)では、iが90から0になるまで毎回5ずつ減少させています。さらに、このfor文の中にさらにfor文(21行目)がある点に注意して下さい。これで、cosvalue に対応した数だけ「*」印が出力されます。まし、cosvalue が1.0なら「*」は40個出力されます。

Chapter4 @ C言語目録 @ HomeWork List @ 昭亮's Homepage