【C言語】繰り返し処理の仕組みと書き方 | for, while, do-whileを使いこなす

2025年4月14日月曜日

C言語

C言語の繰り返し処理、しっかり理解できていますか? プログラミングをしていると、同じようなコードを何度も書く場面って、結構ありますよね。

この記事では、C言語プログラミングのキホンとも言える「繰り返し処理」について、特に代表的な `for`文、`while`文、`do-while`文の仕組みや書き方、そしてどんな時にどれを使えばいいのか、という使い分けのコツを、サンプルコードを動かしながら楽しく学んでいきます。

読み終わるころには、きっと繰り返し処理の達人に一歩近づいているはず!

この記事を読むと、こんなことができるようになります

  • 繰り返し処理がなぜ必要なのか、その意味がわかる
  • `for`文の書き方と使いどころがわかる
  • `while`文の書き方と使いどころがわかる
  • `do-while`文の書き方と使いどころがわかる
  • 3つの繰り返し文の違いと使い分け方がわかる
  • 繰り返し処理で注意すべき点(無限ループとか!)がわかる

さあ、一緒にC言語の繰り返し処理をマスターしていきましょう!

C言語の繰り返し処理とは?プログラムを効率化する基本

まず、そもそも「繰り返し処理」って何でしょう?

簡単に言うと、「同じ命令や一連の命令を、特定の回数や条件が満たされるまで何度も実行する」ための仕組みです。

例えば、画面に「こんにちは!」と10回表示したい場合、`printf("こんにちは!\n");` を10行書くのは、ちょっと面倒ですよね?

もし100回だったら…想像するだけで大変そうです。

そこで繰り返し処理の出番! これを使えば、「『こんにちは!』と表示する処理を10回繰り返してね」と、たった数行でコンピューターにお願いできるのです。 

コードが短くなるだけでなく、後から「やっぱり15回にしよう」と思った時も、修正箇所が少なくて済みます。これはプログラムを分かりやすく、そして管理しやすくするためにも、とっても役立つ考え方なんです。

日常生活で例えるなら、毎朝決まった時間にアラームが鳴る、とか、洗濯機がすすぎを3回繰り返す、みたいなイメージに近いかもしれませんね。

C言語の主要な繰り返し処理:for, while, do-while

C言語には、繰り返し処理を実現するための命令がいくつか用意されています。その中でも、特によく使われるのが以下の3つです。

  • `for`文 (ふぉーぶん)
  • `while`文 (ほわいるぶん)
  • `do-while`文 (どぅーほわいるぶん)

それぞれに得意なことや書き方のルールがあります。

「どれを使えばいいの?」と迷うこともあるかもしれませんが、心配ご無用!
これから一つずつ、どんな場面で活躍するのか、どうやって書くのかを詳しく見ていきましょう。

【C言語 繰り返し処理】for文の使い方:回数が決まっている繰り返し

`for`文は、特に「繰り返す回数があらかじめ決まっている」場合に便利な繰り返し文です。
「10回繰り返す」「50回繰り返す」のように、ゴールが見えている時にピッタリ。

例えば、「配列の要素を最初から最後まで順番に処理する」といった場面でよく使われます。

for文の基本的な書き方

`for`文は、こんな風に書きます。

for (初期化式; 条件式; 変化式) {
    // 繰り返したい処理
}

ちょっと複雑に見えるかもしれませんが、パーツごとに見ていくと簡単ですよ。

  • 初期化式
    • ループが始まる前に、最初に1回だけ実行される処理です。ループで使う変数(カウンター変数)を準備することが多いです。(例 `int i = 0`)
  • 条件式
    • ループを続けるかどうかを判断するための条件です。この条件が満たされている(真の)間、ループ内の処理が繰り返されます。(例 `i < 10`)
  • 変化式
    • ループ内の処理が一通り終わるたびに実行される処理です。カウンター変数の値を増やしたり減らしたりして、ループがいつか終わるように調整します。(例 `i++`)

これら3つの式をセミコロン(;)で区切るのがポイント。そして、繰り返したい処理は `{}` (波括弧) の中に書きます。

for文のサンプルプログラムと実行結果

では、実際に`for`文を使って、画面に「Hello!」と5回表示するプログラムを見てみましょう。

#include <stdio.h>

int main(void) {
    int i; // カウンター用の変数を用意

    // iが0から始まり、5未満の間、iを1ずつ増やしながら繰り返す
    for (i = 0; i < 5; i++) {
        printf("Hello! (%d回目)\n", i + 1); // 繰り返したい処理
    }

    return 0;
}

これを実行すると、こんな結果になります。

Hello! (1回目)
Hello! (2回目)
Hello! (3回目)
Hello! (4回目)
Hello! (5回目)

`i`という変数が0から始まり、1ずつ増えていき、`i < 5` という条件が満たされなくなる(`i`が5になる)まで、`printf`の処理が繰り返されているのが分かりますね。`for`文、便利でしょう?

【C言語 繰り返し処理】while文の使い方:条件が満たされている間の繰り返し

`while`文は、「特定の条件が満たされている間、処理を繰り返したい」場合に使う繰り返し文です。

`for`文のように回数が最初から決まっているというよりは、「この状態になるまで続けてね」というお願いの仕方に近いです。

例えば、「ユーザーが特定の文字を入力するまで、入力を受け付け続ける」といった処理に適しています。

while文の基本的な書き方

`while`文の書き方は`for`文よりシンプルです。

while (条件式) {
    // 繰り返したい処理
}

`()`の中にループを続けるための条件式を書きます。この条件式が満たされている(真の)間、`{}`の中の処理が何度も実行されます。

注意点として、`while`文を使う場合は、ループの中で条件式に関わる変数の値を変化させる処理を忘れないようにしましょう。そうしないと、条件式がずっと真のままになり、ループが終わらなくなってしまいます(無限ループ)。

while文のサンプルプログラムと実行結果

では、`while`文を使ったサンプルを見てみましょう。変数`count`が5より小さい間、数を表示し続けるプログラムです。

#include <stdio.h>

int main(void) {
    int count = 0; // カウンター変数を初期化

    // countが5より小さい間、繰り返す
    while (count < 5) {
        printf("count = %d\n", count);
        count++; // countの値を1増やす (これを忘れると無限ループ!)
    }

    printf("ループが終わりました。\n");

    return 0;
}

実行結果はこうなります。

count = 0
count = 1
count = 2
count = 3
count = 4
ループが終わりました。

`count`の値が0から始まり、ループ内で`count++`によって1ずつ増えていきます。そして、`count`が5になった時点で `count < 5` という条件が満たされなくなり、ループが終了します。ループを終わらせるための変化処理 (`count++`) が重要ですね。

【C言語 繰り返し処理】do-while文の使い方:最低1回は実行する繰り返し

`do-while`文は、`while`文と似ていますが、一つ大きな違いがあります。
それは、「ループ内の処理を必ず最低1回は実行してから、条件式を判定する」という点です。

`while`文は最初に条件式をチェックするので、条件によっては一度もループ内が実行されないこともあります。しかし、`do-while`文は「まずやってみて、続けるかどうかは後で判断する」という流れになります。

例えば、「ユーザーにメニューを表示して、何か入力してもらってから、入力内容に応じて処理を続けるか判断する」ような場合に便利です。

do-while文の基本的な書き方

`do-while`文は、次のように書きます。

do {
    // 繰り返したい処理 (最低1回は実行される)
} while (条件式); // ←最後にセミコロンが必要!

`do`の後の`{}`に繰り返したい処理を書き、`while`の後の`()`にループを続ける条件式を書きます。
`while (条件式)` の後にセミコロン(;)が必要なのが、`while`文との見た目の違いです。忘れやすいので注意しましょう。

do-while文のサンプルプログラムと実行結果

それでは、`do-while`文のサンプルです。変数`num`が0の間、ループを繰り返しますが、最低1回は`printf`が実行されます。

#include <stdio.h>

int main(void) {
    int num = 5; // 最初は条件を満たさない値

    do {
        printf("do-whileループ内の処理です。num = %d\n", num);
        // ここでnumの値を変える処理などを入れることが多い
        // 今回は説明のため、値は変えずに一度だけ実行されるのを確認
    } while (num == 0); // numが0ならループを続ける (今回は最初から満たさない)

    printf("ループが終わりました。\n");

    return 0;
}

実行結果:

do-whileループ内の処理です。num = 5
ループが終わりました。

最初に`num`は5なので、`while`の条件式 `num == 0` は偽(満たされない)です。しかし、`do-while`文なので、条件判定の前に`do`ブロックの中の`printf`が1回実行されていることがわかりますね。これが`do-while`文の最大の特徴です。

C言語 繰り返し処理の注意点

繰り返し処理はとても便利ですが、使い方を間違えると意図しない動きをしてしまうことがあります。特に注意したいのが「無限ループ」です。

無限ループとは、その名の通り、ループが終わることなく永遠に処理を繰り返してしまう状態のこと。プログラムが止まらなくなってしまうので、避けなければなりません。

無限ループが起こる主な原因は、以下の2つです。

  1. 条件式が常に真(満たされる)になってしまう場合
        // 例: while(1) のような書き方 (意図的な場合もある)
        int i = 0;
        while (i >= 0) { // iは0以上なので、条件は常に真
            printf("ループ中...\n");
            // iの値を減らす処理などがないと終わらない!
        }
        
  2. ループ内で条件式に関わる変数の値が変わらない場合
        int count = 0;
        while (count < 5) {
            printf("Count: %d\n", count);
            // 本来ならここに count++; が必要
        }
        // countの値がずっと0のままなので、count < 5 は常に真
        

無限ループを防ぐには、

  • ループの条件式がいつか必ず偽(満たされなくなる)になるように設計する。
  • ループの中で、条件式に関わる変数の値を適切に変化させる処理を入れる。

という点を常に意識することが大事です。
もし無限ループになってしまったら、慌てずにプログラムを強制終了させましょう(多くの環境では Ctrl + C で止められます)。そして、コードを見直して原因を探ってみてくださいね。

他にも、`for`文の初期化式や変化式を書き忘れたり、カウンター変数の扱いを間違えたりしないように、注意深くコードを書きましょう。

【まとめ】C言語の繰り返し処理を使いこなそう

今回は、C言語の繰り返し処理の基本である`for`文、`while`文、`do-while`文について、その仕組みと書き方、使い分けを見てきました。

簡単にまとめると、

  • `for`文 繰り返す回数が決まっている時に便利。初期化・条件・変化をまとめて書ける。
  • `while`文 特定の条件の間だけ繰り返したい時に使う。最初に条件をチェック。
  • `do-while`文 まず処理を1回実行してから、条件をチェックして繰り返したい時に使う。

という感じでしたね!

繰り返し処理は、プログラムを効率的に、そして分かりやすく書くために欠かせないテクニックです。最初は少し難しく感じるかもしれませんが、実際にコードを書いて動かしてみるのが一番の近道!

この記事のサンプルコードを参考に、ぜひ色々な繰り返し処理を試してみてください。
使いこなせるようになれば、あなたのC言語プログラミングの世界が、もっともっと広がりますよ!頑張ってくださいね!


【関連記事】

>> C言語とは?特徴・できること・学ぶメリット

このブログを検索

  • ()

自己紹介

自分の写真
リモートワークでエンジニア兼Webディレクターとして活動しています。プログラミングやAIなど、日々の業務や学びの中で得た知識や気づきをわかりやすく発信し、これからITスキルを身につけたい人にも役立つ情報をお届けします。 note → https://note.com/yurufuri X → https://x.com/mnao111

QooQ