4、统计考试成绩
【题目描述】
期末考试结束了,老师要统计班里学生的考试成绩分布,已知每个同学的考试成绩为在0到100分之间的整数,设计一个程序,输入每个同学的成绩,计算出在平均成绩(成绩平均值向下取整)之上的(大于等于平均成绩)和在平均成绩之下的(小于平均成绩)的同学的人数。
【输入格式】
第一行n为学生成绩个数,0 < n < 50。
第二行,由空格隔开的每个同学的成绩,为1到100间的整数。
【输出格式】
两个整数,由空格隔开,为平均分以上人数和平均分以下人数。
【样例输入】
12
100 80 93 66 73 50 96 100 84 47 97 71
【样例输出】
7 5 

3 条评论

  • @ 2025-5-31 20:58:18

    #include <iostream>
    using namespace std;
    
    int main() {
        int n;
        cin >> n;
        int scores[50];  // 定义一维静态数组存储成绩
        for (int i = 0; i < n; ++i) {
            cin >> scores[i];
        }
        int sum = 0;
        for (int i = 0; i < n; ++i) {
            sum += scores[i];
        }
        int average = sum / n;
        int aboveAverage = 0;
        int belowAverage = 0;
        for (int i = 0; i < n; ++i) {
            if (scores[i] >= average) {
                aboveAverage++;
            } else {
                belowAverage++;
            }
        }
        cout << aboveAverage << " " << belowAverage << endl;
        return 0;
    }
    
    • @ 2025-5-31 20:57:06

      解题思路

      本题主要涉及数据的输入、平均值计算以及根据平均值对数据进行分类统计。具体步骤如下:

      1. 读取学生数量:从输入中读取学生成绩的个数n ,并确保0 < n < 50
      2. 读取成绩数组:使用一维静态数组来存储学生成绩,按照输入格式读取每个学生的成绩并存储到数组中。
      3. 计算平均成绩:遍历数组,将所有成绩累加起来,再除以学生数量n ,并向下取整得到平均成绩。由于成绩都是整数,直接进行整数除法就能实现向下取整的效果。
      4. 统计人数:再次遍历数组,使用两个计数器变量,分别记录成绩大于等于平均成绩的人数和成绩小于平均成绩的人数。在遍历过程中,根据当前成绩与平均成绩的大小关系,相应地增加计数器的值。
      5. 输出结果:最后按照要求输出两个计数器的值,即平均分以上人数和平均分以下人数。

      C++ 代码实现

      #include <iostream>
      using namespace std;
      
      int main() {
          int n;
          cin >> n;
          // 确保学生数量在规定范围内
          if (n <= 0 || n >= 50) {
              return 1;
          }
          int scores[50];  // 定义一维静态数组存储成绩
          for (int i = 0; i < n; ++i) {
              cin >> scores[i];
          }
          int sum = 0;
          for (int i = 0; i < n; ++i) {
              sum += scores[i];
          }
          int average = sum / n;
          int aboveAverage = 0;
          int belowAverage = 0;
          for (int i = 0; i < n; ++i) {
              if (scores[i] >= average) {
                  aboveAverage++;
              } else {
                  belowAverage++;
              }
          }
          cout << aboveAverage << " " << belowAverage << endl;
          return 0;
      }
      

      代码解释

      1. 输入学生数量:使用cin读取第一行输入的学生成绩个数n ,并进行范围检查,如果n不在0 < n < 50范围内,程序异常结束(返回1)。
      2. 读取学生成绩:定义一维静态数组scores来存储学生成绩,通过循环从输入中读取每个学生的成绩并存储到数组中。
      3. 计算平均成绩:通过循环遍历数组,将所有成绩累加起来存储在sum变量中,然后用sum除以n得到平均成绩average
      4. 统计人数:再次通过循环遍历数组,对于数组中的每个成绩scores[i] ,判断其与平均成绩average的大小关系。如果大于等于平均成绩,则aboveAverage计数器加1;如果小于平均成绩,则belowAverage计数器加1。
      5. 输出结果:最后按照输出格式要求,输出平均分以上人数aboveAverage和平均分以下人数belowAverage ,中间用空格隔开。
      • @ 2025-5-31 20:56:07

        解题思路(C++ )

        本题主要涉及数据的输入、平均值计算以及数据的统计分类,解题步骤如下:

        1. 数据输入

        • 首先读取学生成绩个数n ,使用cin读取第一行输入。
        • 然后创建一个数组或vector来存储学生成绩,再通过循环读取第二行的每个成绩并存储起来。例如使用vector
        #include <iostream>
        #include <vector>
        using namespace std;
        
        int main() {
            int n;
            cin >> n;
            vector<int> scores(n);
            for (int i = 0; i < n; ++i) {
                cin >> scores[i];
            }
            // 后续计算在这进行
            return 0;
        }
        

        2. 计算平均成绩

        • 遍历存储成绩的容器,将所有成绩累加起来。
        • 用总成绩除以学生个数n ,并向下取整得到平均成绩。在C++中可以使用floor函数(需包含<cmath>头文件) ,不过由于成绩都是整数,直接使用整数除法即可实现向下取整效果。
        int sum = 0;
        for (int score : scores) {
            sum += score;
        }
        int average = sum / n;
        

        3. 统计人数

        • 再次遍历存储成绩的容器,使用两个计数器变量,一个记录成绩大于等于平均成绩的人数,一个记录成绩小于平均成绩的人数。
        • 每次遍历,判断当前成绩与平均成绩的大小关系,相应地增加计数器的值。
        int aboveAverage = 0;
        int belowAverage = 0;
        for (int score : scores) {
            if (score >= average) {
                aboveAverage++;
            } else {
                belowAverage++;
            }
        }
        

        4. 输出结果

        • 最后按照要求输出两个计数器的值,即平均分以上人数和平均分以下人数。
        cout << aboveAverage << " " << belowAverage << endl;
        

        完整代码

        #include <iostream>
        #include <vector>
        using namespace std;
        
        int main() {
            int n;
            cin >> n;
            vector<int> scores(n);
            for (int i = 0; i < n; ++i) {
                cin >> scores[i];
            }
        
            int sum = 0;
            for (int score : scores) {
                sum += score;
            }
            int average = sum / n;
        
            int aboveAverage = 0;
            int belowAverage = 0;
            for (int score : scores) {
                if (score >= average) {
                    aboveAverage++;
                } else {
                    belowAverage++;
                }
            }
        
            cout << aboveAverage << " " << belowAverage << endl;
            return 0;
        }
        

        对于样例输入:

        • 输入12表示学生个数为12 ,接着输入成绩100 80 93 66 73 50 96 100 84 47 97 71
        • 计算总成绩为100 + 80 + 93 + 66 + 73 + 50 + 96 + 100 + 84 + 47 + 97 + 71 = 957 ,平均成绩957 / 12 = 79 (向下取整) 。
        • 统计大于等于79分的人数为7 ,小于79分的人数为5 ,输出7 5 ,符合样例输出。
        • 1