输入15名学生的C语言成绩,统计输出该课程的平均成绩,最高分和最低分并统计及格人数。

#include <stdio.h>

int main() 
{
    int scores[15],i,sum=0,max,min,pass=0;
    float average;
    
    printf("请输入15个学生的C语言成绩:\n");
    for (i = 0; i < 15; i++) 
    {
        printf("第%d个学生成绩:", i + 1);
        scanf("%d", &scores[i]);
        
        while(scores[i] < 0 || scores[i] > 100)
        {
            printf("成绩输入有误,请重新输入第%d名学生成绩(0-100):\n", i + 1);
               scanf("%d", &scores[i]);
        }
    }
    
    max = scores[0];
    min = scores[0];
    for (i = 0; i < 15; i++) 
    {
       sum += scores[i];
       
        if(scores[i] > max)
        {
            max = scores[i]; 
        }   
        if(scores[i] < min)
        {
            min = scores[i];
        }
        if(scores[i] >= 60)
        {
            pass++;
        }
    }
        average = (float)sum / 15;
        
         
        printf("\n  成绩统计结果: \n");
        printf("平均成绩:%.2f\n", average);
        printf("最高分:%d\n", max);
        printf("最低分:%d\n", min);
        printf("及格人数:%d\n", pass);
        
    return 0;
}

这段代码是一个非常标准的C语言入门程序,主要目的是处理一组数据(15个学生的成绩)并进行统计分析。
为了让你更直观地理解,我们可以把这段代码想象成一个“班级成绩统计员”的工作流程。它的工作分为四个主要阶段:准备阶段、录入与检查阶段、计算阶段和汇报阶段
下面我为你逐行详细解析:

🛠️ 第一阶段:准备工具(变量定义)

  • int scores[15]:这是核心工具。你可以把它想象成一个有15个格子的储物柜,专门用来存放15个学生的成绩。
  • sum=0:这是一个累加器,用来算总分。注意:这里必须初始化为0,否则计算结果会是乱码(垃圾值)。
  • pass=0:这是一个计数器,用来记录及格的人数,同样初始化为0。
  • max, min:这两个变量是用来存放“最高分”和“最低分”的,暂时还没赋值。
  • float average:用来存放平均分。因为平均分很可能有小数,所以用了浮点型(float)。

📝 第二阶段:录入与安检(输入循环)

  • for 循环:这是程序的“流水线”。它让电脑重复做同一件事15次(从第0个格子到第14个格子)。
  • scanf:负责把键盘输入的数字装进 scores[i] 这个格子里。
  • while 循环(亮点):这是一个“安检机制”
    • 如果输入的成绩小于0或者大于100(比如你不小心输了105),程序就会卡在这里,一直让你重新输入,直到输入正确的数字为止。这大大提高了程序的健壮性。

🧮 第三阶段:核心计算(统计逻辑)

  • 初始化 max 和 min:代码把 max 和 min 都先设为第一个学生的成绩 scores[0]。这是一种很安全的做法。如果不这么做,万一你把 max 初始化为0,而所有学生都考了负分(虽然这里限制了0-100),结果就会出错。
  • sum += scores[i]:这是 shorthand(简写),等于 sum = sum + scores[i],把每个格子里的分数加起来。
  • 比大小
    • 程序拿着当前的成绩去和目前的“擂主”(max 或 min)比。
    • 如果当前的比 max 还大,那它就成为新的 max
    • 如果当前的比 min 还小,那它就成为新的 min
  • pass++:只要分数大于等于60,计数器就加1。

📊 第四阶段:汇报结果(输出)

  • (float)sum:这是一个非常关键的细节!
    • 在C语言中,整数除以整数sum / 15结果还是整数(例如 135/15=9,但 136/15 也会变成 9,小数部分会被直接丢弃)。
    • 加上 (float) 强制类型转换,告诉电脑:“请把 sum 当成小数来计算”。这样 136 / 15 才能得到 9.066... 这样的精确结果。
  • %.2f:这是格式化输出,意思是“保留小数点后两位”。

这段代码写得很规范,主要优点在于:

  1. 输入有验证:使用了 while 循环防止用户输入离谱的分数(如 120 分或 -5 分)。

  2. 逻辑清晰:输入、计算、输出分块明确。

  3. 细节处理到位:使用了 (float) 强制转换来保证平均分的精度,且 sum 和 pass 都正确初始化了。

这是一个非常经典的数组与循环配合使用的案例,也是学习C语言数据处理的基础模版。

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐