条件演算子

| Topic path: Top / 授業 / C言語基礎 / 条件演算子

*if文による場合分け [#m10b94a5]
*if文を用いた場合分け [#m10b94a5]

絶対値は、次のような式で表されます。
\[|x|=\cases{x&\text{if $x \ge 0$}\\-x&\text{それ以外}}\]

これまでは、これをif文で次のように書きました(プログラム1)。
#geshi(c){{
  if (x >= 0) {
    a = x;
  } else {
    a = -x;
  }
}}

このような条件によって代入する値を変えるという処理は、よく出てきます。
しかし、if文による場合分けでは、左辺にある代入先の変数を2回書かなければなりません。

そこで、場合分けを行って代入するときに代入先の変数を1回書くだけでいいように、また、読みやすいプログラムが書けるように、条件演算子が用意されています。




*条件演算子による場合分け [#u88efa0b]
*条件演算子を用いた場合分け [#u88efa0b]

''条件演算子''は、3つの項(オペランド)に対して作用する3項演算子です。
#geshi(c){{
  条件 ? 式1 : 式2
}}
条件演算子は、条件が満たされるとき、式1を評価し、そうでないとき、式2を評価します。
|優先順位|演算子|使用例|意味|h
|14|?と:|a ? b : c|条件|

通常は、次のような使い方をします。
#geshi(c){{
  a = ((x >= 0) ? x : -x);
}}

代入演算子 = の優先順位は条件演算子よりも低く、関係演算子 >= の優先順位は条件演算子よりも高いので、丸括弧 ( ) はなくても構いません。
#geshi(c){{
  a = x >= 0 ? x : -x;
}}

ですが、読みやすいように、条件の部分には括弧をつけておきましょう(プログラム2)。
#geshi(c){{
  a = (x >= 0) ? x : -x;
}}



**演習1 [#u3c236e0]
プログラム1とプログラム2を作成し、変数 a の値を出力して結果を確認せよ。



*条件演算子を用いた変数の初期化 [#i4fc01c8]

プログラム2の結果はプログラム1の結果と同じなので、条件演算子はなくてもいいようにも思えます。

しかし、変数の初期化は、条件演算子でないとできません(プログラム3)。
#geshi(c){{
  int x = -5;
  int a = (x >= 0) ? x : -x;
}}

まず、次のようなif文の使い方はできせん(プログラム4)。
#geshi(c){{
  int x = -5;
  int a = if (x >= 0) x else -x;
}}

そして、次のようなif文は、コンパイルはできますが、if文の外で変数 a を使うことができません(プログラム5)。
#geshi(c){{
  int x = -5;
  if (x >= 0) {
    int a = x;
  } else {
    int a = -x;
  }
}}
使えない理由については、次回、勉強します。

変数の初期化に場合分けをするときは条件演算子を使う、と覚えておけばいいでしょう。


**演習2 [#r04e3ea1]
プログラム2をプログラム3に変更し、実行結果を確認せよ。

**演習3 [#efaac802]
プログラム4とプログラム5がうまく動かないことを確認せよ。


*まとめ [#a0784fd0]
''条件演算子''は、条件によって評価する式を切り替えます。

条件演算子は、1つの条件と2つの式をオペランドとする''3項演算子''です。

条件演算子は、主に、値の代入や変数の初期化に用いられます。


トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS