- ベストアンサー
最大値と最小値を表示したいのですが・・・
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; }
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
なぜ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)
このプログラムでそのデータならそうなるわなぁ. 以下, プログラムの骨子だけ: 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]; } よ~するに「左からみていって各要素とそのときまでの最大・最小値を比較する」だけなんだけど.
- NINJA104
- ベストアンサー率43% (133/306)
もっと簡単になりますよ :-) #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等で配列そのものをソートしてしまうかな。
- chickenkatu
- ベストアンサー率33% (64/191)
普通にソートして、配列要素の先頭と最後尾を表示すればいいんじゃないかな。
お礼
回答ありがとうございます!! ソートして先頭と最後尾を表示とはどういうことでしょうか・・・?? ちょっとわからないのでもう少し詳しくお願いできますか??
お礼
回答ありがとうございます!! 考え方が根本的に間違っていたようで・・・ お恥ずかしいです。。。