C语言实战:学生成绩统计与分析

参照右表,将五个同学的三门成绩分别存储在二维数组中,然后分别算出三门课程的平均分、最高分和最低分。

#include <stdio.h>
int main()
{
const char *n[5] = {"王一", "李二", "张三", "李四", "王五"};
int a[5][3] = { {80, 75, 70},
{92, 88, 80},
{66, 70, 84},
{78, 96, 87},
{58, 76, 94}};
float avg[3] = {0};
int max[3] = {0};
int min[3] = {100,100,100};
printf(" 姓名 代数 C语言 数据库 \n");
for (int i = 0; i < 5; i++)
{
printf(" %-4s %-4d %-4d %-4d \n",
n[i],
a[i][0],
a[i][1],
a[i][2]);
}
printf("\n");
for (int i = 0; i < 5; i++)
{
for (int j = 0; j < 3; j++)
{
avg[j] += a[i][j];
if (a[i][j] > max[j])
{
max[j] = a[i][j];
}
if (a[i][j] < min[j])
{
min[j] = a[i][j];
}
}
}
for (int j = 0; j < 3; j++)
{
avg[j] /= 5;
}
printf("成绩统计结果:\n");
printf("1. 代数:\n");
printf(" 平均分:%.1f\n 最高分:%d\n 最低分:%d\n\n", avg[0], max[0], min[0]);
printf("2. C语言:\n");
printf(" 平均分:%.1f\n 最高分:%d\n 最低分:%d\n\n", avg[1], max[1], min[1]);
printf("3. 数据库:\n");
printf(" 平均分:%.1f\n 最高分:%d\n 最低分:%d\n", avg[2], max[2], min[2]);
return 0;
}

我们把这段代码想象成一个**"班级成绩统计员"**的工作流程,用大白话来拆解它。

这段代码其实就做了三件事:记账(存数据) -> 算账(处理数据) -> 报账(输出结果)

🎬 场景一:记账(数据准备)

想象你手里拿着一张表格,准备开始工作。

  1. 准备名单 (const char *n[5])

    你先在纸上写好了5个同学的名字:王一、李二、张三、李四、王五。这就好比代码里的 n 数组。

  2. 准备成绩单 (int a[5][3])

    你画了一个 5行3列 的格子,把大家原本的成绩填了进去。

    • 每一行代表一个学生。
    • 每一列代表一门课(代数、C语言、数据库)。
  3. 准备计算器**(avg, max, min)** :

    你拿了三个小本子,分别用来记:

    • avg (平均分):先记总分,最后算平均。
    • max (最高分):用来记录目前为止看到的最高分。
    • min (最低分):用来记录目前为止看到的最低分。
    • 特别注意 :把 min 的本子一开始全写上了 100。这招很聪明!因为只要有人考不到满分,分数肯定比100小,就能顺利记下来。如果写成0,那就永远记不到最低分了(因为成绩不可能比0还低)。

📢 场景二:报账第一回合(打印原始表格)

在开始计算之前,程序先要把原始数据展示给大家看。

  • 代码用了一个循环,把刚才准备好的"名字"和"成绩"一行一行打印出来。
  • 排版小技巧 :代码里用了 %-4s 这种写法,意思就是"给这个名字留4个格子的位置,并且左对齐"。这样打印出来的表格才会整整齐齐,不会歪歪扭扭。

🧮 场景三:算账(计算统计值)

这是程序的核心算法部分,通过一个嵌套循环实现。它要遍历每一个学生的每一门课。想象你在阅卷子:

  1. 双重循环(大扫除式检查)

    • 外层循环**(for (int i = 0; i < 5; i++))**:代表"走到第几个学生面前"。
    • 内层循环**(for (int j = 0; j < 3; j++))**:代表"检查这个学生的第几门课"。
  2. 累加总分 (avg[j] += a[i][j])

    每看到一门成绩,就把它扔进对应科目的"存钱罐"(avg数组)里。将当前学生 i 的第 j 门课成绩累加到 avg[j] 中。此时 avg 数组存储的是每门课的总分。

  3. 打擂争霸 (if (a[i][j] > max[j]))

    每看到一个成绩,就拿它和 **max**里记录的"当前老大"(最高分)比一比。

    • 如果新成绩更大?那你就是新老大!更新 max
    • **如果没老大高?**那就忽略
  4. 比惨大会 (if (a[i][j] < min[j]))

    每看到一个成绩,就拿它和 **min**里记录的"当前倒数第一"(最低分)比一比。

    • 如果新成绩更小?那你就是新的倒数第一!更新 min

📝 场景四:算平均分

等把所有卷子都看完后,avg 数组里存的是5个人的总分。

这时候,程序做了一个除法:avg[j] /= 5

意思就是:总分 ÷ 5个人 = 平均分

📢 场景五:报账第二回合(输出统计结果)

最后,程序把计算好的结果,分门别类地打印出来。

它分别打印了"代数"、"C语言"、"数据库"三门课的:

  • 使用 %.1f 格式化输出平均分,保留一位小数。平均分(保留1位小数)。
  • 最高分。
  • 最低分。
相关推荐
Evand J2 分钟前
【MATLAB代码介绍】三维环境下的IMM(交互式多模型),使用CV和CT模型,EKF作为滤波,目标高精度、自适应跟踪定位
开发语言·算法·matlab·imm·代码介绍
网安INF6 分钟前
数据结构第四章复习:树与二叉树
数据结构
ZC跨境爬虫6 分钟前
3D 地球卫星轨道可视化平台开发 Day12(解决初始相位拥挤问题,实现卫星均匀散开渲染)
前端·javascript·算法·3d·json
mount_myj7 分钟前
填数【C语言】
c语言
子午12 分钟前
蔬菜识别~Python+深度学习+卷积网络算法+图像识别+2026原创+蔬菜识别
python·深度学习·算法
子午14 分钟前
文本情感识别系统~Python+textCNN算法+深度学习+人工智能
人工智能·python·算法
我是无敌小恐龙20 分钟前
Java SE 零基础入门 Day02 运算符与流程控制超详细笔记
java·数据结构·spring boot·笔记·python·spring·spring cloud
三品吉他手会点灯25 分钟前
C语言学习笔记 - 4.C概述 - C的特点
c语言·笔记·学习
pearlthriving28 分钟前
STL容器及其底层
开发语言·c++·算法
念越30 分钟前
算法每日一题 Day04|快慢双指针法解决环形链表问题
数据结构·算法·链表