/** @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); }