実験3-7生徒の成績を数える(15ポイント)

この質問では、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。そうしないと、出力値の合計がN1より大きくなります!これは明らかに間違っています!

おすすめ

転載: blog.csdn.net/weixin_43862765/article/details/114453985