- ベストアンサー
C言語初心者の質問:条件演算子を使った最小値の求め方が分からない
- C言語初心者が条件演算子を使って三つの整数の最小値を求める方法を知りたいです。if文ではなく、条件演算子を使ってプログラムを作成したいです。
- 現在、if文を使ったプログラムは作成できますが、条件演算子を使ったプログラムがうまくいきません。具体的な組み合わせ方がわかりません。
- 質問者が試したコードは、(n1>n2>n3) ? n2 : n3; という形で書いていますが、この書き方は間違っていると思うと述べています。正しい書き方を教えてほしいという要望です。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
初心者がよくやる間違いなので覚えておきましょう。 > (n1>n2>n3) ? としてしまうと、大小関係の分別が複雑になるので、この書き方は間違っていると思います。(例として、(6>1>4)や(1>6>4)など。) 複雑云々以前に、あなたの期待通りのものになっていません。 C言語では、 a > b は aがbより小さければ 1 そうでなければ 0 という値を返します。 他の ==, != , < 等も同様に 2つの値の関係が、記号通りなら 1 そうでないなら 0 という値を返す演算子です。 if(a > b) { ~ は、 「 a > b ならば ~を実行」等と習いますが、より詳しくはif文の機能は if(X) { ~ で 「 Xが真ならば~を実行 」であり、C言語での「真」とは「0でないこと」です。 if(a > b) { ~ は、 「 『a > b』の計算結果が0でない ならば ~を実行」がより正確な意味になります。 では n1 > n2 > n3 はどうなるか。 これは(n1 > n2) > n3 と同じになります。つまり n1 が n2 より大きかったら 「1 > n3」 そうでないなら 「0 > n3」 のいう計算になります。 C言語で記述する場合は、意味を考えて「n1 > n2 かつ n2 > n3」とします (n1 > n2 ) && ( n2 > n3) 最小値の調べ方は、既にあるので省略します
その他の回答 (2)
- επιστημη(@episteme)
- ベストアンサー率46% (546/1184)
1. n1 と n2 の小さいほうをminに代入する。できますか? これができたら: 2. min と n3 の小さいほうをminに代入する。 これでminが最小値となります。
- hashioogi
- ベストアンサー率25% (102/404)
a、b、cに入力した数が入っている。 xを最終結果を格納するために用意する。 x = a < (x = b < c ? b : c) ? a : x ;