欢迎光临
我们一直在努力

C++ 核心知识点汇总(第四日)(循环结构)

C++ 核心知识点汇总(第四日)(循环结构)

引言

循环结构是程序的“效率引擎”,用于处理重复执行的逻辑(如遍历、累加、图形打印等),是从“顺序执行”到“批量处理”的关键一步。


一、循环结构核心基础

1. 什么是循环?

程序重复执行一段代码(循环体),直到满足终止条件,核心作用是减少重复代码、提高效率。

2. 三种循环的对比(高频考点)

循环类型语法结构执行流程适用场景核心特点
for for(初始化; 条件; 增量) { 循环体 } 初始化 → 判断条件 → 执行循环体 → 增量 → 重复判断 循环次数明确的场景(如遍历0-99的数) 初始化、条件、增量集中在一行,结构清晰
while while(条件) { 循环体 } 判断条件 → 执行循环体 → 重复判断 循环次数不明确,但终止条件明确的场景(如读取输入直到遇到特定字符) 条件在前,可能一次都不执行
do-while do { 循环体 } while(条件); 执行循环体 → 判断条件 → 重复执行 循环体必须至少执行一次的场景(如菜单选择,必须先显示菜单再判断是否退出) 循环体在前,至少执行一次

二、三种循环的语法与执行流程

1. for 循环:次数明确的“标准化循环”

语法与执行步骤

for (初始化表达式; 条件表达式; 增量表达式) {
// 循环体(条件为真时执行)
}

  • 初始化:仅执行一次,通常用于初始化循环变量(如 int i = 0);
  • 条件判断:若为真,执行循环体;若为假,退出循环;
  • 增量更新:循环体执行后,更新循环变量(如 i++);
  • 重复步骤2-3,直到条件为假。
  • 核心示例(真题高频:0-100偶数求和)

    int sum = 0;
    for (int i = 0; i <= 100; i += 2) {
    sum += i;
    }
    cout << sum; // 输出:2550

    真题坑点:循环变量的作用域

    for 循环中初始化的变量(如 int i)仅在循环体内有效,外部无法访问。

    真题坑点:浮点数循环条件的精度问题

    // 错误:浮点数精度误差导致循环次数不确定
    for (double i = 0; i < 1.0; i += 0.1) {
    cout << i << " ";
    }
    // 建议:用整数控制循环次数,再转换为浮点数
    for (int i = 0; i < 10; i++) {
    double x = i * 0.1;
    cout << x << " ";
    }


    2. while 循环:条件驱动的“灵活循环”

    语法与执行步骤

    while (条件表达式) {
    // 循环体(条件为真时执行)
    }

  • 条件判断:若为真,执行循环体;若为假,退出循环;
  • 重复步骤1,直到条件为假。
  • 核心示例(真题高频:求正整数各位数字之和)

    int N, tnt = 0;
    cin >> N;
    while (N != 0) {
    tnt += N % 10; // 取最后一位数字
    N /= 10; // 去掉最后一位
    }
    cout << tnt; // 输入123 → 输出6

    真题坑点:循环变量未初始化

    int tnt; // 未初始化,值为随机数
    for (int i = 0; i < 10; i++)
    tnt += i;
    cout << tnt; // 输出不确定的值(高频错题)


    3. do-while 循环:必须执行一次的“保底循环”

    语法与执行步骤

    do {
    // 循环体(至少执行一次)
    } while (条件表达式);

  • 执行循环体:无条件执行一次;
  • 条件判断:若为真,重复执行循环体;若为假,退出循环。
  • 核心示例(真题高频:菜单选择)

    int choice;
    do {
    cout << "1. 开始游戏\\n2. 退出\\n请选择:";
    cin >> choice;
    } while (choice != 2); // 直到选择退出才结束

    真题考点:do-while 至少执行一次

    判断题:do-while 语句的循环体至少会执行一次 ✅ 正确


    三、循环控制语句:break / continue / return(核心考点)

    循环控制语句用于改变循环的执行流程,是考试中最易出错的部分。

    1. break:终止当前层次的循环/switch

    • 作用:跳出当前所在的循环或 switch 语句,后续代码不再执行;
    • 多层循环中:仅跳出当前层次的循环(如内层循环的 break 不会影响外层循环);
    • 真题示例:

    for (int i = 5; i < 100; i += 5) {
    if (i % 2 == 0) continue;
    tnt += 1;
    if (i % 3 == 0 && i % 7 == 0) break; // 遇到21时终止循环
    }
    // 执行到i=21时,tnt=10(i=5,15,25,35,45,55,65,75,85,95共10个奇数,第11个i=21触发break)

    2. continue:跳过本次循环,进入下一次判断

    • 作用:跳过当前循环体中 continue 之后的代码,直接进入下一次循环条件判断;
    • 注意:不会终止循环,只是跳过本次循环的剩余语句;
    • 真题示例:

    for (int i = 0; i < 10; i++) {
    if (i % 3) continue; // 非3的倍数跳过
    printf("0#"); // 仅i=0,3,6,9时执行
    }
    // 输出:0#0#0#0#

    3. return:直接终止函数执行

    • 作用:退出当前函数(包括 main 函数),不仅终止循环,还会终止整个函数;
    • 真题示例:

    for (int i = 0; i <= 10; i++) {
    if (i == 5) return 0; // 直接退出main函数,后续代码不再执行
    cout << i;
    }
    // 输出:01234(i=5时退出)

    4. 循环控制语句对比表

    语句作用范围终止循环?多层循环行为
    break 当前层次的循环/switch 仅跳出当前层次
    continue 当前循环的本次迭代 仅跳过本次迭代
    return 整个函数 直接退出函数,所有循环终止

    四、多层循环:嵌套循环的执行与应用

    1. 什么是多层循环?

    一个循环体内包含另一个完整的循环结构,常见于二维场景(如打印图形、遍历二维数组、组合计数)。

    执行顺序:外层循环执行一次,内层循环执行一轮

    // 示例:打印3行4列的星号
    for (int i = 0; i < 3; i++) { // 外层循环:控制行数
    for (int j = 0; j < 4; j++) { // 内层循环:控制列数
    cout << "*";
    }
    cout << endl;
    }
    // 输出:
    // ****
    // ****
    // ****

    2. 高频实战场景(真题必背)

    场景1:打印金字塔图形(高频考点)

    int height = 5;
    for (int i = 0; i < height; i++) {
    // 打印前面的空格:每行空格数 = height – i – 1
    for (int j = 0; j < height i 1; j++) {
    cout << " ";
    }
    // 打印星号:每行星号数 = 2 * i + 1
    for (int k = 0; k < 2 * i + 1; k++) {
    cout << "*";
    }
    cout << endl;
    }
    // 输出:
    // *
    // ***
    // *****
    // *******
    // *********

    场景2:九九乘法表(高频考点)

    for (int hang = 1; hang < 10; hang++) { // 外层:控制行数
    for (int lie = 1; lie < hang + 1; lie++) { // 内层:控制列数
    printf("%d*%d=%d ", lie, hang, lie * hang);
    }
    printf("\\n");
    }
    // 输出:
    // 1*1=1
    // 1*2=2 2*2=4
    // 1*3=3 2*3=6 3*3=9
    // …

    3. 多层循环优化技巧

    • 减少内层循环次数:通过数学推导缩小内层循环的范围(如场景3中 y >= x、z >= y 减少无效遍历);
    • 避免重复计算:将内层循环中不变的计算移到外层(如 height – i – 1 可在外层计算后存储);
    • 及时终止循环:在内层循环中使用 break 提前终止无效迭代。

    六、实战场景与真题解析(必背)

    1. 场景1:阶乘求和(真题高频)

    int N;
    cin >> N;
    int tnt = 0, nowNum = 1;
    for (int i = 1; i < N + 1; i++) {
    nowNum *= i; // 计算当前i的阶乘
    tnt += nowNum; // 累加阶乘
    }
    cout << tnt; // 输入3 → 输出:1!+2!+3!=1+2+6=9

    2. 场景2:判断位增数(真题高频)

    int N;
    cin >> N;
    int n2 = N % 10; // 先取最后一位
    N /= 10;
    while (N) {
    int n1 = N % 10;
    if (n1 >= n2) { // 前一位 >= 后一位,不是位增数
    cout << 0;
    return 1;
    }
    n2 = n1;
    N /= 10;
    }
    cout << 1; // 输入123 → 输出:1

    3. 场景3:输出能被7整除但不能被3整除的数(真题高频)

    for (int i = 0; i <= 100; i++) {
    if (i % 7 == 0 && i % 3 != 0) {
    cout << i << endl;
    }
    }
    // 等价写法:!(i % 7) && i % 3 != 0 或 i % 7 == 0 && !(i % 3 == 0)
    // 错误写法:i % 7 && i % 3(表示i不能被7整除且不能被3整除)


    总结

  • 三种循环的核心区别在于执行时机:for 次数明确,while 条件在前,do-while 至少执行一次;
  • 循环控制语句中,break 终止当前循环,continue 跳过本次迭代,return 直接退出函数;
  • 多层循环的执行顺序是“外层一次,内层一轮”,常见于图形打印、组合计数等二维场景;
  • 常见坑点包括循环变量未初始化、死循环、continue/break 误用、循环条件错误,需重点防范;
  • 选择循环时,优先考虑业务场景:次数明确用 for,条件明确用 while,必须执行一次用 do-while。
  • 赞(0)
    未经允许不得转载:171主机测评 » C++ 核心知识点汇总(第四日)(循环结构)
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址