繰り返し処理

[C言語] for文に複数条件を記述する書き方

C言語for文では、ループの継続条件に複数の条件を組み合わせることができます。これにより、より柔軟なループ制御が可能になります。

複数条件を記述する際には、for文の条件部分で論理演算子&&(AND)や||(OR)を使用します。

例えば、for文の条件にi < 10 && j > 0と記述することで、iが10未満かつjが0より大きい間ループを継続します。

このように、複数条件を組み合わせることで、特定の条件を満たす間だけループを実行することができます。

for文に複数条件を記述する方法

C言語のfor文は、ループを制御するための強力なツールです。

特に、複数の条件を組み合わせることで、より柔軟なループ制御が可能になります。

ここでは、論理演算子を使った条件の組み合わせ方法と、具体的なfor文の例を紹介します。

論理演算子を使った条件の組み合わせ

論理演算子を使用することで、複数の条件を組み合わせてfor文を制御することができます。

以下に、AND演算子、OR演算子、NOT演算子の使用例を示します。

AND演算子(&&)の使用例

AND演算子は、すべての条件が真(true)である場合にのみ、全体の条件が真になります。

以下の例では、変数iが0から10までの範囲にある場合にループを続けます。

#include <stdio.h>
int main() {
    // 変数iが0以上かつ10以下の間ループを実行
    for (int i = 0; i <= 10 && i >= 0; i++) {
        printf("iの値: %d\n", i);
    }
    return 0;
}
iの値: 0
iの値: 1
iの値: 2
...
iの値: 10

この例では、iが0以上かつ10以下の間、ループが実行されます。

OR演算子(||)の使用例

OR演算子は、いずれかの条件が真であれば、全体の条件が真になります。

以下の例では、iが0以下または10以上の場合にループを続けます。

#include <stdio.h>
int main() {
    // 変数iが0以下または10以上の間ループを実行
    for (int i = -5; i <= 15; i++) {
        if (i <= 0 || i >= 10) {
            printf("iの値: %d\n", i);
        }
    }
    return 0;
}
iの値: -5
iの値: -4
...
iの値: 0
iの値: 10
...
iの値: 15

この例では、iが0以下または10以上のときにのみ、printfが実行されます。

NOT演算子(!)の使用例

NOT演算子は、条件の真偽を反転させます。

以下の例では、iが5でない場合にループを続けます。

#include <stdio.h>
int main() {
    // 変数iが5でない間ループを実行
    for (int i = 0; i < 10; i++) {
        if (!(i == 5)) {
            printf("iの値: %d\n", i);
        }
    }
    return 0;
}
iの値: 0
iの値: 1
...
iの値: 4
iの値: 6
...
iの値: 9

この例では、iが5でないときにのみ、printfが実行されます。

複数条件を使ったfor文の例

複数の条件を使うことで、より複雑なループ制御が可能になります。

以下に、複数の変数を使った条件と、複数の条件式を組み合わせた例を示します。

複数の変数を使った条件

複数の変数を使って条件を設定することも可能です。

以下の例では、ijの両方が特定の範囲内にある場合にループを続けます。

#include <stdio.h>
int main() {
    // 変数iとjが特定の範囲内にある間ループを実行
    for (int i = 0, j = 10; i < 5 && j > 5; i++, j--) {
        printf("iの値: %d, jの値: %d\n", i, j);
    }
    return 0;
}
iの値: 0, jの値: 10
iの値: 1, jの値: 9
...
iの値: 4, jの値: 6

この例では、iが5未満かつjが5より大きい間、ループが実行されます。

複数の条件式を組み合わせた例

複数の条件式を組み合わせることで、より複雑な条件を設定できます。

以下の例では、iが偶数であるか、jが奇数である場合にループを続けます。

#include <stdio.h>
int main() {
    // 変数iが偶数またはjが奇数の間ループを実行
    for (int i = 0, j = 1; i < 10; i++, j++) {
        if ((i % 2 == 0) || (j % 2 != 0)) {
            printf("iの値: %d, jの値: %d\n", i, j);
        }
    }
    return 0;
}
iの値: 0, jの値: 1
iの値: 1, jの値: 2
iの値: 2, jの値: 3
...
iの値: 9, jの値: 10

この例では、iが偶数またはjが奇数のときにのみ、printfが実行されます。

応用例

for文に複数条件を記述する方法を理解したら、次はその応用例を見ていきましょう。

ここでは、ネストされたfor文、配列を使ったfor文、そして複数条件を使ったループの最適化について解説します。

ネストされたfor文での複数条件

ネストされたfor文では、外側と内側のループでそれぞれ異なる条件を設定することができます。

以下の例では、外側のループでiが0から2まで、内側のループでjiから4までの範囲でループを実行します。

#include <stdio.h>
int main() {
    // 外側のループでiを制御し、内側のループでjを制御
    for (int i = 0; i < 3; i++) {
        for (int j = i; j < 5; j++) {
            printf("iの値: %d, jの値: %d\n", i, j);
        }
    }
    return 0;
}
iの値: 0, jの値: 0
iの値: 0, jの値: 1
...
iの値: 2, jの値: 4

この例では、内側のループの開始条件が外側のループの変数iに依存しており、jiから4までの範囲でループします。

配列を使った複数条件のfor文

配列を使うことで、複数の条件をより効率的に処理することができます。

以下の例では、2つの配列arr1arr2を比較し、同じ値を持つ要素を出力します。

#include <stdio.h>
int main() {
    int arr1[] = {1, 2, 3, 4, 5};
    int arr2[] = {3, 4, 5, 6, 7};
    int size = sizeof(arr1) / sizeof(arr1[0]);
    // 2つの配列の要素を比較し、同じ値を持つ要素を出力
    for (int i = 0; i < size; i++) {
        for (int j = 0; j < size; j++) {
            if (arr1[i] == arr2[j]) {
                printf("共通の値: %d\n", arr1[i]);
            }
        }
    }
    return 0;
}
共通の値: 3
共通の値: 4
共通の値: 5

この例では、2つの配列の要素を比較し、同じ値を持つ要素を出力しています。

複数条件を使ったループの最適化

複数条件を使ったループは、適切に最適化することでパフォーマンスを向上させることができます。

以下の例では、条件を見直すことでループの回数を減らし、効率的に処理を行います。

#include <stdio.h>
int main() {
    int arr[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
    int size = sizeof(arr) / sizeof(arr[0]);
    // 偶数の要素のみを出力するためにループを最適化
    for (int i = 0; i < size; i += 2) {
        printf("偶数の値: %d\n", arr[i]);
    }
    return 0;
}
偶数の値: 1
偶数の値: 3
偶数の値: 5
偶数の値: 7
偶数の値: 9

この例では、iを2ずつ増加させることで、偶数のインデックスにある要素のみを出力し、ループの回数を半分に減らしています。

これにより、処理の効率が向上します。

まとめ

for文に複数条件を記述する方法を理解することで、より柔軟で効率的なループ制御が可能になります。

この記事では、論理演算子を使った条件の組み合わせや、応用例としてネストされたfor文や配列を使った例を紹介しました。

これらの知識を活用して、より複雑なプログラムを効率的に作成してみてください。

関連記事

Back to top button