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