/* Part4 演習問題8 */
/* 成績データの平均値と分散+最高点と最低点+人数 */
#include <stdio.h>

int main(void)
{
  int d,n ;
  double s,ss ;          /* 合計と平方和 */
  double mean,var ;      /* 平均値と分散 */
  int    max,min ;       /* 最高点と最低点  */
  int    nmax,nmin ;     /* 最高点と最低点の人数 */

  printf("成績を入力してください(100点満点、負の値で終了)。\n") ;

  n=0 ;
  s=0 ;
  ss=0 ;
  max=-1000 ;
  min=1000 ;
  nmax=0 ;
  nmin=0 ;

  while(1) {
    printf("%d> ",(n+1)) ;
    scanf("%d",&d) ;
    if(d>100) {
      printf("満点を超えています。正しい成績を入力し直してください。\n") ;
    }
    else if(d<0) break ;
    else {
      n++ ;
      s += d ;
      ss += d*d ;

      /*  最高点と人数 */
      if(max<d) {
    max=d ;
    nmax=1 ;
      }
      else if(max==d) nmax++ ;

      /*  最低点と人数 */
      if(min>d) {
    min=d ;
    nmin=1 ;
      }
      else if(min==d) nmin++ ;

    }
  }

  if(n>0) {
    mean = s/n ;
    var = ss/n - mean*mean ;

    printf("データ件数は%d   平均値は%f  分散は%fです。\n",n,mean,var) ;
    printf("最高点は%dで%d人   最低点は%dで%d人です。\n",max,nmax,min,nmin) ;

  }
  else {
    printf("データが入力されていません。\n") ;
  }
  return(0) ;
}

% gcc -Wall part4-8.c
% ./a.out
成績を入力してください(100点満点、負の値で終了)。
1> 78
2> 76
3> 99
4> 80
5> 98
6> 99
7> 56
8> 60
9> 56
10> 66
11> -1
データ件数は10   平均値は76.800000  分散は271.160000です。
最高点は99で2人   最低点は56で2人です。

  1. 入力プロンプトとして,データ番号を表示している.
  2. 平均値および分散とともに,データ件数(個数)を表示している.
  3. 最高点は99,最低点は56で,人数は各2人である.