内容正文:
课题
输出100以内的素数
课时
2课时(90 min)
教学目标
知识目标:
(1)掌握函数的嵌套调用和递归调用方法
(2)掌握局部变量和全局变量的区别和典型用法
(3)了解变量的存储类别
能力目标:
逐步建立模块化的程序设计思想
素质目标:
发扬精益求精的工匠精神,养成严谨认真的工作态度
教学重难点
教学重点:函数的嵌套调用,函数的递归调用,局部变量与全局变量,变量的存储类别
教学难点:函数递归调用的构建
教学方法
问答法、讨论法、讲授法、实践法
教学用具
电脑、投影仪、多媒体课件、教材
教学过程
主要教学内容及步骤
课前任务
【教师】布置课前任务,和学生负责人取得联系,让其提醒同学通过文旌课堂APP或其他学习软件,完成课前任务
同学们已经学过了if-else语句的嵌套,请同学们以此类比,查找函数嵌套的定义。
【学生】完成课前任务
考勤
【教师】使用文旌课堂APP进行签到
【学生】班干部报请假人员及原因
问题导入
【教师】请同学们扫码观看“如何判断素数”视频(详见教材),讨论并回答以下问题:
什么是素数,判断一个数是否为素数的流程图如何绘制?
【学生】思考、举手回答
传授新知
【教师】讲解函数的嵌套调用,函数的递归调用,局部变量与全局变量,变量的存储类别
一、函数的嵌套调用
✈【教师】多媒体观看“函数的嵌套调用”视频(详见教材),让学生理解函数嵌套调用的概念,函数嵌套调用的使用方法
C程序中函数的定义是相互平行的,在定义函数时,一个函数不能包含另一个函数。但是,一个函数在被调用的过程中可以调用其他函数,即可以嵌套调用。
【课堂练习】
✈【教师】出示【例5-4】,组织学生编写代码
使用函数的嵌套调用,计算两个正整数m和n的最小公倍数。
✈【学生】编写程序、运行、对比结果
✈【教师】解析例题
假设计算m和n的最小公倍数和最大公约的函数分别为sct(m,n)和gcd(m,n)。由数学知识可知,两个正整数m和n的最小公倍数等于两数之积除以它们的最大公约数,公式为
因此,定义主函数调用sct( )函数,sct( )函数再调用gcd( )函数。
……(参考程序详见教材)
【运行结果】程序运行结果如图5-6所示(详见教材)
【程序说明】 由于scd( )函数的定义在主函数之后,所以在主函数的开始要对scd( )函数进行声明;同样,在scd( )函数的开始也要对gcd( )函数进行声明。
二、函数的递归调用
✈【教师】多媒体观看“函数的递归调用”视频(详见教材),让学生了解函数递归调用的形式,递归调用的使用方法
【课堂讨论】
✈【教师】请学生分组讨论以下问题
请同学们以小组为单位,讨论函数嵌套调用时,自己是否可以调用自己?
✈【学生】讨论、总结、回答
✈【教师】总结学生的回答
递归调用分为直接递归调用和间接递归调用两类。直接递归调用是在调用f( )函数的过程中直接调用f( )函数;间接递归调用是在调用f( )函数的过程中调用f1( )函数,而在调用f1( )函数的过程中又调用f( )函数。
【课堂讨论】
✈【教师】请学生分组讨论以下问题
请同学们继续以小组为单位,讨论函数嵌套调用时,无终止地调用自身,会导致什么后果,及如何避免这种情况的发生。
✈【学生】讨论、总结、回答
✈【教师】总结学生的回答
【课堂练习】
✈【教师】出示【例5-5】,组织学生编写代码
用递归调用方法求s=1+2+3+…+n的值。
✈【学生】编写程序、运行、对比结果
✈【教师】解析例题
这是一个等差数列求和的问题,故前n项的和为前n−1项的和加上n。编写程序,可定义一个函数sum( ),其返回值为sum(n-1)+n,当n=1时,其返回值为1。
……(参考程序详见教材)
【运行结果】程序运行结果如图5-9所示(详见教材)
三、局部变量与全局变量
✈【教师】介绍变量作用域的概念,局部变量与全局变量的定义
任何变量都有其有效作用范围,称为变量的作用域。根据作用域的不同,可将变量分为局部变量和全局变量。
1.局部变量
局部变量也称“内部变量”,它是在函数内定义并使用的,之前程序中用到的变量绝大多数属于局部变量。
2.全局变量
全局变量也称“外部变量”,它是在函数外部定义的变量,全局变量可以为本文件中其他函数所共有。它的有效范围从定义变量的位置开始,到本源程序文件结束。
全局变量提供了函数间数据联系的渠道,有效地解决了函数只能通过return语句带给主调函数一个运算结果的问题。
【课堂练习】
✈【教师】出示【例5-6】,组织学生编写代码
分析以下程序的运行结果。
✈【学生】编写程序、运行、对比结果
✈【教师】解析例题
……(参考程序详见教材)
【运行结果】程序运行结果如图5-10所示(详见教材)
【程序分析】在此程序中,定义了