/* Part6 演習問題3 */
/* 成績データの平均値と分散(1次元配列版) */
#include <stdio.h>

int main(void)
{
  int score[100],n ;
  double s,dss ;          /* 合計と偏差平方和 */
  double mean,var ;      /* 平均値と分散 */
  int i ;

  printf("成績を入力してください(100点満点、負の値で終了)。\n") ;

  n=0 ;
  s=0 ;
  dss=0 ;

  while(1) {
    printf("%d> ",(n+1)) ;
    scanf("%d",&score[n]) ;
    if(score[n]>100) {
      printf("満点を超えています。正しい成績を入力し直してください。\n") ;
    }
    else if(score[n]<0) break ;
    else {
      s = s + score[n] ;    /* 合計  */
      n++ ;
      if(n==100) {
    printf("データ数が上限に達しました(入力終了)。\n") ;
    break ;
      }
    }
  }

  if(n>0) {
    mean = s/n ;
    for(i=0;i<n;i++) {
      dss = dss + (score[i]-mean)*(score[i]-mean) ; /* 偏差平方和 */
    }
    var = dss/n ;
    printf("データ件数は%d   平均値は%f  分散は%fです。\n",n,mean,var) ;
  }
  else {
    printf("データが入力されていません。\n") ;
  }
  return(0) ;
}
 

% gcc -Wall part6-3.c
% ./a.out
成績を入力してください(100点満点、負の値で終了)。
1> 78
2> 76
3> 65
4> 102
満点を超えています。正しい成績を入力し直してください。
4> 99
5> 80
6> 56
7> 81
8> 92
9> 77
10> 59
11> 60
12> -1
データ件数は11   平均値は74.818182  分散は171.057851です。

  1. Part4の演習問題7とまったく同じ得点を入力した.満点をこえたデータは1次元配列に格納しない.
  2. 本演習問題とPart4の演習問題7で分散の値に違いはない.「計算精度」が高いといっても,本実行例の場合にはその効果はあらわれていない.