/**
   @file  prog1.c
   @brief データの平均値と,個々のデータの平均値との差をもとめる
   @author 学籍番号 工芸太郎
   @date  ○○年○月○日

   複数の整数データを読み込み,
   -# その平均値を求める
   -# 個々のデータについて,その値と平均値との差を表示する

   @section sec1 処理手順
   -# データを配列に読み込む
   -# データの総和を計算し,データの個数で割って平均値を求める
   -# 個々のデータについて,
       -  その値, および,平均値を引き算した書き出す

   @section sec2 実行例
   @subsection sec2-1 入力データ

           10@n
           30@n
           20@n
           10@n
           40@n

    @subsection sec2-2 実行結果

<pre>
   データ数 = 5
   平均値 = 22.000000
   n       data[n] 平均値との差
   0       10      -12.000000
   1       30      8.000000
   2       20      -2.000000
   3       10      -12.000000
   4       40      18.000000
</pre>
*/

/**
   NMAX:  取り扱うことができるデータの最大個数(配列 data のサイズ)
*/
#include <stdio.h>
#include <math.h>
#define NMAX 1000

/**
   @brief 標準入力よりデータを読み込む
   @param[out] a[] 読み込んだデータを格納する配列
   @return 読み込んだデーtの個数
*/
int getData(int a[]) {
  int n = 0;
  //  このコメントはドキュメントに反映されない
  /// データがなくなるまで繰り返し読み込んで,配列 a に格納する
  while( scanf("%d", &a[n]) == 1 ) {
    n++;
    ///  データの個数が NMAX に達したら,エラーメッセージを書き出して
    ///  繰り返し処理(入力)を止める
    if( n == NMAX ) {
      printf("データ数が上限値を越えたので,これ以上のデータは無視する\n");
      break;
    }
  }
  return n;      /// 読み込んだデータの個数を返す
}

/**
   @brief main関数  ここから処理を開始する
*/
int main() {
  int data[NMAX];
  int n = 0;
  int k, sum;
  double av;

  ///  - データを読み込む
  n = getData(data);

  ///  - データの総和を求める
  sum = 0;
  for(k=0; k<n; k++) {
    sum += data[k];
  }

  ///  -  総和をデータの個数で割って平均値を計算する
  av = (double)sum / (double)n;

  ///  -  データ数と平均値を書き出す
  printf("データ数 = %d\n平均値 = %lf\n", n,av);

  ///  -  個々のデータの値と平均値からの差を書き出す
  printf("n\tdata[n]\t平均値との差\n");
  for(k=0; k<n; k++)
    printf("%d\t%d\t%lf\n", k,data[k], data[k]-av);
}