- 締切済み
C言語のプログラミングIの問題です。
問:n人の成績を入力し、最高点、最低点、合計点、平均点、分散を求めるプログラムを作成せよ。 #include<stdio.h> int main(void) { int tensu[100]; から始めてください。解答お願いします。
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- Tacosan
- ベストアンサー率23% (3656/15482)
標本分散でも不偏分散でもループ 1回で必要な情報を集めることは可能ですよ>#3. ただ, ナイーブにやっちゃうと誤差が大きくなってまともな分散が求まらない可能性はありますが.
- hashioogi
- ベストアンサー率25% (102/404)
分散には標本分散と不偏分散があると思います。通常はまず平均を求めたのち、平均を用いて分散を計算するので2回のループが必要になりますが、標本分散で良ければ、平均と標本分散を1回のループで求められます。 (Σ((x[i]-ave)^2))/nを変形すると(Σ(x[i]^2))/n-ave^2になりますからこれを利用すればよいです。
- KAZUMI2003
- ベストアンサー率37% (77/208)
#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)
他の人の回答で申し訳ありませんが… # ベストアンサーの実績付きですのでご安心を。 # インデントは全角空白で。 #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]; >から始めてください。解答お願いします。 だと、標準関数しか使えませんねぇ。 自作の関数も使えない(プロトタイプ宣言できない)ので、上の回答ではダメかも知れませんが。