[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文の例
複数の条件を使うことで、より複雑なループ制御が可能になります。
以下に、複数の変数を使った条件と、複数の条件式を組み合わせた例を示します。
複数の変数を使った条件
複数の変数を使って条件を設定することも可能です。
以下の例では、i
とj
の両方が特定の範囲内にある場合にループを続けます。
#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まで、内側のループでj
がi
から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
に依存しており、j
はi
から4までの範囲でループします。
配列を使った複数条件のfor文
配列を使うことで、複数の条件をより効率的に処理することができます。
以下の例では、2つの配列arr1
とarr2
を比較し、同じ値を持つ要素を出力します。
#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文や配列を使った例を紹介しました。
これらの知識を活用して、より複雑なプログラムを効率的に作成してみてください。