Cプログラミング
 Computer >> コンピューター >  >> プログラミング >> Cプログラミング

C言語のforループ・whileループで数列パターンを順番に出力する方法

プログラミング学習の初期段階では、「ループを使って決まったパターンを順番に画面へ出力する」という練習問題がよく登場します。本記事では、C言語の for ループと while ループの両方を使って、次のようなパターンを出力する方法をわかりやすく解説します。

出力したいパターンの例

n = 5 を入力した場合、プログラムは以下のように出力します。

****************OUTPUT*****************

enter the value of n : 5

the required order is:

1. E
2. 01
3. 0011
4. 000111
5. 00001111

このパターンの規則性は次のとおりです。

  • 1行目は記号「E」のみを表示する。
  • 2行目以降は、行番号に応じて「0」が (i-1) 個、「1」が (i-1) 個並ぶ。
  • i 行目では、0 のブロックと 1 のブロックがそれぞれ i-1 回繰り返される。

forループを使った実装例

まずは最も一般的な for ループによる実装です。外側のループで行を制御し、内側の2つのループで「0」と「1」をそれぞれ出力します。

#include <stdio.h>

int main(void) {
    int i, j, n;

    printf("****************OUTPUT*****************\n\n");
    printf("enter the value of n : ");
    scanf("%d", &n);
    printf("\nthe required order is:\n\n");

    for (i = 1; i <= n; i++) {
        if (i == 1) {
            printf("%d. E", i);          /* 1行目だけ特別扱い */
        } else {
            printf("%d. ", i);
            for (j = 1; j <= i - 1; j++) /* 0 を i-1 個表示 */
                printf("%d", 0);
            for (j = 1; j <= i - 1; j++) /* 1 を i-1 個表示 */
                printf("%d", 1);
        }
        printf("\n");                    /* 行末で改行 */
    }
    return 0;
}

なお、元のコードに含まれていた clrscr()getch() は古いTurbo C固有の関数のため、GCCやClangなどの標準的なコンパイラでは動作しません。ここでは #include <stdio.h>int main(void) を使った移植性の高い形に書き直しています。

処理の流れを解説

1. 外側のforループ(行の制御)

for (i = 1; i <= n; i++) が全体の行数を管理します。変数 i は現在の行番号を表し、1からnまで1ずつ増加します。

2. 1行目の特別処理

if (i == 1) の条件により、最初の行だけ「E」という文字を出力し、それ以外の行は数字パターンに分岐させます。

3. 内側のforループ(0と1の出力)

2つ目以降の行では、j をカウンタとして使う内側のループを2回実行します。1回目で「0」を i-1 個、2回目で「1」を i-1 個連続表示することで、目的のパターンが完成します。

whileループで書き換えた場合

同じ処理は while ループでも実装できます。カウンタ変数の初期化と更新を自分で管理する点が for ループとの主な違いです。

#include <stdio.h>

int main(void) {
    int i = 1, j, n;

    printf("enter the value of n : ");
    scanf("%d", &n);
    printf("\nthe required order is:\n\n");

    while (i <= n) {
        if (i == 1) {
            printf("%d. E\n", i);
        } else {
            printf("%d. ", i);
            j = 1;
            while (j <= i - 1) {   /* 0 を i-1 個表示 */
                printf("%d", 0);
                j++;
            }
            j = 1;
            while (j <= i - 1) {   /* 1 を i-1 個表示 */
                printf("%d", 1);
                j++;
            }
            printf("\n");
        }
        i++;
    }
    return 0;
}

まとめ:ループ選択のポイント

  • forループ: 繰り返し回数があらかじめ決まっている場合に適しており、コードが簡潔になります。
  • whileループ: 繰り返し条件が動的に変わる場合に柔軟に対応できます。ただし、カウンタの初期化と更新の書き忘れに注意が必要です。
  • ネスト(入れ子)構造では、外側のループが「行」、内側のループが「列(その行の中の文字数)」を担当する、という役割分担を意識すると理解しやすくなります。

このように、二重ループの構造さえ押さえれば、ピラミッド型や数字の三角形など、さまざまなパターン出力問題に応用できます。ぜひ自分でもnの値を変えて動作を確認してみてください。

  1. Pythonのループ入門:forループとwhileループの使い方を実例付きで解説

    ループは、あらゆるプログラミング言語やスクリプト言語において欠かせない基本機能です。同じ処理を何度も繰り返し実行できることは、プログラミングの根幹を成す要素といえます。 Pythonでは、forループとwhileループの2種類を使って繰り返し処理を実現します。この記事では、具体的なコード例とともに、それぞれの使い方を詳しく解説します。 Pythonのforループ Pythonのforループはさまざまな場面で活用できます。最もシンプルで一般的な使い方は、リストなどのコレクションの要素を順番に取り出して処理する「イテレーション(反復処理)」です。 基本構文 for i in collectio

  2. Bashでループを書く方法:forループの基礎からfindコマンド活用まで

    Unixシェルを学びたい理由としてよく挙げられるのが、バッチ処理の力を手に入れることです。多数のファイルに対して一連の操作を実行したい場合、その方法の一つが、ファイルを順番に処理するコマンドを作ることです。プログラミング用語では、これを「実行制御」と呼び、最も代表的な例の一つがforループです。 forループとは、指定した各データオブジェクト(ファイルなど)に対して、コンピュータに実行させたい処理を記述した「レシピ」のようなものです。 定番のforループ まず試しやすいのは、ファイルのコレクションを解析するループです。それ自体はあまり実用的ではありませんが、ディレクトリ内の各ファイルを個別に扱