实验3-7 统计学生成绩 (15 分)

本题要求编写程序读入N个学生的百分制成绩,统计五分制成绩的分布。百分制成绩到五分制成绩的转换规则:

  • 大于等于90分为A;
  • 小于90且大于等于80为B;
  • 小于80且大于等于70为C;
  • 小于70且大于等于60为D;
  • 小于60为E。

输入格式:

输入在第一行中给出一个正整数N(≤1000),即学生人数;第二行中给出N个学生的百分制成绩,其间以空格分隔。

输出格式:

在一行中输出A、B、C、D、E对应的五分制成绩的人数分布,数字间以空格分隔,行末不得有多余空格。

输入样例:

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!这显然是不对的!

猜你喜欢

转载自blog.csdn.net/weixin_43862765/article/details/114453985