この質問では、N
生徒の100点満点を読み、5点満点の分布を数えるプログラムを作成する必要があります。100ポイントシステムから5ポイントシステムへの変換のルール:
- Aに分割された90以上である;
- Bが90未満で80以上。
- 80未満で70以上はCです。
- 70未満で60以上はDです。
- Eは60未満です。
入力フォーマット:
最初の行に正の整数、つまりN(≤1000)
学生の数を入力します。2行目にN
は、パーセンタイルシステムで各学生のスコアをスペースで区切って示します。
出力フォーマット:
A、B、C、D、E
対応する5ポイントのシステムスコアをスペースで区切って1行に出力する人数の分布であり、行の終わりに余分なスペースは許可されません。
入力サンプル:
7
77 54 92 73 60 65 69
サンプル出力:
1 0 2 3 1
コード:
# include <stdio.h>
# include <stdlib.h>
# define LENGTH 1000
int main() {
int N,i,j,m = 0;
scanf("%d",&N);
int scores[LENGTH];
int persons[5] = {
0};
for (i=0;i<N;i++) {
// 依次输入N个学生的成绩到数组中
scanf("%d",&scores[i]);
}
// 注意此时的i和N一样大,所以j要小于i
for (j=0;j<i;j++) {
if (scores[j] >= 90) persons[0] += 1;
else if (scores[j] >= 80) persons[1] += 1;
else if (scores[j] >= 70) persons[2] += 1;
else if (scores[j] >= 60) persons[3] += 1;
else persons[4] += 1;
}
while(m < 5) {
if (m < 1) {
printf("%d",persons[m]);
}
else {
printf(" %d",persons[m]);
}
m += 1;
}
return 0;
}
スクリーンショットを送信:
問題解決のアイデア:
この問題を解決する方法はたくさんあります。値を受け取るために配列を使用することに加えて、文字列操作(基本的には文字配列...)を使用することもできます。i
最初のループは最後i=N
に低い方であることに注意してください。ループはj<i
できないことに注意する必要がありますj <= i
。そうしないと、出力値の合計がN
1より大きくなります!これは明らかに間違っています!