論理型と論理演算
<stdbool.h> ヘッダーファイルをインクルードする
- これにより
bool 型および true、false 定数が利用可能になる
- 例1:
#include <stdio.h>
#include <stdbool.h>
int main() {
bool b = 6 > 5;
bool t = true;
printf("%d\n", t);
t = 2;
printf("%d\n", t);
printf("%d\n", b);
printf("%d\n", t);
return 0;
}
条件演算子とコンマ演算子
条件演算子(三項演算子)
- 条件演算子の優先順位は代入演算子より高く、他の演算子より低い
count = (count > 20) ? count - 10 : count + 10;
- 条件式
(count > 20) が真の場合には ? の右側の式が評価され、偽の場合は : の右側の式が評価される
- 例1:
#include <stdio.h>
#include <stdbool.h>
int main() {
count = (count > 20) ? count - 10 : count + 10;
// 上記は以下のif-else構文と同等
if (count > 20)
count = count - 10;
else
count = count + 10;
}
コンマ演算子
- 2つの式を連結し、右辺の式の値を全体の結果とする
- コンマ演算子の優先順位は最も低いので、左右の式はそれぞれ先に計算される
- 左から右への結合性を持つため、左側の式が最初に評価され、右側の式の値が最終的な結果となる
- 主に
for ループ内で使用される例: for (i = 0, j = 10; ; ...)
- 例1:
#include <stdio.h>
#include <stdbool.h>
int main() {
int i;
i = 3 + 4, 5 + 6;
printf("%d", i);
return 0;
}
条件分岐の入れ子と連鎖
入れ子の if-else 文
if の条件が満たされるか否かに関わらず、実行される文が別の if や if-else 文であることも可能で、これは入れ子の if 文と呼ばれる
else は最も近い if と対応する
- 例1:
#include <stdio.h>
int main() {
const int ready = 24;
int code = 0;
int count = 0;
scanf("%d %d", &code, &count);
if (code == ready) {
if (count < 20)
printf("すべて正常です\n");
} else
printf("待機を続けます\n"); // 最初の if に対応
return 0;
}
連鎖的な if-else 文
#include <stdio.h>
int main() {
int x;
if (x < 0) {
...
} else if (x == 0) {
.....
} else {
.....
}
}
多段階分岐(switch-case)
switch 文は条件に基づくジャンプ命令と考えられ、各 case の最後の文を実行した後、break がない限り次の case へと順次実行される
- 例1:
#include
int main() {
int type;
scanf("%d", &type);
// switch の条件式は整数型である必要がある
// case の後には定数または式を指定できる
switch (type) {
case 1:
...;
break;
case 2:
...;
break;
default:
...;
}
}