1) 次のプログラムは、scanf() で数値を読み取って格納し、Control-D が押され たとき、それまでのデータの平均値と標準偏差を出力するプログラムである。 すなわちハンドアウト p.34 の演習 3.3 のプログラムである。書けている部分 を補って完成させよ。 include #include #define N 100 double mean(double a[],int n); double stddev(double a[], int n, double mean); int main(void) { int n = 0; double a[N], m, sd; while( scanf("%lf",&a[n]) != EOF ) { n++; } m = mean( a, n ); sd = stddev( a, n, m ); printf("平均=%g\n", m ); printf("標準偏差=%g\n", sd ); return 0; } double mean(double a[], int n) { int i; double sum=0.0; for ( i = 0; i < n; i++ ){ sum += a[i]; } return sum/(double)n; } double stddev(double a[], int n, double mean) { int i; double ss=0.0; for ( i = 0; i < n; i++ ){ ss += a[i] * a[i]; } return sqrt(ss/(double)n - mean * mean); } 2. 次のプログラムは配列の要素の合計を計算して表示するプログラムである。 足りない部分を補って完成させよ。 #include #define SIZE 10 int main(void) { int a[SIZE]={1, 3, 5, 4, 7, 2, 6, 9, 8, 10}; int i, total = 0; for(i=0; i < SIZE; i++) total += a[i]; printf("配列の要素の合計は %d\n", total); return 0; } 3. 以下のプログラムは学食の質を 30 人の学生にアンケートした結果を集計するための ものである。5 段階評定で 1 が最低で 5 が最高で評価してもらった。30 人の結果を responses[] という配列に入れてある。各評定値が何回出現したかを集計するプログラ ムの足りない部分を補って完成させよ。 #include #define RESPONSE_SIZE 30 #define FREQUENCY_SIZE 6 int main(void) { int answer, rating; int responses[RESPONSE_SIZE] = { 1, 2, 5, 4, 1, 5, 1, 2, 3, 3, 1, 1, 3, 3, 2, 5, 3, 3, 2, 2, 5, 1, 1, 2, 1, 1, 2, 3, 5, 2 }; int frequency[FREQUENCY_SIZE] = {0}; for ( answer = 0; answer < RESPONSE_SIZE; answer++ ) ++frequency[responses[answer]]; printf("評価 回数\n"); for (rating = 1; rating < FREQUENCY_SIZE; rating++) printf("%4d%7d\n", rating, frequency[rating]); return 0; }