/* Part8 演習問題4 */
/* 成績データの平均値と分散(ファイル読み込み版) */
#include <stdio.h>

int main(void)
{
  int score[100],n ;
  double s,dss ;          /* 合計と偏差平方和 */
  double mean,var ;      /* 平均値と分散 */
  int i ;
  FILE *fp ;
 
  fp=fopen("score.data","r") ;  /* ファイル名はscore.data */
  if(fp==NULL) {
    printf("ファイルのオープンに失敗しました\n") ;
    return(1) ;
  }

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

  while(1) {
    if(fscanf(fp,"%d",&score[n])==EOF) break ;
    if(score[n]>100) {
      printf("得点 %d は満点を越えていますので、無視します。\n",score[n]) ;
    }
    else {
      printf("%d> %d\n",(n+1),score[n]) ;
      s = s + score[n] ;    /* 合計  */
      n++ ;
      if(n==100) {
    printf("データ数が上限に達しました(入力終了)。\n") ;
    break ;
      }
    }
  }
  fclose(fp) ;

  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 part8-4.c
% ./a.out
1> 78
2> 76
3> 65
得点 102 は満点を超えていますので、無視します。
4> 99
5> 80
6> 56
7> 81
8> 92
9> 77
10> 59
11> 60
データ件数は11   平均値は74.818182  分散は171.057851です。

  1. 4番目のデータは100点を超えているので,計算には使われない.
  2. Part4演習問題3と同じデータなので,出力される結果も同じである.