200人分の評価(-1〜100点)が記載されたファイルがs.txtであるとします。そのときに、s.txtを読み込んで、集計結果を表示させたいです。
点が-1点の人は評価対象から外すとする場合に、その他0〜100点の人の人数をカウントcountし、その中で最大値max、最小値min、平均点averageを求めます。さらに、その平均点から20点以上下回っている評価対象の人数をfailureとしてカウントして求めたいです。
以下ソースコードを書いたのですが、平均点から20点以上下回っている評価対象の人数が0人になってしまいます。わかる方教えていただきたいです。(このとき、評価対象の平均点は50点で、s.txtの中には20点のスコアの人がいるので、0にはならないはずなのですが、0になってしまいます。)
#include <stdlib.h> int main(void) { FILE *fp; fp = fopen("s.txt","r"); if(fp == NULL) { printf("Open error\n"); exit(1); } int i, score_data, score_sum = 0, count = 0, max = 0, min = 100, failure = 0; for(i = 0; i < 200; i++) { fscanf(fp, "%d\n", &score_data); if (score_data >= 0) { count++; score_sum += score_data; if (max < score_data) { max = score_data; } if (min > score_data) { min = score_data; } } } double average = (double)score_sum / count for(i = 0; i < 300; i++) { fscanf(fp, "%d\n", &score_data); if (score_data >= 0) { if(score_data <= (average - 20.0) { failure++; } } } fclose(fp); printf("Count: %d\n", count); printf("Average: %f\n", average); printf("Max: %d\n", max); printf("Min: %d\n", min); printf("Failure: %d\n", failure); return 0; } コード
このままではコードが読みづらいので、質問を編集し、<code>ボタンを押し、出てくる’’’の枠の中にコードを貼り付けてください
回答4件
あなたの回答
tips
プレビュー