C++で困っています。かなり初歩的だと思いますがよろしくお願いします。
ぼくは今C++をVS2008コンパイラを使って学んでいます。
参考書として、柴田望洋様著の「明解C++入門編」というものを読んでいます。
そこで演習問題として以下の問題が出されました。
「キーボードから読み込んだ三つの整数の中央値を求めて表示するプログラムを作成せよ。」
*たとえば2,3,1だったら2で、1,2,1だったら1で、3,3,3だったら中央値は3です。
そこで僕は以下のようなコードを書きました。
#include<iostream>
using namespace std;
int main()
{
int a, b, c;
cout << "三つ入力してください";
cin >> a >> b >> c;
int center = a;
if(center < b && center < c)
if(b > c)
center = c;
else
center = b;
if(center > b && center > c)
if(b > c)
center = b;
else
center = c;
cout << "中間値は" << center << "です" << endl;
return 0;
}
しかし当本では演習問題をより考えてもらうために答えがありません。
一応はこれで指定されたとおりに実行はできるのですが、やはりまだコードが長い気がしてなりません。
考えてもこれ以上のものが考え付かないのですが、これより短く効率の良いものがあるとは思うことができるのです。
そこで本題ですが、もっとコードを短縮して書くことはできないでしょうか?
是非ともよろしくお願いします!
#include<iostream>
using namespace std;
void main()
{
int a, b, c;
cout << "三つ入力してください";
cin >> a >> b >> c;
center = (a < c) ? ((a < b) ? ((b < c) ? b : c) : a) : ((a > b) ? ((b > c) ? b : c) : a);
cout << "中間値は" << center << "です" << endl;
}
cout << "三つ入力してください";
cin >> a >> b >> c;
int center = b;
if( a > center ) center = a;
if( center > c ) center = c;
cout << "中間値は" << center << "です" << endl;
----------------------------------
ではどうでしょうか。
質問者
お礼
答えていただいてありがとうございました。
ですが、実行すると時々間違いがありましたので、できれば確認してから投稿してほしかったです・・。
a = 5, b = 3, c = 2
と入力すると中間値は2とでました。きっと最後の部分では b と c のどちらが大きいか分かっていないため、こうなったのだと思います。
お礼
なるほど・・条件演算子の中にまた条件演算子を入れて2番目を求めるわけですか! この発想はありませんでした。 ただ、僕の頭が悪いのかパッと理解することができませんでした。 上級者になるとこういうのも一瞬でわかるものなんですかね・・。 ありがとうございました。勉強になりました。