【課題5−5】 提出課題(2) 次のプログラムは,学生番号,氏名,点数からなるテキストファイルseiseki.datを読み込んで,登録されている点数の合計点,平均点,分散,標準偏差を求めて表示するものである.下の空欄A〜Eを埋めよ.データの整合性チェックはしていない. #include #include void get_goukei(FILE *fp, int *g, int *n); double get_bunsan(FILE *fp, double avg); int main(void) { 「 A 」 *fp; double heikin, bunsan, hensa; int goukei, ninzu; fp = fopen("seiseki.dat",「 B 」); //seiseki.datを読み込みモードでオープン if (fp == NULL) { fprintf(stderr, "Failed to open seisei.dat"); return 1; } get_goukei(fp, &goukei, &ninzu); //合計と人数を得る heikin = (double)goukei / ninzu; //平均を計算 fseek(fp, 0L, 「  C  」); //ファイル位置指定子を先頭へ bunsan = get_bunsan(fp, heikin); //分散を得る hensa = sqrt(bunsan); //標準偏差を計算 printf("goukei :%d¥n", goukei); printf("heikin :%f¥n", heikin); printf("bunsan :%f¥n", bunsan); printf("hensa :%f¥n", hensa); fclose(fp); //ファイルのクローズ return 0; } /* 合計値の算出 */ /* *fp:ファイルポインタ *g:合計値格納領域 *n:人数格納領域 */ void get_goukei(FILE *fp, int *g, int *n) { int no, ten; char name[20]; *g = 0; *n = 0; //ファイルから一行ずつ読み込み,合計と人数を計算 while (fscanf(fp, "%d %s %d", &no, name, &ten) != EOF) { *g += ten; (*n)++; } } /* 分散の算出 */ /* *fp:ファイルポインタ avg:平均点 */ /* 返値 分散 */ double get_bunsan(FILE *fp, double avg) { int no, ten, n=0; char name[20]; double disp = 0.0; //ファイルから一行ずつ読み込み,分散を計算 while (fscanf(fp, "%d %s %d", &no, name, &ten) != EOF) { disp += 「   D   」; n++; } 「  E  」; return disp; } 【実行結果】 goukei :8106 heikin :76.471698 bunsan :114.475614 hensa :10.699328 【解説とヒント】 要素数nのとき 平均=合計/n 分散={(要素0-平均)の2乗+(要素1-平均)の2乗+...+(要素n-1-平均)の2乗}/n 標準偏差=sqrt(分散)