プログラム実行フローの基本構造
プログラムの実行フローには以下の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文
指定されたラベル位置へ無条件ジャンプします(使用は推奨されません)。