あるテストの結果、40人の得点は次の表のようになりました。得点を、1-10,11-20,…,91-100の10段階に分け、各段階に属する人数を求めるプログラムを作成せよという問題です。
条件として、2重のfor文とif elseの分岐を使わなければいけません。
画像のようにプログラムを書いてみたのですが、すべて属する人数が1人になってしまいます。
ifの条件が間違えているのかなと思っているのですが、分かりません。
教えていただきたいです。
1-10の人数1人
11-20の人数1人
21-30の人数1人
......
......
.....
91-100の人数1人
となってしまいます。
ソースコードです
#include<stdio.h>
int main(void)
{
int score[40] = {10,30,31,45,77,90,31,45,55,70,32,68,90,60,86,46,55,30,70,80,4,14,80,66,45,66,36,59,99,100,50,30,19,90,77,50,90,66,70,49};
int range[10] = {10,20,30,40,50,60,70,80,90,100};
int count[10] = {0};
int i,j;
for(i = 0; i <= 39; ++i){
for(j = 0; j <= 9; j++){
if(score[i] >= range[j]){
break;
}
else{
count[j] += 1;
}
printf("%d - %dの人数 %d人\n", range[j]-9, range[j], count[j] );
}
}
return 0;
}
No.3ベストアンサー
- 回答日時:
以下のようにしてください。
#include<stdio.h>
int main(void)
{
int score[40] =
{ 10, 30, 31, 45, 77, 90, 31, 45, 55, 70, 32, 68, 90, 60, 86, 46,55, 30, 70, 80, 4, 14, 80, 66, 45, 66, 36, 59, 99, 100, 50, 30, 19, 90, 77,50, 90, 66, 70, 49 };
int range[10] = { 10, 20, 30, 40, 50, 60, 70, 80, 90, 100 };
int count[10] = { 0 };
int i, j;
for (i = 0; i <= 39; ++i) {
for (j = 0; j <= 9; j++) {
if (score[i] >= range[j]-9 && score[i] <= range[j]) {
count[j] += 1;
break;
}
}
}
for (j = 0; j <= 9; j++){
printf("%d - %dの人数 %d人\n", range[j] - 9, range[j],
count[j]);
}
return 0;
}
実行結果
1 - 10の人数 2人
11 - 20の人数 2人
21 - 30の人数 3人
31 - 40の人数 4人
41 - 50の人数 7人
51 - 60の人数 4人
61 - 70の人数 7人
71 - 80の人数 4人
81 - 90の人数 5人
91 - 100の人数 2人
ご回答ありがとうございます。
条件式が間違っていた事と、ifの部分のみでいいところを、elseのところでcountを数えていたことが間違いでした。もう少し冷静になって考えてみると分かるものでした。今回は本当にありがとうございます。私はまだまだプログラム初心者ですので、また質問を見かけましたらご回答いただけると幸いです。
No.2
- 回答日時:
C言語で書くかどうかに関係なく。
。。プログラムとしては10段階それぞれの人数を格納する変数を10個用意します。各変数の初期値はもちろん0。
40人分のデータを順番に読み込む・・・というのがforループ。
そのforループの中で今読み込んだデータは10段階のどこに入るかをif then elseで判断し、該当する変数をカウントアップ。
それだけのことです。
40人分の点数は1件ずつ標準入力で行うのではなく、プログラム内に配列データとして固定で持つならforループではその配列データを0番目から39番目まで順に参照すればよいだけのお話し。
で、この日本語で書いたことをC言語に翻訳すればOKですね。
参考まで。
No.1
- 回答日時:
こんにちは
C言語は全然知りませんけれど・・
例えば最初に10点の人を評価する際に、内側のループで
score[i] >= range[j]
が成立するので、breakでそのループを抜けて、次の人の評価に移っています。
これがまず、意図するところと違うのではないでしょうか?
ちなみに、10点以下の人の人数を増やしてみれば、結果が変わるのでわかるのではないかと思います。
そうすると、出力の処理がおかしいことにも気づくはずと思います。
さらには、100点の場合にどこにカウントされるかも考えてみた方が宜しそうです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C言語のエラーについて 2 2022/07/11 13:56
- C言語・C++・C# プログラミング c言語 4 2023/03/07 01:05
- C言語・C++・C# c言語 1 2022/11/09 13:05
- C言語・C++・C# C言語 プログラミング 4 2022/05/22 11:53
- C言語・C++・C# C言語プログラム変更 2 2022/12/21 15:03
- C言語・C++・C# c言語 プログラムのエラー 1 2023/02/11 20:31
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- Ruby 【JAVA】数字をひし形に出力するプログラムについて 2 2022/07/11 23:32
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- C言語・C++・C# 10人分の生徒の英語の点数{32,34,41,38,40,26,14,46,42,50} と数学の点 2 2022/05/26 21:31
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
intとlongは同じ?
-
画像の拡大・縮小
-
2の補数を計算するプログラム
-
分数の足し算をさせるプログラ...
-
再起呼び出しの回数をカウント...
-
C言語で%を使わない余りの出し方
-
ヌメロンのプログラム
-
| (or) を使った関数の引数の作...
-
迷路を脱出する経路探索プログ...
-
Cプログラムによる画像の高速フ...
-
16bitで乱数を生成する方法
-
当たり判定の処理がわかりません。
-
異なるn個の整数からr個の整数...
-
乱数で交互に偶数、奇数が、、、。
-
C言語でサイコロのプログラムを...
-
以下のプログラムはOpenCVで画...
-
3のつく数と3の倍数を表示 C言語
-
デバッグビルドとリリースビル...
-
コマンドプロンプトのウィンド...
-
argvのNULLチェック
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
おすすめ情報