基本事項:繰り返し処理

全く同じ処理、あるいは似たような処理をある一定回数繰り返すことが、 プログラミングではよくあります。 繰り返し処理には、ここで学習するfor文、while文が あります。両方の使い方、およびfor文とwhile文の書き換えを修得してください。

for文

for文の基本構造は以下の通りです。

for (初期値;  条件式; 増減式) {

    条件式が満足されるときに実行される命令
    (命令は複数行あっても可能)

}

これだけでは想像しにくいですので、1から5までの数字を表示 させるプログラムの例を下記に示します。

for (i=1;  i<=5; i++) {

    printf("i = %d\n", i);

}

上記の「i++」は、「i += 1」「i = i + 1」と同じ意味になりますので、注意し ましょう。それでは、実行結果を下記に示します。

(実行結果)
% ./a.out
i = 1
i = 2
i = 3
i = 4
i = 5

for文における処理の流れは以下のようになります。

  1. 初期値が設定される(上記の例では、i = 1)
  2. 条件式の判定が行われ(i <= 5)、 条件式が満たされる(真)なら実行文が実行され (printf文)、 満たされなければ(偽)ならループを抜ける。
  3. 条件式が満たされ、実行文が実行された後に、増減式が実行される (i++)
  4. 条件式が満たされる間、2、3が繰り返される。

下記には、基本的なfor文を列挙しました。

1から100までの総和の計算

int i, sum=0;
 
for (i = 1; i <= 100; i++) {
    sum += i;
}

同一の文字列を10回繰り返して表示

int i;
 
for (i = 0; i < 10; i++) {
    printf("私の名前は環境花子です。\n");
}

while文

繰り返し処理を実現する別の方法には、while文もあります。 while文の基本構造は以下の通りです。

while (条件式) {

    条件式が満足されるときに実行される命令
    (命令は複数行あっても可能)

}

for文に比べて、初期値、増減式がないですので、 どこかに自分自身で記述しないと行けません。 for文の時と同様に、1から5までの数字を表示 させるプログラムの例を下記に示します。実行結果は、for文の結果と 同じになります。

****** while文での1から5までの数字を表示させるプログラム *****
i=1;
while (i<=5) {

    printf("i = %d\n", i);
    i++;
}

違いがわかったでしょうか? 初期値の設定をwhile文の前に、増減式をwhile文の 実行文の一つとして記述しています。下記にfor文でのプログラムを 再掲しますが、for文とwhile文の書き換えができるようになってください。

****** if文での1から5までの数字を表示させるプログラム *****
for (i=1;  i<=5; i++) {

    printf("i = %d\n", i);

}

breakによるループの脱出

for文でもwhile文でも繰り返し処理ができますが、ある条件を満たせば繰り返し 処理を中止したい時があります。例えば、下記の例のように、1から 順番に足していって、総和が1000を越えるときの数字を知りたいとします。 その場合には、breakを使って、繰り返し処理から抜け出し ます。

1からの総和が1000を越えるときの調査

********* if文の場合 **********
int i, sum=0;
 
for (i = 1; ; i++) {
    sum += i;
    printf("i = %d, sum = %d\n", i, sum);

    if (sum > 1000) {
        break;
    }    

}
********* while文の場合 **********
int i, sum=0;

i = 1;
while (1) {
    sum += i;
    printf("i = %d, sum = %d\n", i, sum);

    if (sum > 1000) {
        break;
    }    

    i++;
}
% ./a.out
(中略)
i = 38, sum = 741
i = 39, sum = 780
i = 40, sum = 820
i = 41, sum = 861
i = 42, sum = 903
i = 43, sum = 946
i = 44, sum = 990
i = 45, sum = 1035

須ア純一 京都大学大学院 工学研究科社会基盤工学専攻 空間情報学講座
[C言語 演習問題トップページ] [須ア純一ホームページ]