#include double arr_avesub(double *); /* プロトタイプ宣言 */ int main() { double data[3], ave; printf("3つ値を入力してください:\n"); scanf("%lf%lf%lf", &data[0], &data[1], &data[2]); printf("入力された値: %.2f %.2f %.2f\n", data[0], data[1], data[2]); ave = arr_avesub( data ); /* 関数の呼び出し */ /* 配列の先頭アドレスを関数に渡す(&data[0]でもよい) */ printf("平均(%.2f)からの差分: %+.2f %+.2f %+.2f\n", ave, data[0], data[1], data[2]); return 0; } /* 平均を計算して各データから引き算する関数。戻り値はその平均値。 仮引数は配列の先頭アドレスを表すポインタ */ /* 仮引数の名前は何でもよい */ double arr_avesub(double data[]) /* *dataでもよい */ { int i; double ave=0.0; for( i=0 ; i<3 ; i++ ){ ave += data[i]; /* ポインタ演算としての書式でもよい。以下同様 */ } ave = ave / 3.0; /* ave = (data[0]+data[1]+data[2])/3.0; でも同じ結果が得られる */ for( i=0 ; i<3 ; i++ ){ data[i] -= ave; } return ave; }