C言語 for文の使い方

この記事のポイント

  • C言語におけるfor文の基本概念と構文理解
  • for文を使った繰り返し処理の効率的な実装方法
  • さまざまなループパターンの習得
  • 複雑な処理を簡潔に記述するテクニック
  • 実践的なコード例による応用力の向上

目次

C言語のfor文とは?

C言語のfor文は、プログラム内で特定の処理を繰り返し実行するための制御構文です。プログラミング初心者の場合、最初のうちはfor文がとても複雑に見えるかもしれません。しかし、基本を理解すると、for文はC言語プログラミングをするうえで非常に強力なツールとなります。

for文の特徴は、繰り返し処理の開始条件、継続条件、そして各繰り返し後の処理をコンパクトに一行で記述できる点です。例えば、1から10までの数字を表示する、配列の全要素にアクセスする、特定回数の処理を実行する…といった場合に活用できます。

while文やdo-while文などの他のループ構文と比べると、for文には、繰り返しに関連する全ての要素(初期化、条件判定、更新処理)を一箇所にまとめて記述できる違いがあります。それはつまり、コードの可読性がひろがるということです。特にfor文は、ループの開始と終了の条件が明確な場合に適しています。

for文に関してプログラミング初心者が躓きやすいのは、構文理解と応用方法の部分です。しかし、基本を押さえると、プログラムの効率化や複雑な処理の簡略化に役立てられるようになります。この記事では、for文の基本から実践的な使用例までを段階的に解説していきましょう。

【関連】
C言語をもっと詳しく学ぶならpaizaラーニング

基本構文

C言語におけるfor文の基本構文は、以下のとおりです。  

for (初期化式; 条件式; 更新式) { // 繰り返し実行する処理 }

各部分の役割を説明すると、以下のようになります。     

  • 初期化式:ループが始まる前に一度だけ実行される式です。通常、カウンタ変数の初期化に使用します。
  • 条件式:各繰り返しの前に評価され、真(0以外)であれば処理を続行、偽(0)であればループを終了します。
  • 更新式:各繰り返しの最後に実行される式で、通常はカウンタ変数の値を変更します。

例えば、1から5までの数字を表示する簡単なfor文は、次のように書けるでしょう。     

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

また、特定の配列の全要素にアクセスする場合は、以下のコードを使います。

#include <stdio.h> int main() { int animals[3] = {1, 2, 3}; for (int i = 0; i < 3; i++) { printf("%d\n", animals[i]); } return 0; }

実用例

for文は、C言語プログラミングにおいて汎用性がとても高い制御構造です。ここからは、for文におけるさまざまな実用例を紹介します。具体的なコード例を見ながら、for文の柔軟性と実践的な活用方法を学んでいきましょう。

繰り返し処理の概念を早い段階で理解することは、プログラミング力を向上するうえで非常に重要です。for文は繰り返し処理の代表的な実装方法であり、多くのアルゴリズムや処理の基盤となります。このセクションでは、基本的なコード例から少し複雑なものまで段階的に解説を進めていきます。じっくりと理解を深めてください。

各コード例では、実際のコードと解説を紹介しながら、具体的に得られる出力結果も示します。また、for文を使用する際のベストプラクティスや注意点についても、触れていきましょう。

それでは、具体的な実装例を見ていきます。各コード例では、動物の名前をカタカナで表示する形で出力例を示していきましょう。     

基本的な数値の繰り返し処理

基本的なfor文では、指定した回数だけ処理を繰り返します。この例では、5種類の動物名を順番に表示します。初期値、条件式、増分式を1行で指定する形式にしており、初心者でも理解しやすいシンプルな構造です。

#include <stdio.h> int main() { char *animals[] = {"イヌ", "ネコ", "ウサギ", "ハムスター", "カメ"}; for (int i = 0; i < 5; i++) { printf("動物%d: %s\n", i+1, animals[i]); } return 0; }

実行結果:

動物1: イヌ
動物2: ネコ
動物3: ウサギ
動物4: ハムスター
動物5: カメ

配列の全要素を処理する方法

配列の要素を全て処理するために、for文を使う方法です。動的に取得した配列のサイズに基づき、ループ回数を決定します。この方法には、配列サイズが変わっても柔軟に対応できる利点があります。実用的なプログラミング場面で特に役立つテクニックです。

#include <stdio.h> int main() { char *animals[] = {"ゾウ", "キリン", "ライオン"}; int size = sizeof(animals) / sizeof(animals[0]); for (int i = 0; i < size; i++) { printf("%d番目: %s\n", i+1, animals[i]); } return 0; }

実行結果:

1番目: ゾウ
2番目: キリン
3番目: ライオン

逆順での繰り返し処理

for文を使うと、逆方向のループも簡単に実装できます。以下のコード例は、動物リストを最後から順に表示するものです。初期値を最大インデックスに設定し、更新式でデクリメントすることで、カウンタを減少させながら処理を行います。

#include <stdio.h> int main() { char *animals[] = {"キツネ", "タヌキ", "クマ"}; int size = 3; for (int i = size - 1; i >= 0; i--) { printf("逆順%d番: %s\n", size-i, animals[i]); } return 0; }

実行結果:

逆順1番: クマ
逆順2番: タヌキ
逆順3番: キツネ

複数の変数を使用したfor文

for文を使うと、複数の変数を同時に操作できます。以下のコード例は、二つの動物配列から対応する要素を同時に表示する方法です。カンマ区切りで複数の初期化式や更新式を記述できるため、より複雑な繰り返し処理を簡潔に表現することが可能となります。

#include <stdio.h> int main() { char *land[] = {"ライオン", "トラ", "クマ"}; char *sea[] = {"イルカ", "クジラ", "サメ"}; for (int i = 0, j = 0; i < 3; i++, j++) { printf("陸: %s, 海: %s\n", land[i], sea[j]); } return 0; }

実行結果:

陸: ライオン, 海: イルカ
陸: トラ, 海: クジラ
陸: クマ, 海: サメ

無限ループの作成方法

for文を使って無限ループを作る方法です。条件式を省略することで、処理を無限に繰り返すことが可能となります。ループを抜けるときには、内部の条件判定でbreakを使う形です。for文による無限ループは、制御が複雑なシステムや、特定のイベントが発生するまで処理を続ける場合に役立ちます。

#include <stdio.h> int main() { char *animals[] = {"サル", "ゴリラ", "チンパンジー"}; int i = 0; for (;;) { // 無限ループ if (i >= 3) break; printf("霊長類: %s\n", animals[i++]); } return 0; }

実行結果:

霊長類: サル
霊長類: ゴリラ
霊長類: チンパンジー

ネストしたfor文の使い方

for文をネスト(入れ子)にすることで、多次元的な繰り返し処理が可能です。このコード例では、動物園の各エリアとそこにいる動物を表示します。for文をネスト(入れ子)にすると、外側でループが「エリア」、内側のループで「各エリアの動物」を処理する階層構造を表現できるでしょう。

#include <stdio.h> int main() { char *areas[] = {"哺乳類", "鳥類"}; char *animals[][2] = {{"ライオン", "ゾウ"}, {"ワシ", "ペンギン"}}; for (int i = 0; i < 2; i++) { printf("%sエリア:\n", areas[i]); for (int j = 0; j < 2; j++) { printf("- %s\n", animals[i][j]); } } return 0; }

実行結果:

哺乳類エリア:
- ライオン
- ゾウ
鳥類エリア:
- ワシ
- ペンギン

for文内での条件分岐

for文と条件分岐を組み合わせると、特定条件の要素だけを処理できます。この例では、偶数インデックスの動物だけに特別なマークを付けています。ループ内での条件判定は、データのフィルタリングやカスタム処理で役立つテクニックです。

#include <stdio.h> int main() { char *animals[] = {"パンダ", "コアラ", "カンガルー", "ワラビー"}; for (int i = 0; i < 4; i++) { if (i % 2 == 0) printf("★ %s\n", animals[i]); else printf("☆ %s\n", animals[i]); } return 0; }

実行結果:

★ パンダ
☆ コアラ
★ カンガルー
☆ ワラビー

特定条件でのループ制御

for文内でbreak関数やcontinue関数を使うと、特定条件に基づく形でループの流れを制御できます。以下のコード 例は、特定の動物が見つかったときにメッセージを表示して処理をスキップし、別の条件でループ自体を終了する仕組みを表現しています。

#include <stdio.h> #include <string.h> int main() { char *animals[] = {"イヌ", "ネコ", "ウサギ", "カメ", "ハムスター"}; for (int i = 0; i < 5; i++) { if (strcmp(animals[i], "ウサギ") == 0) { printf("ウサギをスキップします\n"); continue; } if (strcmp(animals[i], "カメ") == 0) { printf("カメで終了します\n"); break; } printf("動物: %s\n", animals[i]); } return 0; }

実行結果:

動物: イヌ
動物: ネコ
ウサギをスキップします
カメで終了します

まとめ

C言語のfor文は、繰り返し処理を効率的に実装するうえで強力なツールです。

for文はC言語プログラミングの基礎となる重要な制御構造であり、基本をマスターすることでコードの可読性と効率性が大幅に向上します。また、プログラム内で初期化式、条件式、更新式を適切に設定することで、単純なカウンタから複雑なデータ処理まで、多様なループ処理を簡潔に記述できるでしょう。     

複雑なアルゴリズムを効率的に実装するうえでも、for文は非常に重要度が高い制御構造になります。

プログラミング初心者の方は、まずはシンプルなfor文から理解を進めてみてください。for文をうまく応用できるレベルになると、複雑なプログラムを簡潔に書く面白さも生まれてくるでしょう。

レベルを更に上げたい方はpaizaプログラミングスキルチェックへ

  1. paizaラーニングトップ
  2. リファレンス
  3. C言語のリファレンス記事一覧
  4. C言語 for文の使い方