こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

C言語初心者です。次の問題で質問です。

三つの整数値を読み込んで、その最小値を求めて表示するプログラムを作成せよ。
(※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) ?

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

回答お願いいたします。

投稿日時 - 2013-03-13 18:32:05

QNo.7991692

すぐに回答ほしいです

質問者が選んだベストアンサー

初心者がよくやる間違いなので覚えておきましょう。

> (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)


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

投稿日時 - 2013-03-13 21:22:35

ANo.3

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.2

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

投稿日時 - 2013-03-13 20:39:21

ANo.1

a、b、cに入力した数が入っている。
xを最終結果を格納するために用意する。

x = a < (x = b < c ? b : c) ? a : x ;

投稿日時 - 2013-03-13 19:06:59

あなたにオススメの質問