まず、私の過去回答を参考にしてください。
(必ず読んでください!!!!!)
そして、コードを読みましょう。
コードを読むコツは『一行レベルで、この行が何をしているかを考えながら読む』です。
今回の場合、
C
1#include <stdio.h>
2
3int main(void)
4{
5
6// 変数宣言(1)
7int test;
8int i;
9
10// 変数宣言(2)
11int a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10;
12
13
14// 初期設定
15a0=0;
16a1=0;
17a2=0;
18a3=0;
19a4=0;
20a5=0;
21a6=0;
22a7=0;
23a8=0;
24a9=0;
25a10=0;
26
27// 入力を促す
28printf("テストの点数を入力してください。\n");
29// 変数 test に一個分の整数データを受け取って設定する
30scanf("%d",&test);
31
32// 変数iの初期値: 0, iが5以下の間, インクリメント( +1 )しながら繰り返す
33// => つまり5回繰り返す
34for(i=0;i<5;i++){
35// testが 0 以上, 10未満なら, 変数 a1 をインクリメント
36if(test>=0&&test<10){a0++;}
37// testが 10 以上, 20未満なら, 変数 a2 をインクリメント
38if(test>=10&&test<20){a1++;}
39// testが 20 以上, 30未満なら, 変数 a3 をインクリメント
40if(test>=20&&test<30){a2++;}
41// ...
42if(test>=30&&test<40){a3++;}
43if(test>=40&&test<50){a4++;}
44if(test>=50&&test<60){a5++;}
45if(test>=60&&test<70){a6++;}
46if(test>=70&&test<80){a7++;}
47if(test>=80&&test<90){a8++;}
48if(test>=90&&test<100){a9++;}
49if(test==100){a10++;}
50}
51// 『○点以上△点未満 = 人数』のように出力する
52printf(" 0点以上10点未満 =%d人\n",a0);
53printf(" 10点以上20点未満 =%d人\n",a1);
54printf(" 20点以上30点未満 =%d人\n",a2);
55printf(" 30点以上40点未満 =%d人\n",a3);
56printf(" 40点以上50点未満 =%d人\n",a4);
57printf(" 50点以上60点未満 =%d人\n",a5);
58printf(" 60点以上70点未満 =%d人\n",a6);
59printf(" 70点以上80点未満 =%d人\n",a7);
60printf(" 90点以上100点未満 =%d人\n",a8);
61printf("100点 =%d人\n",a9);
62printf("-----------------------------\n");
63printf("合計 =%d人",i);
64
65// main関数から抜ける
66return 0;
67}
これを現実世界のノートでも、PCのテキストファイルにでも、
自分が読み書きできる人間用の言語で書き下す。( as 疑似コード )
0. 変数宣言と初期化
1. 一個分の整数データを受け取り、変数testにセット
2. 以下を5回繰り返す
2.1. testが0以上10未満なら
2.1.1. 変数 a1 をインクリメント
2.2. (そうじゃなくて) testが10以上20未満なら
2.2.1. 変数a2をインクリメント
2.3. (そうじゃなくて) testが20以上30未満なら
2.2.1. 変数a3をインクリメント
...
3. 結果を出力する
ですね。
これを現実世界で手作業でやってみる。(つまり、上記の疑似コードを手作業でシミュレーションしてみる)
脳内でもいいです。
そうすると、『あれ? なんで俺、(1) では1個しかデータを撮っていないんだ?』と気づきませんか?
それと、int a1, a2, a3, a4 ...; のように宣言していますが、これだとfor文で回せません。
(できなくはないが面倒すぎる…)
データ列 a1, a2, a3 ... は『テストの点数』であることは同じ(点数や『誰の点数か』とかが違うだけ)
なので、変数ではなく配列にすればいいです。
そうすれば、a[0], a[1], a[2] ... とアクセスできるため、for文でも直接使えます。
また、デバッグ方法も覚えましょう。
プログラミングをする場合は必須の技術です。
[追記1]
あと配列の書き方が苦手で、
苦手でも理解しましょう。
プログラミングっていうのは『こう書けばいい』ではなく、「現実世界でのシミュレーション」です。
一応配列を使わなくても出来ますが、相当面倒ですよ?
「マッチを擦るのが苦手で……でも料理をするために火を使いたいです。無人島なのでガスコンロさえありません。かろうじてマッチだけが手元にありました」
みたいなものです。
確かに木を擦っても火は付きますが、相当面倒です。
1~2分じゃないですよ? あれは1時間とかかかるっぽいです。
(天候によってはさらにかかる模様)
それをマッチを擦るのが苦手だからと避けていてはできませんよ。
ましてやプログラミングっていうのは大抵、複数人で開発するようです。
一人がわかりづらい書き方をしていると、みんなが迷惑します。
プログラミングっていうのは書いて終わり……ではありません。
デバッグやテストまで含みます。
そうなると相当な労力を使います。
道具は人間が使いやすいようにデザインされています。(少なくとも今風のは)
道具も使いようです。
1個しかデータが入れられていないのは分かっているんですが、何個入れるか分からない状態でのプログラムの書き方がわからなくて、、
今回は、C言語ですよね。
C++としてであれば、std::vectorとかが使えますが、今回はC言語なのでちょっと面倒。
C言語の配列は要素数を指定しないといけないので、「あえて大きく取ります」。
問題文とかの仕様上で、「Nは10以下」とかみたいな条件があるはずなので、その上限まで使えるように、
たとえば MAX+1 とかみたいな感じでデカく取る。
そして、入力値 N (実際に使う要素数) を受け取るはずなので、それを変数とかに確保しておく。
学校の課題とかで指定されていない場合は、入力された分インクリメントして数え上げ、
それの最終的な個数をN とするとか。
[追記2]
まずは基礎をやりましょう。
基礎をないがしろにする人は大成しません。
これは100%断言できます。
今の状態は『包丁の使い方がまったくわかりませんが、かつら剥きを極めたいです。やり方を教えてください』というようなものです。
かつら剥きって、相当難易度高いと思います。
みじん切りや角切りとかなら適当に切っても出来そうですが、かつら剥きはうすーーーーく切らないといけませんし、続けないといけません。
でも包丁の使い方すらわかっていないと、下手すれば自分の手や指を切りますし、
良くても、かつら剥きは厳しいと思います。
確かに包丁の使い方程度ならほぼ一瞬で教えることが出来ますが、この包丁の使い方が
たとえばこの道ウン十年の人しかできないっていうようなレベルのものだとどうでしょうか。
そもそもその基礎である包丁の使い方ですら教えきることができませんね。
なので「基礎である、包丁の使い方からやるように!!」と言っても、
「俺様はかつら剥きがしたいんだ!!! 包丁の使い方ぐらい、簡単に教えろよ!!!」というようなものです。
「あー、君、無理だからやめといた方がいいよ?」と言いたくなりますよね。
そういうレベルです。
まずは基礎からやり直しましょう。
基礎が出来て初めて応用が出来るのです。
それと、プログラミングは『書いて終わり』ではありません。
上記で挙げた私の過去回答を読みましたか?
そこにも書いていますが、プログラミングはデバッグまで含むです。
「DIYが趣味だ」だと言う人が「椅子を作ったけど高さが合わないから誰か、修繕してくれ」
や「椅子を作りたいんだけど誰か設計図書いてくれ」と言うようなものです。
「それは本当にDIYが趣味と言えるのか?」と思いますよね。
そういうレベルです。