C言語関係掲示板

過去ログ

No.1210 得点分布の各人数を求める

[戻る] [ホームページ]
No.15909

人数の出し方
投稿者---ますお(2004/07/27 12:53:42)


初心者なもので、ものすごく初歩的な質問ですが、得点を入力して0点以上20点未満などの分布を求めて、各区間の人数を出すにはどのようにしたらいいのでしょうか?


No.15911

Re:人数の出し方
投稿者---nop(2004/07/27 12:58:09)


>初心者なもので、ものすごく初歩的な質問ですが、得点を入力して0点以上20点未満などの分布を求めて、各区間の人数を出すにはどのようにしたらいいのでしょうか?

各区間で、何人が該当するかをカウントすればいい。


No.15913

Re:人数の出し方
投稿者---ますお(2004/07/27 13:16:14)


>>初心者なもので、ものすごく初歩的な質問ですが、得点を入力して0点以上20点未満などの分布を求めて、各区間の人数を出すにはどのようにしたらいいのでしょうか?
>
>各区間で、何人が該当するかをカウントすればいい。
カウントとはどのようにすればいいのですか?
自分はifや配列を使ってやってみたのですが、うまくいきません。


No.15916

Re:人数の出し方
投稿者---くらたっち(2004/07/27 13:50:28)


>>>初心者なもので、ものすごく初歩的な質問ですが、得点を入力して0点以上20点未満などの分布を求めて、各区間の人数を出すにはどのようにしたらいいのでしょうか?
>>
>>各区間で、何人が該当するかをカウントすればいい。
>カウントとはどのようにすればいいのですか?
>自分はifや配列を使ってやってみたのですが、うまくいきません。

イメージ的にこんな感じでしょうか??
参考になれば幸いです。

#include<stdio.h>

int main(void){

    int tokuten = 0;
    int bunpu[] = {0,0,0,0,0};

    while(EOFが入力されるまで得点を取得){
        if(0点から20点){
            bunpu[0] = bunpu[0] + 1;
        } else if(20点から40点){
            bunpu[1] = bunpu[1] + 1;
        } else if(40点から60点){
            bunpu[2] = bunpu[2] + 1;
        } else if(60点から80点){
            bunpu[3] = bunpu[3] + 1;
        } else if(80点から100点){
            bunpu[4] = bunpu[4] + 1;
        }
    }

    printf("  0 -  20 : %3d\n",bunpu[0]);
    printf(" 20 -  40 : %3d\n",bunpu[1]);
    printf(" 40 -  60 : %3d\n",bunpu[2]);
    printf(" 60 -  80 : %3d\n",bunpu[3]);
    printf(" 80 - 100 : %3d\n",bunpu[4]);

    return 0;
}



No.15926

Re:人数の出し方
投稿者---ますお(2004/07/27 18:51:25)


>>>>初心者なもので、ものすごく初歩的な質問ですが、得点を入力して0点以上20点未満などの分布を求めて、各区間の人数を出すにはどのようにしたらいいのでしょうか?
>>>
>>>各区間で、何人が該当するかをカウントすればいい。
>>カウントとはどのようにすればいいのですか?
>>自分はifや配列を使ってやってみたのですが、うまくいきません。
>
>イメージ的にこんな感じでしょうか??
>参考になれば幸いです。
>
><pre>#include<stdio.h>


int tokuten = 0;
int bunpu[] = {0,0,0,0,0};

while(EOFが入力されるまで得点を取得){
if(0点から20点){
bunpu[0] = bunpu[0] + 1;
} else if(20点から40点){
bunpu[1] = bunpu[1] + 1;
} else if(40点から60点){
bunpu[2] = bunpu[2] + 1;
} else if(60点から80点){
bunpu[3] = bunpu[3] + 1;
} else if(80点から100点){
bunpu[4] = bunpu[4] + 1;
}
}

printf(" 0 - 20 : %3d\n",bunpu[0]);
printf(" 20 - 40 : %3d\n",bunpu[1]);
printf(" 40 - 60 : %3d\n",bunpu[2]);
printf(" 60 - 80 : %3d\n",bunpu[3]);
printf(" 80 - 100 : %3d\n",bunpu[4]);

return 0;
}
</pre>

一応参考にして書いてみたのですがうまくでません。

#include <stdio.h>
#define NUM 20
int main(void)
{
int tokuten = 0;
int bunpu[] = {0,0,0,0,0,0};
float point[NUM];
for(tokuten = 0; tokuten < NUM; tokuten++){
printf(得点を入力しなさい");
scanf("%f", &point[tokuten]); }
if ( 20 > tokuten >= 0 ) {
bunpu[0] = bunpu[0] + 1;
}
else if ( 40 > tokuten >= 20 ) {
bunpu[1] = bunpu[1] + 1;
}
else if ( 60 > tokuten >= 40 ) {
bunpu[2] = bunpu[2] + 1;
}
else if ( 80 > tokuten >= 60 ) {
bunpu[3] = bunpu[3] + 1;
}
else if ( 100 > tokuten >= 80 ) {
bunpu[4] = bunpu[4] + 1;
}
else if ( 100 = tokuten ) {
bunpu[5] = bunpu[5] + 1;
}

printf(" 0点以上 20点未満 : %3d\n",bunpu[0]);
printf(" 20点以上 40点未満 : %3d\n",bunpu[1]);
printf(" 40点以上 60点未満 : %3d\n",bunpu[2]);
printf(" 60点以上 80点未満 : %3d\n",bunpu[3]);
printf(" 80点以上 100点未満 : %3d\n",bunpu[4]);
printf(" 100点 : %3d\n",bunpu[5]);

return 0;
}

どこが間違っているのか自分では分からないので教えて下さい。


No.15928

Re:人数の出し方
投稿者---ニタチ(2004/07/27 19:21:14)


if文の式がかなりおかしいです。

それから bunpu[0] = bunpu[0] + 1; は bunpu[0]++;
と書くようにしたほうがいい気がします。



No.15930

違うところ
投稿者---ますお(2004/07/27 19:57:19)


>
if文の式がかなりおかしいです。

それから bunpu[0] = bunpu[0] + 1; は bunpu[0]++;
と書くようにしたほうがいい気がします。


ifぶんですか。自分ではどのようにすればいいのか全く分からないので教えて下さい。


No.15936

Re:違うところ
投稿者---ぽへぇ(2004/07/27 21:28:15)



>ifぶんですか。自分ではどのようにすればいいのか全く分からないので教えて下さい。
>if ( 20 > tokuten >= 0 ) {

Cではこれを以下のように書きます。

>if ( 20 > tokuten && tokuten >= 0 ) {

あと、
> scanf("%f", &point[tokuten]); }
forのループはここで終わり?

また、変数名に突っ込むのもなんですが、tokuten が forでループというのも
違和感を感じます。この違和感が次のような間違いの原因にもなっている
のではないでしょうか。

>if ( 20 > tokuten >= 0 ) {
得点は point[tokuten] に入力したはずですよね?

以上のような観点で直してみてください。




No.15943

Re:人数の出し方
投稿者---くらたっち(2004/07/28 10:00:10)


>どこが間違っているのか自分では分からないので教えて下さい。

まぎらわしいので変数「tokuten」を「i」に変更してみました。
これで何をしていたのかわかりやすくなったと思います。

ソース、コメントをじっくり読めば答えが出ると思います。
また、if文の各条件式は、ぽへぇさんのおっしゃるとおりに修正しましょう。
あと、printf(得点を入力しなさい");にタイプミスがあります。

#include <stdio.h>
#define NUM 20

int main(void)
{
    int i = 0;            // tokutenをiに変更しました
    int bunpu[] = {0,0,0,0,0,0};    // 分布カウントを格納
    float point[NUM];            // 20個の得点を格納

    // このfor文は20個の得点を取得し、point[i]に格納している
    for(i = 0; i < NUM; i++){
        printf(得点を入力しなさい");
        scanf("%f", &point[i]);
    }

    // 得点を判別し、得点ごとにカウントする
    if ( 20 > i >= 0 ) {
        bunpu[0] = bunpu[0] + 1;
    }
    else if ( 40 > i >= 20 ) {
        bunpu[1] = bunpu[1] + 1;
    }
    else if ( 60 > i >= 40 ) {
        bunpu[2] = bunpu[2] + 1;
    }
    else if ( 80 > i >= 60 ) {
        bunpu[3] = bunpu[3] + 1;
    }
    else if ( 100 > i >= 80 ) {
        bunpu[4] = bunpu[4] + 1;
    }
    else if ( 100 = i ) {
        bunpu[5] = bunpu[5] + 1;
    }
    
    // 得点の分布を表示
    printf("    0点 以上   20点未満   : %3d\n",bunpu[0]);
    printf("  20点 以上   40点未満   : %3d\n",bunpu[1]);
    printf("  40点 以上   60点未満   : %3d\n",bunpu[2]);
    printf("  60点 以上   80点未満   : %3d\n",bunpu[3]);
    printf("  80点 以上 100点未満   : %3d\n",bunpu[4]); 
    printf("100点                     : %3d\n",bunpu[5]); 
    
    return 0;
}





No.15949

Re:人数の出し方
投稿者---ますお(2004/07/28 13:27:52)


皆さん、わざわざすいませんでした。参考にして頑張ってみます。


No.15957

Re:人数の出し方
投稿者---ニタチ(2004/07/28 15:45:42)


こんなやり方も・・・

#include<stdio.h>

int main(void)
{
    int score;
    int position;
    int i;
    int dump[6] = {0};

    while (scanf("%d", &score) != EOF) {
        position = 
            (score>=100) + (score>=80) + (score>=60) + (score>=40) + (score>=20);
        dump[position]++;
    }
    
    for (i = 0; i < 5; i++) {
        printf("%3d点以上%3d未満 : %3d\n", i * 20, i * 20 + 20, dump[i]);
    }
    printf(" 100点           : %3d\n",dump[5]); 

    return 0;
}