/* 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です。 |