C言語のif文の書き方。条件分岐をフローチャートで視覚的に理解。
if (条件) { ... } の基本形else で条件不成立時の処理< と > だけで条件を書いてみるelse if で3つ以上に分ける{ } を省略しない理由if 文です。< と > だけを使って if 文の形を理解します。if (条件) { // 条件が真のときだけ実行 }
int score = 75; if (score > 59) { printf("合格\n"); }
score > 59 は「score が 59 より大きいなら」という意味です。score が 75 なら条件は真なので { } の中が実行されます。score が 50 なら条件は偽なので、中はスキップされます。< と > だけで「条件が真なら入る、偽なら飛ばす」を理解します。等しい、以上、かつ・または、のような条件の書き方は、次の「比較・論理演算子」でまとめて扱います。1, -1, 100 などif (1) { // 常に真。必ず実行 } if (0) { // 常に偽。実行されない }
{ } の役割{ } は、複数の文を「if の中身」としてまとめるためのものです。中身が1行だけなら省略できますが、最初は常に書くのが安全です。if (x > 0) { printf("正の数\n"); count++; }
if (x > 0) printf("正の数\n"); count++; // if の外。毎回実行
{ } がない if は直後の1文だけが中身です。else は「そうでなければ」を表します。if の条件が偽になったとき、else の中が実行されます。int age = 16; if (age > 17) { printf("成人です\n"); } else { printf("未成年です\n"); }
if (errors > 0) { printf("エラーがあります\n"); } // errors が 0 以下なら何も出さない
else if を上から順に並べます。int score = 75; if (score > 89) { printf("A\n"); } else if (score > 69) { printf("B\n"); } else if (score > 49) { printf("C\n"); } else { printf("D\n"); }
; を書いてしまうif (score > 59); { printf("合格\n"); }
; で if は終わります。その後の { ... } は普通のブロックなので、score に関係なく実行されます。if (a > 0) if (b > 0) printf("両方正\n"); else printf("b は正ではない\n");
else は一番近い if に結びつきます。迷わないように、ネストする場合は { } を必ず書きましょう。if (score > 49) { printf("C\n"); } else if (score > 89) { printf("A\n"); }
score > 49 が真になるので、A まで届きません。else if は上から順に判定される、という点を意識します。int x = 100; if (2 < x < 5) { printf("範囲内です\n"); }
2 < x を先に評価し、その結果の 0 または 1 をさらに < 5 と比べます。そのため、x が 100 でも真になってしまいます。範囲を表す条件の書き方は、次の「比較・論理演算子」で扱います。| 変数名 | 型 | 値 |
|---|
age の値を 16 や 20 に変えるx > 0 と x < 0 で正負を分けるelse if を使って A/B/C/D 判定を作るif の中にさらに if を書くこの講座の理解度をチェックしましょう。ここでは < と > だけで解ける問題にしています。
C言語では 0 は偽、0以外は真です。条件が 0 の場合、if ブロックは実行されません。
int x = 5; if (x > 0) { printf("A\n"); } else { printf("B\n"); }
5 > 0 は真なので、if 側の A が出力されます。
int x = -2; if (x > 0) { printf("正\n"); } else { printf("正ではない\n"); }
-2 > 0 は偽なので、else 側が実行されます。
int score = 75; if (score > 89) { printf("A\n"); } else if (score > 69) { printf("B\n"); } else { printf("C\n"); }
75 は 89 より大きくありませんが、69 より大きいので、B が出ます。
int score = 95; if (score > 49) { printf("C\n"); } else if (score > 89) { printf("A\n"); }
95 は最初の score > 49 を満たすので C が出て、後ろの else if は見られません。
int score = 40; if (score > 59); { printf("合格\n"); }
if (score > 59); の ; で if は終わっています。その後のブロックは普通のブロックなので、条件に関係なく実行されます。
a=5, b=-3 のとき、出力は?if (a > 0) if (b > 0) printf("両方正\n"); else printf("b は正ではない\n");
else は一番近い if に結びつきます。外側の a > 0 は真、内側の b > 0 は偽なので、else 側が実行されます。
{ } で囲むC言語ではインデントではなく { } がブロックを決めます。複数行を if の中に入れたいなら必ず囲みます。