質問: ### 実現したいこと 平均値に最も近い数を出したい。 ### 問題点 ``` 平均値との差の最小値を求める部分のifが実行されていない。 printfをifの中に入れて確認してみたがそのprintfが出力されなかった。 ちなみに、平均値との差まではあってました。 ``` ### 実行結果 ``` n=5 10 2 6 23 4 avg=9.000000 i=0 fabs(sa[i])=1.000000 i=1 fabs(sa[i])=7.000000 i=2 fabs(sa[i])=3.000000 i=3 fabs(sa[i])=14.000000 i=4 fabs(sa[i])=5.000000 最小値に一番近い数は0.000000です. ``` ### コード ``` //n個の実数値の平均値に最も近い数を出力する #include #include int main(void) { int n,i,mini; double avg,sa[100],min,a[100],sum; sum=0; avg=0; printf("n="); scanf("%d",&n); for(i=0;ifabs(sa[i])){ min=fabs(sa[i]); mini=i; //この時のiを記憶 printf("mini=%d",mini); } } //printf("mini=%d",mini); printf("最小値に一番近い数は%fです.\n",a[mini]); return 0; } ```
回答: minの初期値がfabs(sa[0])ですが、この値が既に最小値であるためif文の条件に合致していないようです。 minの初期値としてはdouble型の最大値を与えるのがよいでしょう。 ``` #include ~ min = DBL_MAX; ``` もしくはfabs(sa[0])を初期値とするのなら、miniも0で初期化しておく必要があります。 ``` min = fabs(sa[0]); mini = 0; ```