アプリ版:「スタンプのみでお礼する」機能のリリースについて

このプログラムだとたとえば 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);
}

A 回答 (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);
}
    • good
    • 0

#1です。


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

2個目のIF文にELSEを付けて「cの方が小さいときの処理」を記入しましょう。


今のままだと、「max<=c」が偽の時、mには何も代入されません。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!