プロが教える店舗&オフィスのセキュリティ対策術

三つの整数値を読み込んで、その最小値を求めて表示するプログラムを作成せよ。
(※if文ではなく、条件演算子を用いよ)


if文を用いてのプログラミングは出来ました。
しかし、条件演算子のプログラミングが行き詰りました…。

条件演算子の組み合わせ方が良く分かりません

以下、自分の解答です。(おそらく誤りです)
#include <stdio.h>

int main(void)
{
int n1,n2,n3,min;

printf("三つの整数を入力してください。\n");
printf("整数1:"); scanf("%d",&n1);
printf("整数2:"); scanf("%d",&n2);
printf("整数3:"); scanf("%d",&n3);

min = (n1>n2>n3) ? n2 : n3; /*ここが分かりません*/

printf("最小値は%dです。\n",min);

return 0;
}


(n1>n2>n3) ? としてしまうと、大小関係の分別が複雑になるので、この書き方は間違っていると思います。(例として、(6>1>4)や(1>6>4)など。)

(n1>n2 || n2>n3) ?

などと書くのでしょうか?分かりません。

回答お願いいたします。

A 回答 (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)


最小値の調べ方は、既にあるので省略します
    • good
    • 0

1. n1 と n2 の小さいほうをminに代入する。

できますか?
これができたら:
2. min と n3 の小さいほうをminに代入する。
これでminが最小値となります。
    • good
    • 3

a、b、cに入力した数が入っている。


xを最終結果を格納するために用意する。

x = a < (x = b < c ? b : c) ? a : x ;
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!