ファイルからデータを読み込んで計算を行うことができていないようなので,もう一度,復習しましょう.
まずは,演習の答えを解説します.そして,成績を処理するプログラムを作ってみましょう.
プログラム作成の手順
1.ここでは,人数があらかじめ100人とわかっているとして,手始めに平均点だけを求めることを考えよう.
#include <stdio.h> void main() { int i; int data; float sum; FILE *fp; fp = fopen("testdata.txt", "r"); if(fp == NULL) return; sum = 0; for(i = 0; i<100; i++){ fscanf(fp, "%d", &data); sum += data; } fclose(fp); printf("平均値=%f\n", sum/100); }
ここで,平均を求める際に,(整数)÷(整数)の形で計算すると,結果も整数になってしまうので,注意しよう.
2.次に,標準偏差を求めてみよう.
標準偏差は,前期にやりました.sqrt()関数を用いて求めることができます.
#include <stdio.h> #include <math.h> void main() { int i; int data; float sum, sum2, sigma; FILE *fp; fp = fopen("testdata.txt", "r"); if(fp == NULL) return; sum = 0; sum2 = 0; for(i = 0; i<100; i++){ fscanf(fp, "%d", &data); sum += data; sum2 += data*data; } fclose(fp); printf("平均値=%f\n", sum/100); printf("標準偏差=%f\n", sqrt((100*sum2 - (sum*sum))/100/(100-1))); }
3.各人の偏差値を求める準備として,うえのプログラムを改良してデータを配列に読み込んでから平均値を求めてみよう.
#include <stdio.h> void main() { int i; int data[100]; float sum; FILE *fp; fp = fopen("testdata.txt", "r"); if(fp == NULL) return; sum = 0; for(i = 0; i<100; i++){ fscanf(fp, "%d", &(data[i])); sum += data[i]; } fclose(fp); printf("平均値=%f\n", sum/100); }
これで,データを読み込むことができた.
4.次に各点数の偏差値を求めてみよう.
ファイルからデータを読み込めてしまえば,もう一度やったことのあるプログラムと同じです.
偏差値の求め方:
偏差値=(得点−平均値)/標準偏差*10+50
5.入力されたアルファベットの小文字の文字列をabc順に並べ替えるプログラムを参考にして,成績のよい順に並べ替えてみよう.
6.ここまでは,データの数が100とわかっていたが,データの数がわからない場合はどうしたらよいか.
今日は,上記の
の4つを理解し,完成させる. わからなかったら冬休みの宿題.