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

Level 1:循环结构

作者: 作者的头像   huolong , 时间:2022-03-07 12:24:24 , 所有人可见, 阅读  103

这份讲义将循环结构的核心语法、逻辑思想(枚举、标记、累加)与针对性练习结合,旨在帮助你彻底掌握 C++ 循环控制。


C++ 循环结构程序设计通关讲义

第一部分:循环基础与 while 系列

1. 核心概念

一个完整的循环通常包含四个要素: 1. 初始化:循环开始前变量的初始状态(如 int i = 1;)。 2. 条件表达式:判断循环是否继续(如 i <= 100)。 3. 循环体:重复执行的代码块。 4. 步长/更新:每次循环后变量的变化(如 i++),防止死循环。

2. while 循环(条件循环)

特点:先判断,后执行。可能一次都不执行。 * 不定行输入:while (cin >> n) 或 while (scanf("%d", &n) != EOF)。 * 次数循环简写:while (n--)。表示循环 n 次,n 减到 0 时停止。

3. do-while 循环

特点:先执行,后判断。至少执行一次。

do {
    // 循环体
} while (条件); // 注意这里有分号!

✍️ 随堂练习

Q1. int n = 5; while(n--) { cout << n; } 的输出结果是?

解析:n-- 是后置自减。第一次判断 5 为真,进入后 n 变 4;最后一次判断 1 为真,进入后 n 变 0。 答案:43210

Q2. [填空] 若想让循环体至少执行一次,应优先选择 __ 循环。


第二部分:for 循环(次数循环)

1. 语法框架

for (初始化; 条件; 步长) {
    循环体;
}
  • 多变量控制:for(int i=1, j=10; i < j; i++, j--)。
  • 枚举思想:把所有可能性都“数”一遍。例如从 1 到 n 逐个检查。

2. 典型应用

  • 累加:sum += i; (初始 sum=0)
  • 累乘:fact *= i; (初始 fact=1)

✍️ 随堂练习

Q3. 执行以下代码后,sum 的值是多少?

int sum = 0;
for (int i = 1; i <= 5; i += 2) {
    sum += i;
}

解析:i 的取值为 1, 3, 5。1+3+5 = 9。

Q4. [编程] 用 for 循环计算 1 到 10 的乘积(阶乘)。

long long res = 1;
for (int i = 1; i <= 10; i++) {
    res *= i;
}

第三部分:循环控制(break 与 continue)

1. 区别对比

  • break:彻底结束。跳出当前整个循环体。
  • continue:跳过本次。直接进入下一次条件的判断或步长更新。

2. 打标记思想 (Flag)

用于记录“是否发生过某事”。 * 例子:判断质数。只要发现一个约数,就把标志位 is_ok 设为 false 并 break。


✍️ 随堂练习

Q5. 下面程序段的输出是?

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

解析:i=1(输1), i=2(输2), i=3(跳过), i=4(输4), i=5(结束)。 答案:124


第四部分:嵌套循环(多重循环)

1. 基本思想

外层循环执行一次,内层循环执行一整套。常用于处理二维数据、图形打印或组合问题。 * 例子:打印 3x3 星号矩形

for (int i = 1; i <= 3; i++) {       // 控制行数
    for (int j = 1; j <= 3; j++) {   // 控制每行打印多少个
        cout << "*";
    }
    cout << endl; // 换行
}

第五部分:综合过关练习(模拟考)

1. 选择题

执行 for(int i=0; i<10; i++); 后,变量 i 的值是( ) A. 9
B. 10
C. 11
D. 编译错误

解析:循环条件是 i < 10,当 i 增加到 10 时条件不成立跳出。

2. 代码分析题

写出下列代码的输出:

int count = 0;
for (int i = 1; i <= 3; i++) {
    for (int j = 1; j <= i; j++) {
        count++;
    }
}
cout << count;

解析:i=1 时 j 循环 1 次;i=2 时 j 循环 2 次;i=3 时 j 循环 3 次。总共 1+2+3=6 次。

3. 填空题

在不确定用户会输入多少个整数时,我们可以使用 while(________ >> n) 来读取数据。

4. 编程思维题(质数判断改进)

判断 n 是否为质数时,for 循环的条件 i < n 可以优化为 i <= sqrt(n)。为什么?

提示:如果 $n$ 有一个大于 $\sqrt{n}$ 的因数,则必然对应一个小于 $\sqrt{n}$ 的因数。

5. 找错误

指出下列死循环的原因:

for (int i = 10; i > 0; i++) {
    cout << i << endl;
}

答案:初始化 i=10,步长是 i++,i 会越来越大,永远满足 i > 0 的条件。


💡 学习总结

  1. 计数用 for:知道具体循环多少次。
  2. 直到型用 while:只知道什么时候停止(如“直到读到文件末尾”)。
  3. 找东西用 break:找到了就停。
  4. 排除法用 continue:这个不要,看下一个。
  5. 初始化要注意:累加初始为 0,累乘初始为 1。

—— 本文来自火龙信奥(义乌睿码科技):义乌青少年信息学奥赛与编程教育平台,专注 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次

微信登录

微信登录二维码

正在生成二维码...

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

绑定手机号

📱

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

请您尽快绑定手机号码