• 締切済み

C言語のプログラミングIの問題です。

問:n人の成績を入力し、最高点、最低点、合計点、平均点、分散を求めるプログラムを作成せよ。 #include<stdio.h> int main(void) { int tensu[100]; から始めてください。解答お願いします。

みんなの回答

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.4

標本分散でも不偏分散でもループ 1回で必要な情報を集めることは可能ですよ>#3. ただ, ナイーブにやっちゃうと誤差が大きくなってまともな分散が求まらない可能性はありますが.

  • hashioogi
  • ベストアンサー率25% (102/404)
回答No.3

分散には標本分散と不偏分散があると思います。通常はまず平均を求めたのち、平均を用いて分散を計算するので2回のループが必要になりますが、標本分散で良ければ、平均と標本分散を1回のループで求められます。 (Σ((x[i]-ave)^2))/nを変形すると(Σ(x[i]^2))/n-ave^2になりますからこれを利用すればよいです。

回答No.2

#1のやつの最初にmain持ってくればいいんじゃない? #include <stdio.h> int main(void) { int tensu[ 100 ]; int scoreCount = 0; int atoi( const char* string ); int bestScore( int scores[], int scoreCount ); int worstScore( int scores[], int scoreCount ); int totalScore( int scores[], int scoreCount ); double bunsanScore( int scores[], int scoreCount, double average ); printf( "点数を入力してください(最大100個)\n" ); printf( "終了する場合は[Q]を入力してください\n" ); 以下略 何でプロトタイプ使えないのか分からん。

  • Wr5
  • ベストアンサー率53% (2173/4061)
回答No.1

他の人の回答で申し訳ありませんが… # ベストアンサーの実績付きですのでご安心を。 # インデントは全角空白で。 #include <stdio.h> int atoi( const char* string ) {  int num = 0;  while( '0' <= *string && '9' >= *string )  {   num *= 10;   num += *string - '0';   ++string;  }  return num; } int bestScore( int scores[], int scoreCount ) {  int best = 0;  for( int ix = 0; ix < scoreCount; ix++ )  {   if( !ix ) best = scores[ ix ];   if( best < scores[ ix ] )   best = scores[ ix ];  }  return best; } int worstScore( int scores[], int scoreCount ) {  int worst = 0;  for( int ix = 0; ix < scoreCount; ix++ )  {   if( !ix ) worst = scores[ ix ];   if( worst > scores[ ix ] )   worst = scores[ ix ];  }  return worst; } int totalScore( int scores[], int scoreCount ) {  int total = 0;  for( int ix = 0; ix < scoreCount; ix++ )  {   total += scores[ ix ];  }  return total; } double bunsanScore( int scores[], int scoreCount, double average ) {  double total = 0;  for( int ix = 0; ix < scoreCount; ix++ )  {   double num = scores[ ix ] - average;   total += ( num * num );  }  return total / scoreCount; } int main(void) {  int tensu[ 100 ] = { 0 };  int scoreCount = 0;  printf( "点数を入力してください(最大100個)\n" );  printf( "終了する場合は[Q]を入力してください\n" );  while( 1 )  {   char istr[ 32 ];   int result = scanf( "%s", &istr );   if( 'q' == istr[ 0 ] || 'Q' == istr[ 0 ] )   {    break;   }   tensu[ scoreCount ] = atoi( istr );   if( ++scoreCount >= 100 )   {    break;   }  }  if( 0 < scoreCount )  {   int best = bestScore( tensu, scoreCount );   int worst = worstScore( tensu, scoreCount );   int total = totalScore( tensu, scoreCount );   double average = total / scoreCount;   double bunsan = bunsanScore( tensu, scoreCount, average );   printf( "最高点=%d\n", best );   printf( "最低点=%d\n", worst );   printf( "合計点=%d\n", total );   printf( "平均点=%.2f\n", average );   printf( "分散=%.2f\n", bunsan );  }  return 0; } ただ…… >#include<stdio.h> >int main(void) >{ int tensu[100]; >から始めてください。解答お願いします。 だと、標準関数しか使えませんねぇ。 自作の関数も使えない(プロトタイプ宣言できない)ので、上の回答ではダメかも知れませんが。

関連するQ&A