Files
project1/第05课-自定义函数/教案-学生版.md

152 lines
4.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 第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.