火龙信奥
  • 分享
  • 课程
  • 题库
  • CSES HARD
    • GESP
    • CSP
  • 打卡
    • 代码对战
    • 快速对战
  • 题单
  • e课堂
  • 团队
  • 荣誉墙
  • 商城
  • 登录 / 注册

第 9 课《循环结构》

作者: 作者的头像   huolong , 时间:2026-09-07 14:05:24 , 所有人可见, 阅读  2

第 9 课:循环结构

本课学习目标: 1. 彻底读懂 for 循环、while 循环和 do-while 循环的执行过程。 2. 掌握循环三要素:初始化、条件、更新,学会避免死循环。 3. 熟练掌握循环中累加(sum += i)与计数(湿 cnt++)的标准模型。 4. 深刻理解并区分 break(直接结束整个循环)与 continue(跳过当前这一轮,进入下一轮)。 5. 掌握用 while 循环处理数位拆分(取个位、去个位)的经典套路。


一、 为什么要用循环结构?

如果我们要输出 1 到 5,手写 5 行 cout 还能应付:

cout << 1 << " ";
cout << 2 << " ";
cout << 3 << " ";
cout << 4 << " ";
cout << 5 << " ";

如果要输出 1 到 100 呢?手写 100 行显然不现实。循环结构就是用来让计算机帮我们“重复执行某段代码”的利器。


二、 最常见的 for 循环

for 循环是一级考试中最常出现的循环结构。

1. 基本语法结构

for (初始化; 条件; 更新) {
    // 循环体(重复执行的代码)
}

2. 执行步骤拆解(以输出 1 到 5 为例)

for (int i = 1; i <= 5; i++) {
    cout << i << " ";
}
  • 第 1 步(初始化):执行 int i = 1;(整个循环只在最开始跑这一次)。
  • 第 2 步(条件判断):检查 i <= 5 是否成立。如果成立,进入第 3 步;如果不成立,循环直接结束。
  • 第 3 步(执行循环体):打印当前的 i。
  • 第 4 步(更新):执行 i++;(此时 i 变成 2)。
  • 第 5 步:回到第 2 步继续循环,直到条件不成立退出。

📌 循环次数怎么算? * for(int i = 1; i <= 10; i++) ➡️ i 取值 1, 2, 3, ..., 10,共执行 10 次。 * for(int i = 0; i < 10; i++) ➡️ i 取值 0, 1, 2, ..., 9,共执行 10 次。


三、 while 循环与数位处理

while 循环通常适用于循环次数不确定、只知道结束条件的场景。

1. 基本语法结构

int i = 1;      // 1. 初始化
while (i <= 5) { // 2. 条件判断
    cout << i;
    i++;        // 3. 更新(千万别漏,否则死循环!)
}

2. 🌟 必考杀手锏:while 处理整数数位(黄金模板)

在一级考试中,经常要求“输入一个整数,求它的数位和 / 反转数字 / 统计奇数位”。这依赖 while 的经典数位拆分法:

int n;
cin >> n;
while (n != 0) {
    int d = n % 10; // 步骤1:用 % 10 取出当前个位数
    // 这里可以对 d 进行处理(如累加、判断奇偶)
    n /= 10;        // 步骤2:用 / 10 悄悄去掉个位数,向右进位
}
  • 例如输入 123:
  • 第 1 轮:n = 123,个位 d = 3,之后 n 变成 12。
  • 第 2 轮:n = 12,个位 d = 2,之后 n 变成 1。
  • 第 3 轮:n = 1,个位 d = 1,之后 n 变成 0。
  • n == 0 循环结束。完美把每一位剥离出来!

四、 累加与计数模型(考试核心考点)

  • 累加模型(求总和): cpp int sum = 0; // ⚠️ 注意:累加器必须初始化为 0! for (int i = 1; i <= 5; i++) { sum += i; // 等价于 sum = sum + i; }
  • 计数模型(数个数): cpp int cnt = 0; // ⚠️ 计数器也必须初始化为 0! for (int i = 1; i <= 10; i++) { if (i % 2 == 0) { cnt++; // 满足条件时,个数加 1 } }

五、 break 与 continue 的本质区别

这是程序阅读题和判断题的常客:

关键字 英文直译 核心作用 代码表现
break 中断 / 逃跑 直接彻底结束整个循环,后面的轮次全都不过了。 见下方对比代码 1
continue 继续 / 跳过 跳过当前这一轮循环剩下的代码,直接强行进入下一轮。 见下方对比代码 2

🔍 代码直观对比:

// 1. 使用 break
for (int i = 1; i <= 5; i++) {
    if (i == 3) break;
    cout << i << " ";
}
// 输出结果:1 2  (当 i=3 时直接整个循环罢工了)

// 2. 使用 continue
for (int i = 1; i <= 5; i++) {
    if (i == 3) continue;
    cout << i << " ";
}
// 输出结果:1 2 4 5 (当 i=3 时只跳过了当轮的cout,接着去执行 i=4 去了)

六、 GESP 一级真题与例题精讲

练一练 1:for 循环与累加

【题目】 下面程序输出是( )。

int sum = 0;
for (int i = 1; i <= 5; i++)
    sum += i;
cout << sum;

A. 5
B. 10
C. 15
D. 20

正确答案:C 名师解析: 循环变量 i 依次取 1, 2, 3, 4, 5。sum 依次加上这些数:0 + 1 + 2 + 3 + 4 + 5 = 15。最终输出 15。


练一练 2:break 提前终止循环

【题目】 下面程序输出是( )。

for (int i = 1; i <= 5; i++) {
    if (i == 3)
        break;
    cout << i;
}

A. 12
B. 123
C. 1245
D. 12345

正确答案:A 名师解析: 当 i = 1, 2 时正常输出;当 i = 3 时触发 if (i == 3),执行 break,循环立即彻底终止,3 及其后面的 4, 5 均不输出。所以屏幕上打印出 12。


练一练 3:while 数位求和

【题目】 输入 123 后,下面程序的输出是( )。

int n;
cin >> n;
int sum = 0;
while (n != 0) {
    sum += n % 10;
    n /= 10;
}
cout << sum;

A. 123
B. 6
C. 3
D. 1

正确答案:B 名师解析: 标准的数位求和模板: * 第 1 轮:取个位 3 加到 sum(sum=3),n 变成 12; * 第 2 轮:取个位 2 加到 sum(sum=5),n 变成 1; * 第 3 轮:取个位 1 加到 sum(sum=6),n 变成 0; * 循环结束,输出 sum 的值为 6(即 $1+2+3=6$)。

—— 本文来自火龙信奥(义乌睿码科技):义乌青少年信息学奥赛与编程教育平台,专注 CSP-J/S、NOIP、GESP 竞赛培训,线上线下融合教学,助力编程升学。网址:hlcoding.com

关于火龙

  • 关于我们
  • 学员获奖
  • 预约试听
  • ACM课程
  • CSP课程
  • 学习指南

帮助中心

  • 用户协议
  • 打字练习 HOT
  • 在线画图
  • DevC++下载
  • CSP报名
  • GESP官网

推荐课程

  • C++零基础入门(可试看)
  • C++进阶提升
  • GESP考级辅导
  • GESP打卡
  • CSP-J/S打卡

公众号

火龙信奥公众号二维码

© 2017-2026 义乌市睿码科技有限公司版权所有 浙ICP备2021013995号

火龙信奥
请输入登录信息


请完成安全验证
验证码底图 滑块
向右拖动滑块完成验证
请输入用户名 / 绑定的手机号码



请输入注册信息(手机号验证码注册)





验证码5分钟有效,60秒内不可重复获取,每日最多3次

微信登录

微信登录二维码

正在生成二维码...

账号已过期,请续期。
去续期

绑定手机号

📱

为了更好地保护您的账号安全,享受完整的平台服务

请您尽快绑定手机号码