プログラミング言語 C
・ 三項演算子では 式1 ? 式2 : 式3 のうち 式1 が最初に評価される。
・ もしそれが 0 ではない - 真 - なら 式2 が評価されて この条件式の値となる。0 であれば 式3 が評価されて その値となる。
・ (つまり) 評価されるのは 式2 と 式3 のどちらか一方のみである。
・ 例えば a と b どちらか大きなほうの値を z にセットするには、
z = (a > b) ? a : b;
という式になる。
・ もし 式2 と 式3 とが異なる型であれば、結果の値の型は (他の条件式と同様) 「型の変換規則」にしたがって 決定される。
・ f が float型で n が int型の場合、式
(n > 0) ? f : n;
では n は その正負にかかわりなく float型に変換される。
・ 上の 式1 は (実際には) カッコを必要としない。しかし (プログラムを記述する際は) 付けたほうが わかりやすくなる。
・ 三項演算子によって より簡潔なプログラムを書くことができる。
・ 例えば、次のループ文では 配列の n個の要素を 1行に 10個ずつ 空白で区切って並べ、各行は (最後の行を含めて) 改行文字で終了して プリントする。
for (i = 0; i < n; i++) {
printf("%6d%c", a[i], (i%10 == 9 || i == n - 1) ? '\n' : ' ');
}・ 適切な例をもう一つ。(複数個のときは item の後ろに 's' が付き、単数のときには付かない↓)
printf("You have %d item%s\n", n, n == 1 ? "" : "s");
[演習] 大文字を小文字に変換する関数 lower を if/else文と 三項演算子とで それぞれ作成せよ。(p63-64)
最初は if/else文、
- /* lower.c */
- #include
- int lower(int);
- main()
- {
- int c;
- char a = 'A';
- c = a;
- printf("%c\n", lower(c));
- return 0;
- }
- int lower(int c)
- {
- if (c >= 'A' && c <= 'Z')
- return c + 'a' - 'A';
- else
- return c;
- }
次は 三項演算子、
- /* lower_a.c */
- #include
- int lower(int);
- main()
- {
- int c;
- char a = 'A';
- c = a;
- printf("%c\n", lower(c));
- return 0;
- }
- int lower(int c)
- {
- c = (c >= 'A' && c <= 'Z') ? c = 'a' - 'A' : c;
- }
(追記) コードのまちがいを こっそり訂正。
(さらに追記) 「ブランク」というのが なんかおかしいので「空白」に変えてみる。