プロが教える店舗&オフィスのセキュリティ対策術

double numに入っている数字から最大値と最小値を求めたいのですが、このままだと両方とも1.000になってしまうんです・・・
どうやったらちゃんと最大値と最小値が表示されるのでしょうか??
初心者なものでスイマセンが教えてください!!


#include<stdio.h>

int main(void)
{
int i,j;
double num[]={4.5,3.1,7.0,9.2,1.0,5.7,9.3,2.3,0.3,1.0};
double max,min;

for(i=0; i<10; i++)
{
for(j=0; j<10; j++)
{
if(num[i]>num[j])
max=num[i];
}
}

for(i=0; i<10; i++)
{
for(j=0; j<10; j++)
{
if(num[i]<num[j])
min=num[i];
}
}
printf("最大値は%fです。",max);
printf("最小値は%fです。",min);

return 0;
}

A 回答 (4件)

このプログラムでそのデータならそうなるわなぁ.


以下, プログラムの骨子だけ:
max = min = num[0];
for (int i = 1; i < 10; i++) {
if (num[i] の方が max より大きい)
max = num[i];
else if (num[i] の方が min より小さい)
min = num[i];
}
よ~するに「左からみていって各要素とそのときまでの最大・最小値を比較する」だけなんだけど.
    • good
    • 0
この回答へのお礼

回答ありがとうございます!!
考え方が根本的に間違っていたようで・・・
お恥ずかしいです。。。

お礼日時:2006/12/12 00:29

なぜforループが2重になっているのかよくわかりませんが、


考え方として、
・とりあえず配列の最初の値を暫定の最大値としてセットする
・forループで配列を調べていき、配列の値が暫定の最大値より大きな場合、それを暫定の最大値とする。
・forループを抜けると、暫定の最大値は暫定ではなく、その配列の最大値となっている。
という流れが普通のやり方です。

以上を踏まえてコーディングを手直しすると、以下のようになります。

#include<stdio.h>

int main(void)
{
int i;
double num[]={4.5,3.1,7.0,9.2,1.0,5.7,9.3,2.3,0.3,1.0};
double max,min;

max=num[0];
for(i=0; i<10; i++)
{
if(num[i]>max)
max=num[i];
}

min=num[0]
for(i=0; i<10; i++)
{
if(num[i]<min)
min=num[i];
}

printf("最大値は%fです。",max);
printf("最小値は%fです。",min);

return 0;
}
    • good
    • 2

もっと簡単になりますよ :-)



#include<stdio.h>
int main(void)
{
int i;
double num[]={ 4.5, 3.1, 7.0, 9.2, 1.0, 5.7, 9.3, 2.3, 0.3, 1.0 };
double max,min;

max = num[0]; min = num[0];
for( i = 1 ; i < 10 ; i ++ ) {
if( max < num[i] ) {
max = num[i];
}
if( min > num[i] ) {
min = num[i];
}
}

printf("最大値は%fです。",max);
printf("最小値は%fです。",min);
}

または、qsort等で配列そのものをソートしてしまうかな。
    • good
    • 2

普通にソートして、配列要素の先頭と最後尾を表示すればいいんじゃないかな。

    • good
    • 0
この回答へのお礼

回答ありがとうございます!!
ソートして先頭と最後尾を表示とはどういうことでしょうか・・・??
ちょっとわからないのでもう少し詳しくお願いできますか??

お礼日時:2006/12/12 00:24

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