/**
@file prog1.c (このファイルについての説明)
@brief データの平均値と,個々のデータの平均値との差をもとめる
@author 学籍番号 工芸太郎
@date ○○年○○月○○日
複数の整数データを読み込み,
-# その平均値を求める (番号付きの箇条書き)
-# 個々のデータについて,その値と平均値との差を表示する
@section sec1 処理手順
-# データを配列に読み込む
-# データの総和を計算し,データの個数で割って平均値を求める
-# 個々のデータについて,
- その値, および,平均値を引き算した書き出す (番号なしの箇条書き)
@section sec2 実行例
@subsection sec2-1 入力データ
10@n (@nは改行)
30@n
20@n
10@n
40@n
@subsection sec2-2 実行結果
<pre> (HTMLタグの使用が可能)
データ数 = 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
#include
#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);
}
}