条件式(関係演算子、論理演算子を用いる)を判断し、2分岐選択制御を行います。
| パターン | 書き方 | フローチャート | 例 |
|---|---|---|---|
| 基本形 |
if (条件式) 文1; else 文2; ↑ タブで字下げ |
条件式が 真なら文1 を実行 偽なら文2 を実行 |
if ( a > 10 ) a = 0; else a++; |
| else節の省略型 |
if (条件式) 文1; |
条件式が真なら文1 を実行 |
if ( a == 0 ) a = 2; |
| 複合文の形式
({}で囲んだ文の集合を複合文と呼ぶ) ※ 複合文の else節 も省略できる |
if (条件式) {
文11;
文12;
}
else {
文21;
文22;
}
※ 複数行の文は
{} で囲んで
複合文にする
|
条件式が 真なら文11 と文12 を実行 偽なら文21 と文22 を実行 |
if ( a < 10 ){
a = 1;
b = 2;
}
else {
a = 3;
b = 4;
}
|
2つの値の大小関係を比較し、真のときには1を、偽のときには0を生成します。
| 演算子 | 意味 | 使用例 |
|---|---|---|
| > | より大きい | if (a > b) |
| >= | より大きいか、等しい (以上) | if (a >= b) |
| < | より小さい | if (a < b) |
| <= | より小さいか、等しい (以下) | if (a <= b) |
| == | 等しい | if (a == b) (注1) |
| != | 等しくない | if (a != b) |
論理演算子を用いると、複数の条件を組み合せることができます。
| 演算子 | 意味 | 使用例 |
|---|---|---|
| && | 論理積(かつ) | if (a > 0 && b > 0) |
| || | 論理和(または) | if (a > 0 || b > 0) |
| ! | 否定(でない) | if (!a) (注2) |
条件式を判断して多分岐選択制御を行います。
(形式)
if (条件1) {
文1;
}
else if (条件2) {
文2;
}
|
|
else if (条件n) {
文n;
}
else {
文;
}
|
(フローチャート)
条件1 が真ならば文1 を実行 そうではなく、 条件2 が真ならば文2 を実行 そうではなく、 条件n が真ならば文n を実行 いずれでもないならば文を実行 |
(例)
if (a > 1000)
printf("a は 1000 より大きい\n");
else if (a > 500)
printf("a は 1000以下で500より大きい\n");
else if (a > 100)
printf("a は 500以下で100より大きい\n");
else
printf("a は 100以下\n");
|
|
if文の中にまた if文が入る形です。
(形式)
if (条件1) {
if (条件2) {
文1;
}
else {
文2;
}
}
else {
文3;
}
|
(フローチャート)
条件1 が真で 条件2 が真ならば、文1 を実行 条件2 が偽ならば、文2 を実行 条件1 が偽ならば、文3 を実行 |
(例)if (a > 10) if (b == 1) a = 0; else a = 1; else a++; |
|
(注1)
if (a == b) を if (a = b) と間違えて記述すると、思わぬエラーの原因になります。
仮に、
int a = 0;
if (a == 0)
printf("a は 0 と等しい\n");
else
printf("a は 0 と等しくない\n");
というプログラムで、if (a = 0) と記述したとすると、コンパイルはエラーとはならず、
表示結果は「a は 0 と等しくない」になってしまうのです。
C言語において
≠0 : 真
=0 : 偽
という決まりがあります。
つまり、
if (0) は 「偽」の判定になります。
if (a == 0) を if (a = 0) と記述すると、
a = 0 の代入文が働き、a は 0 になってしまいます。
つまり、
if (0) になり、判定結果は「偽」になるため、
「a は 0 と等しくない」と表示するようになるのです。
(注2)
!aは、a==0と同じ意味になります。
C言語では、0以外の値は真、0は偽ですから、慣れたプログラマは、if(a!=0) を if(a) と
記述します。一方、if(a==0)の方はif(!a)と記述します。この表記に出くわしたとき
に戸惑わないようにしてください。
「初心者のためのポイント学習C言語」 Copyright(c) 2000-2004 TOMOJI All Rights Reserved