• ベストアンサー

最大値と最小値を表示したいのですが・・・

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; }

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

  • ベストアンサー
  • ham_kamo
  • ベストアンサー率55% (659/1197)
回答No.3

なぜ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; }

その他の回答 (3)

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.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]; } よ~するに「左からみていって各要素とそのときまでの最大・最小値を比較する」だけなんだけど.

m123456789
質問者

お礼

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

  • NINJA104
  • ベストアンサー率43% (133/306)
回答No.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等で配列そのものをソートしてしまうかな。

回答No.1

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

m123456789
質問者

お礼

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

関連するQ&A

専門家に質問してみよう