调整课次结构:前9节重新排序,新建第06课一维数组,后3节不变

This commit is contained in:
chengzi
2026-07-03 15:27:11 +08:00
parent 30f803784a
commit b973fb7825
29 changed files with 1301 additions and 13 deletions

View File

@@ -0,0 +1,151 @@
# 第3课自定义函数教学拓展
> 等级说明:本课用于拓展代码分解能力,不属于 GESP 一级、二级必考内容。
## 教学目标
- 掌握函数的定义、调用与声明
- 理解形参与实参、返回值、void函数
- 理解函数重载(同名不同参)
- 理解局部变量与全局变量的作用域
## 核心考点:函数的参数、返回值与调用过程
### 考什么
补全函数定义区分________与________并根据函数调用过程判断输出。
### 必须理解
定义函数时括号里的变量叫________调用时传入的值叫________。执行到 `return`函数会________________。普通值传递中形参得到的是实参的________。
### 核心写法
```cpp
int maxValue(int a, int b) {
if (a > b) return ________;
return ________;
}
int ans = maxValue(________, ________);
```
### 常见错误
- 返回类型不是 `void`却忘记________________
- 修改普通形参是否一定改变外部实参________________
- 局部变量可以在哪个范围使用________________
### 判断是否掌握
- [ ] 我能区分形参和实参。
- [ ] 我能说清函数调用与返回的执行顺序。
- [ ] 我能独立编写有参数、有返回值的函数。
---
## 课堂编程题
### 课堂1三个数的最大公约数【适中】
**题目描述:** 编写函数 `gcd(a,b)`,使用辗转相除法求两个正整数的最大公约数。在 `main` 前写函数声明、`main` 后写函数定义,连续调用两次求三个数的最大公约数。
**输入格式:** 输入三个正整数。
**输出格式:** 三个数的最大公约数。
**数据范围:** `1≤a,b,c≤10^9`
**输入样例:**
```text
12 18 30
```
**输出样例:**
```text
6
```
**解题思路:** 先求 `gcd(a,b)`,再把结果与 `c` 求最大公约数,体会函数声明、定义和多次调用。
**易错提醒:** 函数声明必须与定义的返回类型、函数名和参数列表一致。
---
### 课堂2统计区间内的素数【适中】
**题目描述:** 编写有参数、有返回值的函数 `isPrime(n)`。输入 `L``R`,输出闭区间 `[L,R]` 中素数的个数。
**输入格式:** 输入区间的左端点和右端点。
**输出格式:** 素数个数。
**数据范围:** `1≤L≤R≤10000`
**输入样例:**
```text
10 20
```
**输出样例:**
```text
4
```
**解题思路:** 每个实参传入函数后复制给形参 `n`;找到因数时提前返回 `false`,全部检查后返回 `true`
**易错提醒:** 1 不是素数;普通值传递不会修改主函数中的实参。
---
### 课堂3统一格式输出【适中】
**题目描述:** 重载函数 `printLine`:一个版本接收一个整数并输出由该整数重复 5 次组成的一行;另一个版本接收一个字符和次数,输出指定长度的一行。两个函数都没有返回值。
**输入格式:** 依次输入一个整数、一个字符和字符的重复次数。
**输出格式:** 第一行输出 5 个 `x`;第二行输出 `n` 个字符 `c`
**数据范围:** `0≤x≤9``1≤n≤50`
**输入样例:**
```text
7 * 4
```
**输出样例:**
```text
77777
****
```
**解题思路:** 两个函数同名但参数列表不同,构成函数重载;只负责输出,因此返回类型为 `void`
**易错提醒:** 重载依据参数数量或类型区分,不能只靠返回类型区分。
---
### 课堂4全班累计加分【适中】
**题目描述:** 全局变量 `total` 表示全班累计加分。编写 `addScore(x)` 修改它;函数内部再定义同名局部变量 `total`,演示局部变量优先。每次调用后输出全局累计值。
**输入格式:** 第一行输入加分次数;第二行输入每次的加分值。
**输出格式:** 输出每次加分后的全局累计值。
**数据范围:** `1≤n≤20`,每次加分 `110`
**输入样例:**
```text
3
2 5 1
```
**输出样例:**
```text
2 7 8
```
**解题思路:**`::total` 指明全局变量;局部变量仅在函数的大括号内有效。
**易错提醒:** 局部变量会遮住同名全局变量;实际编程应尽量避免故意重名,本题只用于理解作用域。
---
## 课后作业
1.
2.