C言語 入力した数値の平均値の近似値(関数を利用)
double型の配列 a[] と、要素数 n を受け取り、 a の最初の n 要素の平均を値として返す関数
double average(double a[], int n)
および、double型の配列 a[] と、要素数 n を受け取り、 a の最初の n 要素のなかで、それら n 要素の平均値と最も近い値を返す関数
double closest_to_average(double a[], int n)
を作成して、main関数で、平均値と最も近い値を出力しろ
という問題をやってみたのですが、私のプログラムでは実行して、数値を入力した後強制終了されてしまいます。
どこが間違えているのか教えていただけないでしょうか?
以下が私の作ったプログラムです。
----------------------------------------------------------------------
#include <stdio.h>
double average(double a[], int n)
{
int i;
double sum,avg;
sum=0;
for(i=0;i<n;i=i+1){
sum=sum+a[i];
}
avg=sum/n;
return(avg);
}
double closest_to_average(double a[], int n)
{
int i;
double avg,num1,num2,ans;
avg=average(a,n);
num1=avg-a[0];
if(num1<0){
num1=num1*(-1);
}
for(i=1;i<n;i=i+1){
num2=avg-a[i];
if(num2<0){
num2=num2*(-1);
}
if(num1>num2){
num1=num2;
ans=a[i];
}
}
return(ans);
}
int main (void)
{
int i,n;
double a[100];
double ans;
scanf("%d",&n);
for(i=0;i<n;i=i+1){
scanf("%d",a[i]);
}
ans=closest_to_average(a,n);
printf("%f",ans);
return(0);
}
----------------------------------------------------------------------
ちなみに「3 3.0 5.0 11.0」と入力すれば「5.000」となるはずです。
よろしくお願いします。
お礼
早々のお答え、ありがとうございました。 ばっちり、うまくいきました。 助かりました。 まだ、他にも悩みたくさんなので、改めて別で質問させていただきます。