# 第2课:循环结构 + 数位拆解 ## 教学目标 - 掌握 for、while 和 do-while 循环的使用场景 - 掌握数位拆解技巧(取个位、去个位) - 能用循环判断回文数 - 了解水仙花数的判断方法 ## 核心考点:循环边界与数位拆解 ### 考什么 判断循环次数和结束条件,并用循环完成求各位和、________数字、判断回文数等任务。 ### 必须理解 次数明确时常用________;结束条件更自然时常用________。数位拆解每轮依次完成:________、使用这一位、________。如果后面还要使用原数,必须先________。 ### 核心写法 ```cpp int num = ________; int rev = 0; while (num > 0) { int d = num ________ 10; rev = rev * ________ + d; num ________ 10; } ``` ### `do-while` 循环 `do-while` 的特点:循环体至少执行 ______ 次。 ```cpp do { // 循环体 } while (条件); // 结尾不要漏掉 ______ ``` ### 常见错误 - 忘记更新循环变量会发生什么?________________ - `i < n` 与 `i <= n` 的执行次数有什么区别?____________ - 为什么反转前要备份原数?________________ ### 判断是否掌握 - [ ] 我能判断循环的起点、终点和次数。 - [ ] 我能写出取个位与去个位。 - [ ] 我能独立完成数字反转。 --- ## 课堂编程题 ### 课堂1:奇偶分组统计【适中】 **题目描述:** 输入正整数 `n`,分别求 `1~n` 中奇数之和、偶数之和,并计算 `1~n` 的乘积。若乘积超过 `10^18`,输出 `TOO LARGE`。 **输入格式:** 输入一个正整数。 **输出格式:** 第一行奇数和与偶数和;第二行乘积或 `TOO LARGE`。 **数据范围:** `1≤n≤30`。 **输入样例:** ```text 5 ``` **输出样例:** ```text 9 6 120 ``` **解题思路:** 一个 `for` 循环同时完成奇偶累加;累乘前判断 `product>10^18/i`,避免溢出。 **易错提醒:** 范围是 `1~n`,循环条件必须为 `i<=n`;累加器和累乘器的初值分别为 0 和 1。 --- ### 课堂2:数字分析报告【适中】 **题目描述:** 输入一个非负整数,输出它的位数、各位数字之和、最大数字和反转数。 **输入格式:** 输入一个非负整数。 **输出格式:** 依次输出位数、各位和、最大数字、反转数。 **数据范围:** `0≤n≤10^9`。 **输入样例:** ```text 50230 ``` **输出样例:** ```text 5 10 5 3205 ``` **解题思路:** 备份原数,用 `while` 重复"取个位、使用个位、去个位";单独处理 `n=0`。 **易错提醒:** 反转后的前导零不会保留;0 本身有一位,不能被普通循环漏掉。 --- ### 课堂3:寻找第一个合格数【适中】 **题目描述:** 从 `1~n` 中寻找第一个同时满足"能被 7 整除、不能被 5 整除、各位和大于 10"的数。跳过所有含数字 4 的数;找到后立即输出,否则输出 `NONE`。 **输入格式:** 输入一个正整数。 **输出格式:** 第一个合格数或 `NONE`。 **数据范围:** `1≤n≤100000`。 **输入样例:** ```text 100 ``` **输出样例:** ```text 77 ``` **解题思路:** 外层枚举数字;拆位检查含 4 和各位和。含 4 时 `continue`,找到答案时 `break`。 **易错提醒:** `continue` 跳过本轮,`break` 结束整个当前循环,两者含义不同。 --- ### 课堂4:区间素数统计【适中·双层循环】 **题目描述:** 输入 `L` 和 `R`,输出闭区间内的所有素数及素数个数。 **输入格式:** 输入区间的左端点和右端点。 **输出格式:** 第一行按升序输出素数;第二行输出个数。没有素数时第一行输出 `NONE`。 **数据范围:** `1≤L≤R≤10000`。 **输入样例:** ```text 10 20 ``` **输出样例:** ```text 11 13 17 19 4 ``` **解题思路:** 外层枚举候选数,内层从 2 检查到平方根;找到因数立即 `break`。 **易错提醒:** 1 不是素数;内层的 `break` 只结束因数检查,不会结束外层枚举。 --- ## 课后作业 > 请完成本课对应的课后作业,见编程题文件。