• ベストアンサー

中央値をもとめる

このプログラムだとたとえば 1、100、99を入力したときに間違った値を出します。どうすればいいでしょうか?おねがいします。 #include <stdio.h> int main(void) { int a, b, c, m; int max; printf("1個目の数値:"); scanf("%d", &a); printf("2個目の数値:"); scanf("%d", &b); printf("3個目の数値:"); scanf("%d", &c); max = a; if(max < b) max = b; if(max <= c) m = max; printf("%d, %d, %d の中央値は%dです。\n", a, b, c, m); }

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

  • ベストアンサー
  • ketchappt
  • ベストアンサー率20% (2/10)
回答No.3

あまり自信はありませんが、以下のような感じではいかがでしょうか。 int main(void) { int num[3][2]; int max, i, j; /* 配列初期化 */ memset(&num[0][0], 0, sizeof(num)); /* 数値入力 */ for(i = 0; i < 3; i ++) { printf("%d個目の数値:",i+1); scanf("%d", &num[i][0]); } /* 数値の大きい順番に順位をつける */ for(i = 0; i < 3; i ++) { num[i][1] = 1; for(j = 0; j < 3; j ++) { if((i != j) && (num[i][0] < num[j][0])) { num[i][1] ++; } } } /* 中央値算出 */ max = 0; for(i = 0; i < 3; i++) { if(num[i][1] == 2) { max = num[i][0]; } } printf("%d, %d, %d の中央値は%dです。\n", num[0][0], num[1][0], num[2][0], max); }

その他の回答 (2)

  • edomin
  • ベストアンサー率32% (327/1003)
回答No.2

#1です。 ついでに、現在のプログラムで「50、100、1」が入力されると、またまたおかしな結果になります。

  • edomin
  • ベストアンサー率32% (327/1003)
回答No.1

2個目のIF文にELSEを付けて「cの方が小さいときの処理」を記入しましょう。 今のままだと、「max<=c」が偽の時、mには何も代入されません。

関連するQ&A