C言語における条件分岐と制御フローの基本

プログラム実行フローの基本構造

プログラムの実行フローには以下の3つの基本構造があります:

  • 順次実行:コードを上から下へ順番に実行
  • 条件分岐:条件評価に基づいて実行パスを決定
  • 繰り返し:特定のコードブロックを繰り返し実行

条件分岐構文

if文の基本構文

if (条件式) {
    // 条件が真の場合に実行される処理
}

実装例:年齢確認システム

#include <stdio.h>

int main() {
    int user_age;
    printf("年齢を入力してください:");
    scanf("%d", &user_age);
    
    if (user_age >= 18) {
        printf("アクセスを許可します\n");
    }
    
    return 0;
}

if-else構文

if (条件式) {
    // 条件が真の場合の処理
} else {
    // 条件が偽の場合の処理
}

実装例:年齢確認の拡張

#include <stdio.h>

int main() {
    int user_age;
    printf("年齢を入力してください:");
    scanf("%d", &user_age);
    
    if (user_age >= 18) {
        printf("アクセスを許可します\n");
    } else {
        printf("アクセスを拒否します\n");
    }
    
    return 0;
}

三項演算子

条件演算子とも呼ばれ、簡潔な条件分岐を実現します。

#include <stdio.h>

int main() {
    int value1 = 15;
    int value2 = 25;
    int max_value = (value1 > value2) ? value1 : value2;
    printf("最大値:%d\n", max_value);
    
    return 0;
}

多岐分岐の実装

#include <stdio.h>

int main() {
    float purchase_amount, final_price;
    printf("購入金額を入力:");
    scanf("%f", &purchase_amount);
    
    if (purchase_amount >= 300.0f) {
        final_price = purchase_amount * 0.6f;
    } else if (purchase_amount >= 200.0f) {
        final_price = purchase_amount * 0.7f;
    } else if (purchase_amount >= 100.0f) {
        final_price = purchase_amount * 0.8f;
    } else if (purchase_amount >= 50.0f) {
        final_price = purchase_amount * 0.9f;
    } else {
        final_price = purchase_amount;
    }
    
    printf("購入金額: %.2f  支払金額: %.2f\n", purchase_amount, final_price);
    
    return 0;
}

switch文による分岐処理

#include <stdio.h>

int main() {
    int day_number;
    printf("曜日番号を入力(1-7):");
    scanf("%d", &day_number);
    
    switch (day_number) {
        case 1: printf("月曜日\n"); break;
        case 2: printf("火曜日\n"); break;
        case 3: printf("水曜日\n"); break;
        case 4: printf("木曜日\n"); break;
        case 5: printf("金曜日\n"); break;
        case 6: printf("土曜日\n"); break;
        case 7: printf("日曜日\n"); break;
        default: printf("無効な入力\n");
    }
    
    return 0;
}

月の日数計算プログラム

#include <stdio.h>

int main() {
    int input_year, input_month, days_count;
    printf("年月を入力(YYYY MM):");
    scanf("%d %d", &input_year, &input_month);
    
    switch (input_month) {
        case 1: case 3: case 5: case 7: case 8: case 10: case 12:
            days_count = 31;
            break;
        case 4: case 6: case 9: case 11:
            days_count = 30;
            break;
        case 2:
            if ((input_year % 4 == 0 && input_year % 100 != 0) || 
                (input_year % 400 == 0)) {
                days_count = 29;
            } else {
                days_count = 28;
            }
            break;
        default:
            days_count = -1;
    }
    
    printf("%d年%d月は%d日間あります\n", input_year, input_month, days_count);
    
    return 0;
}

制御フロー制御キーワード

break文

ループまたはswitch文から直ちに脱出します。

continue文

現在のループイテレーションをスキップし、次のイテレーションに進みます。

goto文

指定されたラベル位置へ無条件ジャンプします(使用は推奨されません)。

タグ: C言語 条件分岐 制御構造 if文 switch文

5月13日 22:32 投稿