質問: c && b < a) { printf("2番目の値は%dです\n" , b); } else { printf("すべて等しい値です。\n"); } } ``` 配列などを使えばすっきりとしたプログラムが書けるのでしょうか? よろしくお願いいたします。
回答: 全体をソートして、2番目を表示するのが一般的な方法です。 でも ここでは あえて全体のソートをせず、2番目の値を得ることに特化した方法で書いてみました。 要素数が 3 でなくもっと大きい個数になった場合には、全体ソートよりも処理時間はみじかくなるはずです。 (全体ソートでは 3番め以降の全要素のソート処理が走りますが、それは2番目を求めるには無駄な処理なので) s.c ``` #include int main(void) { int a, b, c; printf("aを入力しください: "); scanf("%d", &a); printf("bを入力しください: "); scanf("%d", &b); printf("cを入力しください: "); scanf("%d", &c); int n[] = {a, b, c}; // 1番大きい数と一番小さい数を見つける int n_max = a; int n_min = a; for(int i = 0; i < 3; i++) { if (n[i] > n_max) { n_max = n[i]; } if (n[i] < n_min) { n_min = n[i]; } } // 1番目の数を除外して, 1番大きい数を見つける int n2 = n_min; if (n_max != n_min) { for(int i = 0; i < 3; i++) { if (n[i] == n_max) { continue; } if (n[i] > n2) { n2 = n[i]; } } } // printf("max:%d, min:%d, n2:%d\n", n_max, n_min, n2); if (n_max == n_min) { printf("すべて等しい値です。\n"); } else { printf("2番目の値は%dです\n" , n2); } } ```