質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.34%

  • C

    3991questions

    C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

  • Emacs

    136questions

    GNU Emacsと拡張性の高い、高性能なテキストエディタです。豊富なライブラリの導入により、統合開発環境やWebブラウザとしても機能させる事が可能です。

分布の表示について

解決済

回答 1

投稿

  • 評価
  • クリップ 1
  • VIEW 898

bjbjeknr

score 18

テストの平均点とともに平均点の分布を集計するプログラムをつくりたいのですが、分布の集計をする関数をどのように書けばいいいのか分かりません。

実行のイメージ

 ./a.out
各学生の点数を入力してください。
入力: 数学, 英語, 国語(カンマで区切る)
(いずれかに -1 を入力すると終了)
1人目:60,75,90
2人目:85,90,87
3人目:34,56,45
4人目:50,70,35
5人目:80,78,68
6人目:-1,-1,-1
人目 | 数学 英語 国語 | 平均1   | 60 75 90 | 75.0
2   | 85 90 87 | 87.3
3   | 34 56 45 | 45.0
4   | 50 70 35 | 51.7
5   | 80 78 68 | 75.3
範囲             | 人数
0以上- 10未満  | 0 人
10以上- 20未満 | 0 人
20以上- 30未満 | 0 人
30以上- 40未満 | 0 人
40以上- 50未満 | 1 人
50以上- 60未満 | 1 人
60以上- 70未満 | 0 人
70以上- 80未満 | 2 人
80以上- 90未満 | 1 人
90以上-100未満 | 0 人
100           | 0 人

私のプログラムです。

#include <stdio.h> 
#define DISTIBUTION 3

void Show_average(int *j,int *e,int *m,double *ave);

void Show_distribution();

double main(void)
{
  int J_test[100]={0};
  int E_test[100]={0};
  int M_test[100]={0};
  int cnt=0;
  double ave[100]=0;

  printf("各学生の点数を入力してください。\n");
  printf("入力: 数学, 英語, 国語(カンマで区切る)\n");
  printf("いずれかに -1 を入力すると終了)\n ");
  printf("%d人目: ", cnt+1);

  scanf("%d,%d,%d", &J_test[cnt], &E_test[cnt],&M_test[cnt]);
  while(0 <= J_test[cnt]  && 0 <= E_test[cnt] && 0<= M_test[cnt] ){
    cnt++;
    printf("%d人目: ", cnt+1);
    scanf("%d,%d,%d",&J_test[cnt], &E_test[cnt],&M_test[cnt]);
}
  J_test[cnt] = E_test[cnt] = M_test[cnt] = -1;

  Show_average(int J_test,int E_test,int M_test,double ave);
  Show_distribution(void);

    return{0};
}

void Show_average(int *j,int *e,int *m,double *ave)
{
  int i=1;
  printf("\n");
  printf("\n");
  printf("人目 | 数学 英語 国語 | 平均");
  printf("-----+----------------+--------");
  while( 0 <= *j && 0 <= *e && 0 <= *m ) {
    printf("%d |  %d   %d |  %.1f¥n",i++, *j++, *e++, *ave++);
  }
}

void Show_distribution()
{
  int distribution[DISTIBUTION]={0};
  int j;
  distribution[weight[i] /50]++ ;

  printf("\n");
  printf("範囲| 人数");
  printf("----------------+--------");

  for(j=0; j<DISTIBUTION; j++){
    printf("%d以上-%d未満 | %d人¥n", j*10  ,(j+1)*10-1,distrib[j]);
  }
  return 0;
}
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • coco_bauer

    2017/01/11 18:19

    分布(平均点階層別件数)を格納する int distribution[11] をmain関数の中で定義して、各人の平均値が算出されるたびに該当する階層の件数を増やしてゆくようにします。そして、最後に分布の表示をしてください。

    キャンセル

回答 1

checkベストアンサー

0

分布の表示を行う前に、学生の平均点が、どの範囲に入るか求め、1人ずつ分布配列に加算して行きます。

#include <stdio.h>


#define MAX_STUDENTS 100


void Show_scores(int *M_test, int *E_test, int *J_test, double *average, int students);
void Show_distribution(double *average, int students);


int main(void)
{
    int M_test[MAX_STUDENTS];
    int E_test[MAX_STUDENTS];
    int J_test[MAX_STUDENTS];
    int students;
    double average[MAX_STUDENTS];

    printf("各学生の点数を入力してください。\n");
    printf("入力: 数学, 英語, 国語(カンマで区切る)\n");
    printf("いずれかに -1 を入力すると終了)\n");

    for (students = 0; students < MAX_STUDENTS; students++) {
        printf("%3d人目: ", students + 1);
        scanf("%d,%d,%d", &M_test[students], &E_test[students], &J_test[students]);

        if (0 > M_test[students] || 0 > E_test[students] || 0 > J_test[students]) {
            break;
        }

        average[students] = (M_test[students] + E_test[students] + J_test[students]) / 3.0;
    }


    Show_scores(M_test, E_test, J_test, average, students);
    Show_distribution(average, students);

    return 0;
}


void Show_scores(int *M_test, int *E_test, int *J_test, double *average, int students)
{
    int index;

    printf("\n");
    printf("\n");
    printf("人目 | 数学 英語 国語 | 平均\n");
    printf("-----+----------------+--------\n");

    for (index = 0; index < students; index++) {
        printf(" %3d |  %3d  %3d  %3d | %5.1f\n", 
            index + 1, M_test[index], E_test[index], J_test[index], average[index]);
    }
}


void Show_distribution(double *average, int students)
{
    int distribution[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
    int index;
    int range;

    for (index = 0; index < students; index++) {
        if (average[index] >= 100) {
            range = 10;
        }
        else {
            range = (int)(average[index] / 10);
        }

        distribution[range]++;
    }

    printf("\n");
    printf("範囲            | 人数\n");
    printf("----------------+--------\n");

    for (range = 0; range < sizeof(distribution) / sizeof(int) - 1; range++) {
        printf("%3d以上-%3d未満 | %d人\n", range * 10, (range + 1) * 10, distribution[range]);
    }
    printf("%3d             | %d人\n", range * 10, distribution[range]);
}

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

同じタグがついた質問を見る

  • C

    3991questions

    C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

  • Emacs

    136questions

    GNU Emacsと拡張性の高い、高性能なテキストエディタです。豊富なライブラリの導入により、統合開発環境やWebブラウザとしても機能させる事が可能です。