繰り返し構造の基本


まずは、繰り返し(ループ)の基本的な構造を復習していきます。

1.繰り返しの基本


プログラミング言語で繰り返し構造を表現するには、単に「○回繰り返す」という命令を書くのではなく、繰り返しごとに変化していく変数(=カウンタ)を用いて繰り返しを表現するのでした。

具体的には、カウンタの初期化(0や1などを代入する)、条件式の設定(どこまで繰り返すかを決める)、カウンタの更新(カウントアップやカウントダウン)の3つの基本的な処理で構成されています。

今回は、これらの処理の構成が分かりやすい「while文」で見ていきます。

 

例えば、「1~5までの整数を出力する」プログラムは、以下のように書けました。


繰り返しの基本:パターン1(C)

#include <stdio.h>
int main(void){
    int i;
    i = 1;
    while(i <= 5){
        printf("%d", i);
        i++;
    }
    printf("\n");
    return 0;
}

繰り返しの基本:パターン1(Java)

public class Loop1 {
    public static void main(String[] args) {
        int i;
        i = 1;
        while(i <= 5){
            System.out.print(i);
            i++;
        }
        System.out.println();
    }
}


実行結果

12345

 

まずカウンタに1を代入して初期化し、while文で5以下という条件をつけ、出力の後にカウントアップでカウンタを更新しています。

これら3つの処理を1文にまとめたのが「for文」と言えますね。

 

文法的なことですが、カウンタの変数名にはよく「i」が使われます。単純に「~回繰り返す」場合は特にそうです。

公式で決まっているわけではありませんが、慣例として覚えておいてください。

2.カウンタの初期値


上記のパターン1はカウンタの初期値が1の書き方でした。なので、n回繰り返したい場合は、n以下という条件で回しています。

一方で、繰り返し処理の部分5行分(5~8行目)を以下のように書いても、実行結果は同じになります。


繰り返しの基本:パターン2(C)

    i = 0;
    while(i < 5){
        printf("%d", i+1);
        i++;
    }

繰り返しの基本:パターン2(Java)

        i = 0;
        while(i < 5){
            System.out.print(i+1);
            i++;
        }


上記はカウンタの初期値が0の書き方です。これでn回繰り返したい場合は、n未満という条件で回していきます。

更に注意したいのは出力の部分。初期値が0の場合は0~4で繰り返されるので、+1して出力する必要があります。

 

今回の「1~5までの整数を出力する」プログラムでは、パターン1の初期値が1の場合の方が分かりやすいですね。

しかし、実際のプログラムでは、パターン2の初期値が0の場合の方が良く使われます。

 

これは、繰り返し処理では配列を扱うことが多いためです。

配列はほとんどの言語で、添え字が0から始まり、配列の長さ - 1で終わります。ゆえに、カウンタの初期値を0にした方が、処理がとても簡単になるのです。

 

とりあえず、初期値が0の場合と1の場合、どちらも理解できるようにしておくのが良いと思います。

3.繰り返しの様々な書き方


 カウントアップのタイミングを変えれば、様々な書き方をすることができます。

インクリメントの性質等の応用的な文法要素が関わってくるので、興味のある人は見てみてください。

下記は、全て先ほどと同じく「1~5までの整数を出力する」プログラムです(Javaは省略)。


繰り返しの基本:パターン3(C)

    i = 1;
    while(i <= 5){
        printf("%d", i++);
    }

繰り返しの基本:パターン4(C)

    i = 0;
    while(i < 5){
        i++;
        printf("%d", i);
    }

繰り返しの基本:パターン5(C)

    i = 0;
    while(i < 5){
        printf("%d", ++i);
    }


覚えていてほしいのは、ある処理を実現するプログラムやアルゴリズムは無限にあるということです。

その中でも、無駄がなく、分かりやすいプログラムを書くように心掛けることが重要です。