init: 12 lessons + outline

This commit is contained in:
chengzi
2026-07-02 16:54:05 +08:00
commit 34bd44cf15
29 changed files with 10036 additions and 0 deletions

View File

@@ -0,0 +1,160 @@
# 第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`,分别求 `1n` 中奇数之和、偶数之和,并计算 `1n` 的乘积。若乘积超过 `10^18`,输出 `TOO LARGE`
**输入格式:** 输入一个正整数。
**输出格式:** 第一行奇数和与偶数和;第二行乘积或 `TOO LARGE`
**数据范围:** `1≤n≤30`
**输入样例:**
```text
5
```
**输出样例:**
```text
9 6
120
```
**解题思路:** 一个 `for` 循环同时完成奇偶累加;累乘前判断 `product>10^18/i`,避免溢出。
**易错提醒:** 范围是 `1n`,循环条件必须为 `i<=n`;累加器和累乘器的初值分别为 0 和 1。
---
### 课堂2数字分析报告【适中】
**题目描述:** 输入一个非负整数,输出它的位数、各位数字之和、最大数字和反转数。
**输入格式:** 输入一个非负整数。
**输出格式:** 依次输出位数、各位和、最大数字、反转数。
**数据范围:** `0≤n≤10^9`
**输入样例:**
```text
50230
```
**输出样例:**
```text
5 10 5 3205
```
**解题思路:** 备份原数,用 `while` 重复"取个位、使用个位、去个位";单独处理 `n=0`
**易错提醒:** 反转后的前导零不会保留0 本身有一位,不能被普通循环漏掉。
---
### 课堂3寻找第一个合格数【适中】
**题目描述:**`1n` 中寻找第一个同时满足"能被 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` 只结束因数检查,不会结束外层枚举。
---
## 课后作业
> 请完成本课对应的课后作业,见编程题文件。