【C言語】第2章第15回:条件分岐を最適化するテクニック
条件分岐は、プログラムの動作を制御する重要な要素です。この章では、if
文、switch
文などを効率的に記述し、最適化するテクニックを学びます。
1. 条件分岐の基本と課題
条件分岐を最適化する際には、以下の課題を考慮する必要があります:
- 条件式の評価回数を減らす。
- 分岐の順序を工夫し、プログラムを効率化する。
- 可読性を維持しながら冗長なコードを排除する。
2. 条件分岐の最適化テクニック
2.1 簡潔な条件式の記述
複雑な条件式を簡潔に記述することで、コードの可読性を向上させます。
例:2つの値が同じかどうかを判定するプログラム
#include <stdio.h>
int main() {
int a = 5, b = 5;
// 冗長な条件
if (a == b) {
printf("Equal\n");
}
// 簡潔な条件
printf("%s\n", (a == b) ? "Equal" : "Not Equal");
return 0;
}
解説:
if
文を三項演算子に置き換えることで、簡潔に記述。- 可読性を損なわない範囲でコードを短縮。
2.2 条件の順序を工夫する
頻繁に成立する条件を先に評価することで、条件式全体の評価回数を減らします。
例:値が範囲内かを判定するプログラム
#include <stdio.h>
int main() {
int value = 10;
// 順序を工夫
if (value >= 0 && value <= 100) {
printf("Value is within range.\n");
}
return 0;
}
解説:
- 頻度の高い条件(
value >= 0
)を先に評価。 - 短絡評価を活用して不要な評価を回避。
3. 複雑な条件を整理する
複雑な条件式を関数に分割し、コードを整理します。
例:値が偶数かつ正の数かを判定するプログラム
#include <stdio.h>
int is_positive_even(int value) {
return value > 0 && value % 2 == 0;
}
int main() {
int value = 10;
if (is_positive_even(value)) {
printf("Value is a positive even number.\n");
} else {
printf("Value is not a positive even number.\n");
}
return 0;
}
解説:
- 条件式を関数
is_positive_even
に分割して簡潔化。 - コードの再利用性を向上。
4. switch文の活用
多数の選択肢を処理する場合、switch
文を使用して効率化します。
例:曜日を文字列に変換するプログラム
#include <stdio.h>
int main() {
int day = 2;
switch (day) {
case 0:
printf("Sunday\n");
break;
case 1:
printf("Monday\n");
break;
case 2:
printf("Tuesday\n");
break;
default:
printf("Invalid day\n");
}
return 0;
}
解説:
switch
文を使用して、多数の条件を効率的に処理。break
を適切に配置し、意図しない処理を防止。
5. 練習問題
以下の課題に挑戦し、条件分岐の最適化を練習してください。
- 三項演算子を使用して、正の数か負の数かを判定するプログラムを作成してください。
- 複数の条件を関数に分割して、偶数または3の倍数を判定するプログラムを作成してください。
switch
文を使用して、1〜5の数値に応じたメッセージを表示するプログラムを作成してください。
6. 練習問題の解答と解説
問1の解答
#include <stdio.h>
int main() {
int value = -10;
printf("%s\n", (value >= 0) ? "Positive" : "Negative");
return 0;
}
問2の解答
#include <stdio.h>
int is_even(int value) {
return value % 2 == 0;
}
int is_multiple_of_three(int value) {
return value % 3 == 0;
}
int main() {
int value = 9;
if (is_even(value)) {
printf("Value is even.\n");
} else if (is_multiple_of_three(value)) {
printf("Value is a multiple of three.\n");
} else {
printf("Value is neither even nor a multiple of three.\n");
}
return 0;
}
問3の解答
#include <stdio.h>
int main() {
int value = 3;
switch (value) {
case 1:
printf("One\n");
break;
case 2:
printf("Two\n");
break;
case 3:
printf("Three\n");
break;
case 4:
printf("Four\n");
break;
case 5:
printf("Five\n");
break;
default:
printf("Invalid value\n");
}
return 0;
}
7. まとめ
条件分岐の最適化により、コードの効率と可読性が向上します。三項演算子や関数の分割、switch
文を活用して、より効率的なプログラムを作成しましょう。