【C言語】第2章第3回:複雑な条件文:論理演算子の応用
論理演算子は、複数の条件を組み合わせて記述する際に欠かせないツールです。この章では、&&
(論理積)、||
(論理和)、および!
(否定)の使い方を中心に、複雑な条件文を実装する方法を詳しく解説します。
1. 論理演算子とは?
論理演算子を使用することで、複数の条件を組み合わせて、より柔軟な条件分岐を実現できます。
&&
(論理積):すべての条件が真である場合にtrue
を返す。||
(論理和):いずれか1つの条件が真である場合にtrue
を返す。!
(否定):条件の真偽を反転させる。
2. 複数条件の組み合わせ
例1:論理積(&&
)を使用した条件文
#include <stdio.h>
int main() {
int age = 25;
int income = 50000;
// 複数条件を組み合わせて判定
if (age >= 18 && income >= 30000) {
printf("Eligible for the premium plan.\n");
} else {
printf("Not eligible for the premium plan.\n");
}
return 0;
}
解説:
- 条件
age >= 18
が真であり、かつincome >= 30000
が真の場合に"Eligible for the premium plan."
が出力されます。 - いずれかの条件が偽である場合、
"Not eligible for the premium plan."
が出力されます。
例2:論理和(||
)を使用した条件文
#include <stdio.h>
int main() {
int temperature;
printf("Enter the temperature: ");
scanf("%d", &temperature);
if (temperature < 0 || temperature > 35) {
printf("Extreme weather warning.\n");
} else {
printf("Weather conditions are normal.\n");
}
return 0;
}
解説:条件temperature < 0
またはtemperature > 35
のいずれかが真である場合、警告メッセージが出力されます。
3. 否定(!
)の使い方
!
演算子を使用することで、条件式の結果を反転させることができます。
例:否定演算子の使用
#include <stdio.h>
int main() {
int isMember = 0; // 会員ではない
if (!isMember) {
printf("Non-member fee applies.\n");
} else {
printf("Member discount applies.\n");
}
return 0;
}
解説:変数isMember
が0(偽)である場合、否定演算子によってif
条件が真と評価されます。
4. 複雑な条件文の実装例
複数の論理演算子を組み合わせることで、複雑な条件文を記述できます。
例:複数の条件を組み合わせたプログラム
#include <stdio.h>
int main() {
int age = 20;
int hasID = 1; // 身分証を持っている
int hasTicket = 0; // チケットを持っていない
if ((age >= 18 && hasID) || hasTicket) {
printf("Access granted.\n");
} else {
printf("Access denied.\n");
}
return 0;
}
解説:
- 年齢が18歳以上で身分証を持っている場合、またはチケットを持っている場合にアクセスが許可されます。
- すべての条件が偽である場合、アクセスは拒否されます。
5. 練習問題
以下の課題に挑戦し、論理演算子の使い方をマスターしてください。
- 入力された数が0より大きく10以下である場合に「有効な範囲」、それ以外の場合に「無効な範囲」と出力するプログラムを作成してください。
- ユーザーの年齢を入力し、18歳以上または特別許可を持つ場合に「許可」、それ以外は「拒否」と出力するプログラムを作成してください。
- 3つの整数を入力し、それらのうち2つ以上が正の数である場合に「条件を満たす」と出力するプログラムを作成してください。
6. 練習問題の解答と解説
問1の解答
#include <stdio.h>
int main() {
int number;
printf("Enter a number: ");
scanf("%d", &number);
if (number > 0 && number <= 10) {
printf("Valid range.\n");
} else {
printf("Invalid range.\n");
}
return 0;
}
問2の解答
#include <stdio.h>
int main() {
int age, specialPermission;
printf("Enter your age: ");
scanf("%d", &age);
printf("Do you have special permission? (1 for yes, 0 for no): ");
scanf("%d", &specialPermission);
if (age >= 18 || specialPermission) {
printf("Permission granted.\n");
} else {
printf("Permission denied.\n");
}
return 0;
}
問3の解答
#include <stdio.h>
int main() {
int a, b, c;
printf("Enter three numbers: ");
scanf("%d %d %d", &a, &b, &c);
if ((a > 0 && b > 0) || (a > 0 && c > 0) || (b > 0 && c > 0)) {
printf("Conditions met.\n");
} else {
printf("Conditions not met.\n");
}
return 0;
}
7. まとめ
論理演算子を活用することで、複雑な条件分岐を効率的に記述することが可能です。練習問題を通じて使い方をマスターし、実践的なプログラムに応用してみましょう。