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

4.2 KiB
Raw Blame History

第3课自定义函数教学拓展

等级说明:本课用于拓展代码分解能力,不属于 GESP 一级、二级必考内容。

教学目标

  • 掌握函数的定义、调用与声明
  • 理解形参与实参、返回值、void函数
  • 理解函数重载(同名不同参)
  • 理解局部变量与全局变量的作用域

核心考点:函数的参数、返回值与调用过程

考什么

补全函数定义区分________与________并根据函数调用过程判断输出。

必须理解

定义函数时括号里的变量叫________调用时传入的值叫________。执行到 return函数会________________。普通值传递中形参得到的是实参的________。

核心写法

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

输入样例:

12 18 30

输出样例:

6

解题思路: 先求 gcd(a,b),再把结果与 c 求最大公约数,体会函数声明、定义和多次调用。

易错提醒: 函数声明必须与定义的返回类型、函数名和参数列表一致。


课堂2统计区间内的素数【适中】

题目描述: 编写有参数、有返回值的函数 isPrime(n)。输入 LR,输出闭区间 [L,R] 中素数的个数。

输入格式: 输入区间的左端点和右端点。

输出格式: 素数个数。

数据范围: 1≤L≤R≤10000

输入样例:

10 20

输出样例:

4

解题思路: 每个实参传入函数后复制给形参 n;找到因数时提前返回 false,全部检查后返回 true

易错提醒: 1 不是素数;普通值传递不会修改主函数中的实参。


课堂3统一格式输出【适中】

题目描述: 重载函数 printLine:一个版本接收一个整数并输出由该整数重复 5 次组成的一行;另一个版本接收一个字符和次数,输出指定长度的一行。两个函数都没有返回值。

输入格式: 依次输入一个整数、一个字符和字符的重复次数。

输出格式: 第一行输出 5 个 x;第二行输出 n 个字符 c

数据范围: 0≤x≤91≤n≤50

输入样例:

7 * 4

输出样例:

77777
****

解题思路: 两个函数同名但参数列表不同,构成函数重载;只负责输出,因此返回类型为 void

易错提醒: 重载依据参数数量或类型区分,不能只靠返回类型区分。


课堂4全班累计加分【适中】

题目描述: 全局变量 total 表示全班累计加分。编写 addScore(x) 修改它;函数内部再定义同名局部变量 total,演示局部变量优先。每次调用后输出全局累计值。

输入格式: 第一行输入加分次数;第二行输入每次的加分值。

输出格式: 输出每次加分后的全局累计值。

数据范围: 1≤n≤20,每次加分 110

输入样例:

3
2 5 1

输出样例:

2 7 8

解题思路:::total 指明全局变量;局部变量仅在函数的大括号内有效。

易错提醒: 局部变量会遮住同名全局变量;实际编程应尽量避免故意重名,本题只用于理解作用域。


课后作业