|
> どこに問題があるのでしょうか?
関数で、n1 > n2 かつ n1 > n3 のとき、結果が n3 とは限りません。
マクロ化するとき、n1 <= n3 の結果を逆にしています。
関数なら、
int Mid(int a, int b, int c)
{
if (a < b) {
if (c < a) return a;
if (b < c) return b;
return c;
} else {
if (a < c) return a;
if (c < b) return b;
return c;
}
}
マクロなら、
#define Mid(a, b, c) \
((a)<(b)?(c)<(a)?(a):(b)<(c)?(b):(c):(a)<(c)?(a):(c)<(b)?(b):(c))
次の 6とおりのテストをしてみること。
Mid(1, 2, 3)
Mid(1, 3, 2)
Mid(2, 1, 3)
Mid(2, 3, 1)
Mid(3, 1, 2)
Mid(3, 2, 1)
題名が不適切です。投稿者名の「中央値取得のマクロ化」を題名にすべきです。
|