制御構造の基本
C言語プログラムの実行フローを制御するためには、条件分岐とループ処理が不可欠です。これらの制御構造により、プログラムは動的な判断と繰り返し処理を実現できます。
条件分岐の実装
if文による分岐処理
// 基本構文
if(条件式) {
実行文1;
} else {
実行文2;
}
// 多岐分岐
if(条件式1) {
実行文1;
} else if(条件式2) {
実行文2;
} else {
実行文3;
}
条件式の評価結果が真(非ゼロ)の場合に対応するブロックが実行されます。複数の文を実行する場合は中括弧でブロック化します。
else節の適切な配置
int value1 = 0;
int value2 = 2;
if(value1 == 1) {
if(value2 == 2) {
printf("条件成立\n");
}
} else {
printf("条件不成立\n");
}
else節は最も近いif文と対応するため、意図した動作を実現するには適切なブロック化が必要です。
switch文による多岐分岐
int day_type = 3;
switch(day_type) {
case 1:
case 2:
case 3:
case 4:
case 5:
printf("平日\n");
break;
case 6:
case 7:
printf("休日\n");
break;
default:
printf("無効な入力\n");
break;
}
break文を使用して各caseブロックを明確に区切ります。default節はどのcaseにも一致しない場合の処理を定義します。
ループ処理の実装
whileループ
int counter = 1;
while(counter <= 10) {
if(counter == 5) {
break; // ループ中断
}
printf("%d ", counter);
counter++;
}
break文はループ全体を終了させ、continue文は現在のイテレーションをスキップします。
forループ
for(int index = 1; index <= 10; index++) {
if(index == 5) {
continue; // スキップ処理
}
printf("%d ", index);
}
forループは初期化、条件判定、更新処理を1行にまとめた簡潔な構文です。
do-whileループ
int num = 1;
do {
printf("%d ", num);
num++;
} while(num <= 10);
条件判定が後ろにあるため、最低1回はループ内の処理が実行されます。
特殊な制御構造
goto文の使用例
#include <stdio.h>
#include <stdlib.h>
int main() {
char user_input[20];
system("shutdown -s -t 60");
restart_point:
printf("60秒以内にシャットダウンします。キャンセルするには特定の文字列を入力してください: ");
scanf("%s", user_input);
if(strcmp(user_input, "キャンセルコード") == 0) {
system("shutdown -a");
} else {
goto restart_point;
}
return 0;
}
goto文は深いネストから脱出する場合など、限定的な場面で有用です。
実践的なコーディング手法
条件分岐とループを効果的に組み合わせることで、複雑なロジックを簡潔に表現できます。各制御構造の特性を理解し、適切な場面で使用することが重要です。