一次函数的入门教学

2024-08-17

一次函数的入门教学(精选七篇)

一次函数的入门教学 篇1

下面我就谈谈如何进行一次函数的入门教学。

一、函数

变量和函数, 是八年级学生初次接触到的内容, 在认知方式和思维习惯上对学生都有较高的要求, 入门会有一定的困难。我们要做好以下工作。

1. 充分利用已有知识, 减少对新概念接受的困难。

我们在代数式、方程等内容的探索中, 已经渗透了变化的思想, 在教学中, 要联系代数式的值和方程中未知数的求解, 去理解常量与变量, 进而体会函数的思想。

2. 利用丰富的实例, 感知运动变化问题。

在教学中, 我们要多举一些具体实例, 让学生感知这种变化。例如, 列车在行驶过程中, 速度不变, 路程随时间的变化而变化, 当时间确定时, 路程也随之确定;水库的蓄水量随水位的变化而变化, 当水位稳定不变时, 蓄水量也稳定不变。

教师举例后, 一定要给学生自由发言的时间和机会, 让学生多举一些生活中的实例, 教师从中甄别。

3. 让学生动手实验, 在丰富有趣的活动中接受函数的思想。

教师可以让学生在学习过程中亲身经理和体验, 去体会函数。例如, 学生经历用火柴搭小鱼的趣味活动, 体会火柴根数与所搭小鱼条数之间的变化过程。再如, 让学生向平静的水面投掷一枚石子, 所激起的波纹, 它的面积随着半径的变化而变化, 随着半径的确定而确定。

教师要充分利用学生搜集的素材, 鼓励学生自己进行交流讨论, 不要怕耽搁时间, 也不要担心学生的归纳会影响知识的完整与严密, 要花大力气去设置问题, 组织和引导学生进行交流和探讨。最后, 由教师给出函数的定义, 然后由学生再一次通过前面的素材, 去加深对函数概念的理解。

二、一次函数

对于一次函数的教学, 要引导学生从实际问题出发, 积极构建函数模型———一次函数, 正比例函数。运用函数模型去研究函数的图像和性质。

1. 模型建立。

通过研究加油收费和估计加油过程中, 油箱里的油量问题, 建立正比例函数和一次函数模型。

出示一份当地电信部门的宣传资料, 通过对电信收费问题的探索, 再次出现一次函数的表达形式。

速度一定, 通过对汽车所走路程问题的探索, 来印证一次函数的表达形式。

教师可以根据以上情景 (还可多举一些) , 引导学生归纳出一次函数, 从而顺利完成数学建模。

课本例1设置的目的是要求学生能将文字语言表述的函数关系转化为数学符号语言 (一次函数) 。

2. 模型研究。

函数模型建立以后, 接着要运用一次函数模型, 来解决一次函数的图像和性质问题。

首先, 要重视学生画图能力的训练, 可通过一个具体的一次函数讲解画函数图像的基本方法:列表, 描点, 连线。教学时, 不能省略学生自己画图像这一环节, 否则, 将不利于学生今后对函数这一重要知识的学习。

其次, 要引导学生如何从函数图像去归纳函数的性质。一次函数是“数形结合”的良好范例, 要通过一次函数图像特征, 帮助学生从“形”上领会函数图像: (1) 上升、下降的意义; (2) k、b的符号与图像的关联; (3) 函数值的范围与自变量的取值范围的图像体现; (4) 两函数的交点坐标问题。

3. 模型应用。

数学来源实际生活生产活动, 又必将服务于生产生活。在数学模型建立充分研究其图像与性质之后, 还有一个重要的环节, 就是回归实际, 用所学函数知识, 解决实际问题。

例1:铁路部门规定, 旅客乘车按规定可随身携带一定重量的行李, 如果超过规定, 则需购行李票。该行李票y (元) 是行李重量x (千克) 的一次函数。当携带行李60千克时, 购行李票要5元, 当携带行李90千克时, 购行李票要10元。请你思考当携带行李120千克时, 应购行李票多少元?旅客最多可免费携带多少千克行李?

答:当携带行李120千克时, 应购行李票15元, 旅客最多可免费携带30千克的行李。

例2:A地有钢筋400吨, B地有钢筋600吨。现在要把这些钢筋全部运往C区和D区盖楼。从A地往C、D两区运钢筋的费用分别为25元/吨和30元/吨, 从B地往C、D两区运钢筋的费用分别为20元/吨和24元/吨。现C区需要钢筋540吨, D区需要钢筋460吨, 怎样调运总运费最少?

阅读提示:

(1) 影响总运费的变量有哪些?

(2) 由A、B两地分别运往C、D区的钢筋共有几个量?

(3) 这些量之间有什么关系?

分析:解决含有多个变量的问题时, 要分清这些变量之间的关系, 然后选取其中一个变量作为自变量, 列表寻求可以反映实际问题的函数。

解:设总运费为y元, A地运往C区的钢筋量为x吨,

由总运费与各运输量的关系可知, y与x之间的函数为:y=25x+30 (400-x) +20 (540-x) +24 (60+x) 化简得y=-x+24240 (0≤x≤400)

由图像可看出, 当x=400时, y有最小值24240.

答:从A地往C区400吨, 运往D区0吨;从B地运往C区140吨, 运往D区460吨时, 总运费最少, 最小值为24240元.

例3:某蔬菜基地要把一批新鲜蔬菜运往外地, 有2种运输方式可供选择, 主要参考数据如下:

(1) 请分别写出汽车、火车运输的总费用y1 (元) 、y2 (元) 与运输路程x (km) 之间的函数关系;

(2) 你能说出用哪种运输方式较好吗?

探讨交流:让学生讨论、发表自己的看法, 本题有哪些方法呢?

分析点拨:首先对两种运输方式的数学建模, 再用图像进行比较。

解: (1) 根据题意, y1、y2的函数关系式分别为:

(2) 在同一直角坐标系中画出两函数图像, 其交点坐标为 (100, 650) , 由图像可知:

当0

当x=100时, y1=y2;

当x>100时, y1>y2.

故当运输路程小于100km时, 选用汽车运输较好;

当运输路程等于100km时, 两种运输方式任选;

当运输路程大于100km时, 选用火车运输较好.

一次函数的入门教学 篇2

声明一个List集合:<?www.2cto.com/kf/ware/vc/“ target=”_blank“ class=”keylink“>vcD4KPHA+PGltZyBzcmM9”www.2cto.com/uploadfile/Collfiles/0114/20150114092118343.png“ alt=”“>

List集合所在的包已经被预定义自动引入,所以此处就不需要在引入包了,这里直接使用List实例化对象,其实用List的object对象的apply方法

我们使用map函数把list中的每个值都乘以3:

x表示l中每一个元素,map对l中的每一个元素进行遍历操作,由于List中只有一种类型的元素,所以我们在执行马屁操作的时候可以省略其类型,如下所示:

List集合中只有一个参数的时候,我们可以去掉参数中的括号:

为了能保存所有代码,我还是使用IDEA吧

scala中的集合:

集合主要有List、Set、Tuple、Map等

在scala下的org.scala.collection下创建scala类CollectionOperations

在IDEA中创建一个List实例:

我们看一下List代码实现:

源码中说明了其内部是apply的方式来完成实例化的:

使用同样的方式实例化Set:

我们可也看下Set实例化对象的实现:

接下来我们在linux命令行终端中砍下集合的操作,首先看Set:

发现Set中不会存储重复的元素

下面看下Tuple的申明和使用:

tuple 访问的时候下标是从1开始的

对于Tuple而言,如果只有两个元素的时候我们还可以使用如下方式创建:

接下来我们看下Map的定义吧:

Map本身使用的是可变参数的方式,所以可以给Map赋多个值:

我们看一下Option类型,Option代表了一个可有可无的值:

Option有两个子类:Some 和None,下面看看Option的使用:

接下来我们看下filter的使用:

对集合的zip操作:

下面我们看下partition对集合的切割操作:

使用flatten的多集合进行扁平化操作:

谈初中物理的入门教学 篇3

初二学生拿到物理课本后,一般都显得很自豪,想学好物理的求知欲很迫切。但是很快又发现,他们因受“物理难学”说法的影响,对物理学习产生了一种害怕、畏难心理,而且女同学占多数。因此,为使初二学生能自然地、比较平稳地踏上学习物理的轨道,入门教学应在提高学生学习兴趣和消除畏惧心理上下工夫。

一、充分发挥新教材的优势

初二学生一开始的那种自豪感和迫切心情毕竟是短暂的,当他们进入课程教学后,能否保持较浓厚的兴趣,是他们能否学好物理的关键。新教材较原教材能比较容易达到这一目的。新教材图文并茂、生动活泼、编排形式新颖;内容顺序的重新安排切合学生的实际;课题的引入既有趣又通俗易懂,对学生很有吸引力,很容易激发学生的兴趣。只要教师能充分重视引导学生阅读课本,发挥学生学习的主体作用,就能比较容易达到既提高学生的学习兴趣,又提高学生阅读能力的目的。

在学生阅读课本内容时我们发现,学生对课本上那些具有现代气息、形象直观的插图看得很投入,我们就因势利导,让他们回答这幅图是什么意思,那幅图说明课文中哪方面的内容,这样学生对课本内容的印象深了,便产生了学习兴趣。有些学生在课堂上对课本中的“阅读材料”看得很认真,教师可暗示他停止,但在下课前要提示学生课后去阅读,并把“阅读材料”中的内容稍加渲染,引起学生的普遍重视和兴趣。

二、疏通教材,排除难点

新教材注意联系实际,适当降低了难度。但由于农村初中学生基础较差,学习中还是会感到有困难的,他们一遇困难一般都会产生为难情绪。因此,教师要认真分析、钻研新教材,备好课,力求讲得简洁、浅显、容易理解。在教学中尽量为学生疏通教材,使他们不感到物理知识难学,同时,帮助学生掌握正确的学习方法。

现在初二学生对新教材中力、声、热、光等丰富多彩的物理现象都感到很亲切,不觉得它深奥。但也不排除他们在学习中有为难之处。如第一章第二节最后的一个条目“正确记录测量结果”,学生在记录数字时,总写不正确,可以说是个小难点。教师在这里不必花很大力气讲解举例,否则适得其反。最好的方法是简化些,就讲一种目前学生普遍使用的、最小刻度是毫米的刻度尺测量结果的记录方法,然后在黑板上画图:用刻度尺测一木块的长度,让学生写出结果就行了。这样疏通教材,使学生不觉得这个地方有困难。另有第二章的“平均速度”,以前的教材一直把它作为选学内容,新教材是必学内容。按理说这是个难点,但由于新教材写得好,简洁明了易懂,教师就不要再拓宽加深了,学生一般学习都较平稳。只有在做过“测平均速度”的实验后,教师才应该帮助学生建立起“变速运动由于速度是变化的,所以各段路程或各段时间内的平均速度是不同的概念”,并告诉学生这是和匀速直线运动的速度不同的地方。至于这方面的定量计算,在这一阶段只限于严格要求解题方式和物理量单位的问题。这样处理教材,使已经降低难度的新教材显得更平坦了,学生踏上这个轨道就会感到轻松自如。

三、了解学生,信任学生

初中物理教学从一开始就应注重了解学生,充分信任他们,给他们必要的指导和帮助。这样不但能增强学生学习物理的信心。而且也能使教师自己看到希望。

对学生的了解,一方面从课堂教学、书面作业去进行,另一方面通过接近、谈话来进行。初二学生开始学物理犹如小学生启蒙时的情景,只要老师接触他们,就特别爱说、爱问。他们问得最多的话是:“物理好学吗?”“物理怎样学?听人家说,物理难学,是吗?”那种迫切要求学好物理的愿望显而易见。在这种情况下,教师应及时给他们解释,积极给他们鼓励,并且要认真回答问题,不能敷衍他们,要让他们有信心学好物理。

开始几周的课堂教学和书面作业,学生往往因语文水平有限,口头和语言文字的表达能力不高,对说理题的回答总感到力不从心。觉得有话写不出,有理讲不准。教师对这种现象首先要理解学生初学物理时的困难,然后作出示范性的答题。一开始不作过高要求,只要他们答题时能用“物理语言”回答清楚就行,以后慢慢引导,要求也逐步提高。这样学生回答问题时胆子就大了,脑子也开动起来了,即使学生回答得不尽如人意,也要鼓励他们,肯定他们能动脑筋的一面。

初中物理的入门教学技巧 篇4

关键词:初中物理,入门教学,技巧

初中物理起始入门的教学效果如何, 直接影响学生初中阶段的物理学习的态度和兴趣。教学实践清楚地告诉我们, 这个阶段第一学期的前半期尤为重要。学生拿到物理课本后, 一般都显得很好奇, 想学好物理的求知欲很迫切。但是很快又发现, 他们因受“物理难学”说法的影响, 对物理学习产生了一种害怕、畏难心理, 而且女同学占多数。因此, 为使学生能自然地、比较平稳地踏上学习物理的轨道, 起始阶段的教学应:充分挖掘教材、实验、生活、情感等教学资源优势来提高学生学习兴趣和消除畏惧心理而增强信心。

一、引导阅读, 充分发挥教材的优势

苏霍姆林斯基说过:“学会学习首先要学会阅读。”阅读对于物理的学习同样必要。现代教育提倡从学会到会学, 提倡“终身学习”。因此, 培养学生学会学习的基本前提是学会阅读自学。学生一开始的那种好奇感和迫切心情毕竟是短暂的, 当他们进入课程教学后, 能否保持较浓厚的兴趣, 是他们能否学好物理的关键。教材图文并茂、生动活泼、编排形式新颖;课题的引入既有趣又通俗易懂, 对学生很有吸引力, 很容易激发学生的兴趣。只要教师能充分重视引导学生阅读课本, 发挥学生学习的主体作用, 就能比较容易达到既提高学生的学习兴趣, 又提高学生阅读能力的目的。

在学生阅读课本内容时我发现, 学生对课本上那些具有现代气息、形象直观的插图看得很投入, 我就因势利导, 让他们回答这幅图是什么意思, 那幅图说明哪方面的内容。这样学生对课本内容的印象深了, 便产生了学习兴趣。有些学生在课堂上对课本中的“阅读材料”看得很认真, 教师可暗示他停止, 但在下课前要提示学生课后去阅读, 并把“阅读材料”中的内容稍加宣染, 引起学生的普遍重视和兴趣。

二、师生齐动手, 发挥物理实验优势

教材上的演示实验、学生随堂实验、分组实验、课外小实险较原教材多很多。认真做好这些实验, 既能清楚地引入概念, 顺利地得出规律, 启发引导学生解决一些实际问题, 又能激发学生的学习兴趣。特别是前半学期的实验, 一定要认真做、全部做、帮助学生做, 而且要做得成功。这样能使学生兴趣盎然, 更加投入。

不仅教师的演示实验要做好做成功, 还要帮助学生把实验做好。例如, 分组实验中“把细铜丝在铅笔上紧密排绕若干圈”, 若按书上的图排绕, 学生的两只手不能松。要测出线圈的总长度, 必须抓住铜丝两端连同线圈往刻度尺上靠, 或者让另一学生拿着尺来测量, 这样操作既吃力又不容易测出准确结果。对于一个初学物理第一次做实验的初二学生来说, 很难做好。我发现这种情况后, 和学生一起动脑筋, 想出一个改进方法:把铜丝的一头弯曲折回压在铅笔上, 再在上面一圈一圈地排绕, 既紧密又不易松动, 学生可一手抓住铜丝的另一头, 一手拿刻度尺轻松自如地测量, 学生高兴地笑了, 对后面的实验充满了信心。

三、联系实际, 发挥生活资源优势

风霜雨露、雷鸣电闪、潮起潮落、月圆月缺、蓝天白云、雨后彩虹、水中倒影等奇妙的现象从小就深深地吸引住我们。物理知识的形成来源于自然, 来源于生活。在物理教学中, 教师要巧妙地运用学生在生活中的感知, 以激发学生强烈的求知欲, 更便于物理知识的学习和理解。

1.妥善于利用学生的生活经验

初中学生已具有相当多的生活经验, 其中包含着大量的与物理有关的现象或者问题, 例如:雷电是先看见闪电, 后听到雷声;压水井手柄越长越省力;骑车上坡是走S形省力;刀磨得越锋利切东西越快等等, 教学中充分地利用, 这对学习新的知识, 形成新概念会帮助极大。在讲授杠杆的应用一节时, 我就事前作了充分的准备, 对学生提出了学生在生活中可能会想到的一些问题, 例如:阿基米德说过, 给他一根足够长的杠杆和一个支点, 他能把地球翘起来, 这可能吗?家中门的把手为什么安在门边缘处?然后我准备了一些日常用品:老虎钳子、剪布用的剪子、理发用的剪刀、钓鱼杆、杆秤、天平等, 先让学生根据日常生活经验, 分别说出如何使用然后运用杠杆平衡原理, 引导学生自然解释这样使用的理由。这种教学虽费时费力, 但学生学习劲头高涨, 课堂效果很好, 便于理解有关知识。

2.让学生积极地进行生活体验

学生在生活中体验物理知识既有利于理解掌握有关的物理知识, 同时有的也为学习新的知识打下良好的基础。例如, 在学习运动和静止的相对性后, 要求学生在坐火车或汽车时, 在车站观察并排的车的运动情况, 体验由于运动的相对性而带来的神奇的现象, 并在开车和刹车时体验由于惯性使人体向后倒和向前倾的现象。自行车是同学们的重要交通工具, 对它非常了解, 它哪些地方存在摩擦?哪些是有益的?哪些是有害的?都是用什么方法增大和减小的?同学们都有这方面的亲身体验, 对学习摩擦的有关知识帮助甚大。

3.让学生在生活中多观察、多思考

初中教材, 很多物理知识就在学生的身边, 布置一些生活中可以观察到的现象, 让学生思考生活中的一些问题, 无疑会培养学生良好的学习习惯。例如:学习液化知识前, 布置让学生观察从冰箱刚拿出的饮料瓶外有水珠的现象。观察烧开水从壶嘴向外喷“白气”的现象, 并思考为什么离开壶嘴一段距离才看出“白气”, 让学生思考早晨雾是怎样形成的、草上的露珠是怎样形成的、蒸馒头冒“白气”和冬天我们口中呼出的“白气”是否一样等, 这样既使学生感到物理知识就在身边, 也使学生思考问题有针对性, 学习时更加得心应手。

四、结语

一次函数的入门教学 篇5

函数和递归

第4章 函数和递归

【教学内容相关章节】

4.1数学函数 4.2地址的指针 4.3递归 4.4本章小结 【教学目标】

(1)掌握多参数、单返回值的数学函数的定义和使用方法;(2)学会用typedef定义结构体;(3)学会用assert宏帮助调试;

(4)理解函数调用时用实参给形参赋值的过程;(5)学会定义局部变量和全局变量;

(6)理解调用栈和栈帧,学会用gdb查看调用栈并选择栈桢;(7)理解地址和指针;

(8)理解递归定义和递归函数;

(9)理解可执行文件中的正文段、数据段和BSS段;(10)熟悉堆栈段,了解栈溢出的常见原因。【教学要求】

掌握带参函数的调用、赋值过程及函数的返回值,理解地址和指针的概念,理解递归定义和递归函数,理解段的概念。【教学内容提要】

运用前3章的知识尽管在理论上已经足以写出多数算法程序了,但实际上稍微复杂一点的程序往往由多个函数组成。函数是“过程式程序设计”的产物,但也产生了局部变量、参数传递方式、递归等诸多新的知识点。本章淡化例题,重点在于理解最后的语法。同时,通过请出gdb这一王牌,从根本上帮助读者理解,看清事物的本质。【教学重点、难点】

教学重点:

(1)掌握多参数、单返回值的数学函数的定义和使用方法;(2)理解函数调用时用实参给形参赋值的过程;(3)理解地址和指针;

(4)理解递归定义和递归函数;

(5)理解可执行文件中的正文段、数据段和BSS段。教学难点:贪心算法的基本要素。【课时安排(共3学时)】

4.1数学函数 4.2地址的指针 4.3递归 4.4本章小结

(0.5学时)

第 91 页

第4章

函数和递归

4.1 数学函数

4.1.1 简单函数的编写

下面给出一个计算两点欧几里德距离的函数:

double dist(double x1, double y1, double x2, double y2){ return sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));} 提示4-1:C语言中的数学函数可以定义成“返回类型 函数名(参数列表){ 函数体 }”,其中函数体的最后一条语句应该是“return 表达式;”。

提示4-2:函数的参数和返回值最好是“一等公民”int或double(注意char是一种特殊的int)。其他“非一等公民”作为以参数和返回值要复杂一些。

提示4-3:如果函数在执行的过程中碰到了return语句,将直接退出这个函数,不去执行后面的语句。相反,如果在执行过程中始终没有return语句,则会返回一个不确定的值。幸好,-Wall可以捕捉到这一可疑情况并产生警告。

main函数是有返回值的,假设返回值为0。main函数是整个程序的入口,如果有一个“其他的程序”来调用这个main函数——如操作系统、IDE、调试器,甚至自动评测系统,这个0代表“正常结束”,就是返回给这些调用者的。在算法竞赛中,除了有特殊规定之外,请总是让它返回0,以免评测系统错误地认为你的程序是异常退出。

提示4-4:在算法竞赛中,请总是让main函数返回0。下面给出上述函数的另一种方法:

double dist(double x1, double y1, double x2, double y2){ double dx=x1-x2;double dy=y1-y2;return hypot(dx,dy);} 说明:(1)hypot函数的功能是计算一直角三角形的斜边长度。

(2)函数hypot(x,y)表示根据直角三角形的两直解边长度x和y计算其斜边的长度。或者是从标点(x,y)到原点的距离,该函数的算法等同于sqrt(x*x+y*y)。

4.1.2 使用结构体的函数

由于平面的点坐标(x,y)可以看用一个整体,所以可以定义一个结构体,它的名称是Point,让它包含点的坐标x和y。

struct Point{ double x, y;};double dist(struct Point a, struct Point b){ return hypot(a.x-b.x, a.y-b.y);} 提示4-5:在C语言中,定义结构体的方法为:“struct 结构体名称{ 域定义 };”,注意花括号的后面还有一个分号。

由于上面的定义在所有用到Piont的地方都得写一个“struct”,所以给出一个简洁的写法如下:

typedef struct Point{ double x, y;}Point;double dist(Point a, Point b){ return hypot(a.x-b.x, a.y-b.y);} 提示4-6:为了方便,往往用“typedef struct{ 域定义 }类型名;”的方式定义一个新类型名。这样,就可以像原生数据类型一样使用这个自定义类型。

4.1.3 应用举例 例4-1 组合数。

第 92 页

第4章

函数和递归

输入非负整数m和n,输出组合数Cnmn!m!(nm)!,其中m≤n≤20。

【分析】

由组合数的公式可知,多次出现阶乘,所以将求阶乘作为一个函数:

程序4-1 组合数

#include int f(int n){ int i, m = 1;for(i = 1;i <= n;i++)m *= i;return m;}

int main(){ int m, n;scanf(“%d%d”, &m, &n);printf(“%dn”, f(n)/(f(m)*f(n-m)));return 0;} 注意:编好程序后,一定要别忘了测试程序。

提示4-7:即使最终答案在我们选择的数据类型范围之内,计算的中间结果仍然可能溢出。

例4-2 孪生素数。

如果n和n+2都是素数,则称它们是孪生素数。输入m,输出两个数均不超过m的最大孪生素数。5≤m≤10000。例如m=20时答案是17、19,m=1000时答案是881、883。

【分析】

被1和它自身整除的、大于1的整数称为素数。由于要判断n和n+2是否是素数,所以把“判断素数”可以写成一个函数,只需调用这个函数两次就可以了。这样的“判断一个事物是否具有某一性质”的函数还有一个学术名称——谓词(predicate)。

程序4-2 孪生素数(1)

#include /* do NOT use this if x is very large or small */ int is_prime(int x){ int i;for(i = 2;i*i <= x;i++)if(x % i == 0)return 0;return 1;}

int main(){ int i, m;scanf(“%d”, &m);for(i = m-2;i >= 3;i--)if(is_prime(i)&& is_prime(i+2)){ printf(“%d %dn”, i, i+2);break;}

第 93 页

第4章

函数和递归

return 0;} 说明:(1)在is_prime函数的编写中,用到了两上小技巧。一是只判断不超过sqrt(x)的整数i;二是及时退出:一旦发现x有一个大于1的因子,立刻返回0(假),只有最后才返回1(真)。

(2)函数的命名应注意做到“见名知意”,即选有含义的英文单词(或其缩写)作为函数名。例如,“is_prime”取自英文“is is a prime?”(它是素数吗?)。

提示4-8:建议把谓词(用来判断某事物是否具有某种特性的函数)命名成“is_xxx”的形式。它返回int值,非0表示值,0表示假。

提示4-9:编写函数时,应尽量保证它能对任何合法参数都能得到正确的结果。如若不然,应在显著位置标明函数的缺陷,以避免误用。

下面改进之后的版本:

程序4-3 孪生素数(2)

#include #include #include int is_prime(int x){ int i, m;assert(x >= 0);//使用断言,防止x<0 if(x == 1)return 0;m = floor(sqrt(x)+ 0.5);for(i = 2;i <= m;i++)if(x % i == 0)return 0;return 1;}

int main(){ int i, m;scanf(“%d”, &m);for(i = m-2;i >= 3;i--)if(is_prime(i)&& is_prime(i+2)){ printf(“%d %dn”, i, i+2);break;} return 0;} 除了特判n==1的情况外,程序中还使用了变量m,一方面避免了每次重复计算sqrt(x),另一方面也通过四舍五入避免了浮点误差。

最后,程序使用了assert.h的assert宏来限制非法的函数调用:当x>=0不成立时,程序将异常终止,并给出了提示信息。

说明:(1)断言(assert)的语义如下:如果表达式的值为0(假),则输出错误消息并终止程序的执行(一般还会出对话框,说明在什么地方引发了assert);如果表达式为真,则不进行任何操作。因此,断言失败就表明程序存在一个bug。

(2)C/C++的宏(assert)就是这样的断言,当表达式为假时,调用库函数abort()终止程序。

(3)程序中可以把assert看成一个在任何系统状态下都可以安全使用的无害测试手段,所以不要把程序中的assert语句删除掉。

(4)如果程序在assert处终止了,并不是说含有该assert的函数有错误,而是调用函数出了差错,assert可以帮助我们追踪到错误发生的原因。

(5)在函数的入口处,建议使用断言来检查参数的有效性(合法性)。请给assert语句加注释,告诉人们assert语句究竟要干什么。

第 94 页

第4章

函数和递归

提示4-10:编程时合理利用assert宏,将给调试带来很大的方便。总而言之,在实际的系统中,“一个地方的参数错误就引起整个程序异常退出”是不可取的,在编写和调试算法程序中,assert会“迫使”编写出更高质量的程序。

4.2 地址和指针

有时候,我们编程时为了完成某些操作——如交换两个变量,或者需要返回两个甚至更多的值——如解一个二元一次方程组。

4.2.1 变量交换

程序4-4 用函数交换变量(错误)

#include void swap(int a, int b){ int t = a;a = b;b = t;}

int main(){ int a = 3, b = 4;swap(3, 4);printf(“%d %dn”, a, b);return 0;} 说明:(1)下面来说一下函数调用的过程: ①计算参数的值(若是数学表达式,需要计算)。程序4-4中函数调用语句swap(a, b);中的a和b就是实际参数(简称实参),它们的值分别为3和4。实参可以是常量、变量或表达式。

②把实参赋值给函数声明中的a和b。函数声明中的a和b称为形式参数(简称形参)。然后在函数内部完成计算或操作。注意实参向形参的数据传递是“值传递”,即单向传递,只由实参传给形参,而不能由形参传回来给实参。

(2)下面来说一下几个概念: ①局部变量(local variable)

函数(包括main函数)的形参和在该函数里定义的变量都被称为该函数的局部变量。不同的局部变量相互独立,无法访问其他函数的局部变量,也就是说,局部变量只能在定义它的函数内部使用,超出了局部变量的作用域范围,局部变量是无效的。

局部变量的存储空间是临时分配的,函数执行完毕时,局部变量的空间将被释放,其中的值无法保留到下次使用。

②静态局部变量(static local variable)

有时希望函数中的局部变量的值在函数调用结束后不消失而保留原值,这时就应该指定局部变量为“静态局部变量”,用关键字static进行声明。

静态局部变量在程序整个运行期间都不释放,而局部变量在函数调用结束后即释放。静态局部变量在编译时赋初值,即只赋初值一次;而对自动变量赋初值是在函数调用时进行,每调用一次函数重新给一次初值,相当于执行一次赋值语句。

如果在定义局部变量时不赋初值的话,则对静态局部变量来说,编译时自动赋初值0(对数值型变量)或空字符(对字符变量)。而对自动变量来说,如果不赋初值则它的值是一个不确定的值。

静态局部变量在函数调用结束后仍然存在,其它函数是不能引用它们的。③全局变量(global variable)

将变量写在所有函数的外面,这样的变量是全局变量。全局变量可以在任何时候,由任何函数访问。如果某局部变量和某个全局变量的名字一样,那么在该局部变量的作用域中,起作用的是局部变量,全局变量被同名的局部变量屏蔽掉了,不起作用。

需要注意的是,全局变量是非常危险的,应该谨慎使用。

第 95 页

第4章

函数和递归

提示4-11:函数的形参和在函数内声明的变量都是该函数的局部变量。无法访问其他函数的局部变量。局部变量的存储空间是临时分配的,函数执行完毕时,局部变量的空间将 释放,其中的值无法保留到下次使用。在函数外声明的变量是全局变量,它们可以被任何函数使用。操作全局变量有风险,应谨慎使用。

下面就变量的生存期和可见性给出一个例子。

例4-3 写出下面程序的运行结果。#include int i=1;/*i为全局变量,具有静态生存期*/ void main(){ static int a;/*a为静态局部变量,具有全局寿命,局部可见*/ int b=-10;int c=0;void other();printf(“-----MAIN------n”);printf(“i:%d a:%d b:%d c:%dn”,i,a,b,c);c=c+8;other();printf(“-----MAIN------n”);printf(“i:%d a:%d b:%d c:%dn”,i,a,b,c);i=i+10;other();}

void other(){ static int a=2;static int b;/*a,b为静态局部变量,具有全局寿命,局部可见,只第一次进入函数进入 函数时初始化*/ int c=10;/*c为局部变量,具有动态生存期,每次进入函数时都初始化*/ a=a+2;i=i+32;c=c+5;printf(“-----OTHER------n”);printf(“i:%d a:%d b:%d c:%dn”,i,a,b,c);b=a;} 解答:

运行结果为如下:-------Main--------i:1 a:0 b:-10 c:0------Other--------i:33 a:4 b:0 c:15-------Main--------i:33 a:0 b:-10 c:8-------Other-------i:75 a:6 b:4 c:15 4.2.2 调用栈

调用栈描述的是函数之间的调用关系。它由多个栈帧(Stack Frame)组成,每个栈帧对应着一个未运行完的函数。栈帧中保存了该函数的返回地址和局部变量,因而不仅能在执行完毕后找到正确的返回地址,还很自然地保证了不同函数的局部变量互不相干——因为不同函数对应着不同的栈帧。

第 96 页

第4章

函数和递归

提示4-12:C语言调用栈(Call Stack)来描述函数之间的调用关系。调用栈由栈帧(Stack Frame)组成,每个栈帧对应着一个未运行完的函数。在gdb中可以用backtrace(简称bt)命令打印所有栈帧信息。若要用p命令打印一个当前栈帧的局部变量,可以用frame命令选择另一个栈帧。

下面给出用gdb完成上述操作的命令和结果。(1)第一步:编译程序。gcc 4-4.c-g(2)第二步:运行gdb。gdb a.exe 这样,gdb在运行时会自动装入刚才生成的可执行程序。(3)第三步:查看源码。(gdb)l 这里(gdb)是gdb的提示符,字母l是输入的命令,它是list(列出程序清单)的缩写。(4)第四步:加断点并运行。(gdb)b 4(gdb)r 其中b命令把断点设在了第4行,r命令运行程序,之后碰到了断点并停止。接下来,查看调用栈。

(5)第四步:查看调用栈。(gdb)bt(gdb)p a(gdb)p b(gdb)up(gdb)p a(gdb)p b 这一步是关键。根据bt命令,调用栈中包含两个栈帧:0#和1#,其中0号是当前栈帧——swap函数,1号是它的“上一个”栈帧——main函数。

使用p命令可以打印变量值。p a和p b表示查看当前栈帧中变量a和b的值。up命令表示选择上一个栈帧。然后用p a和p b查看当前栈帧中变量a和b的值。最后用q命令退出gdb。

说明:gdb是GNU开源组织发布的一个强大的UNIX下的程序调试工具。或许,大家比较喜欢那种图形界面方式的,像VC、BCB等IDE的调试,但如果是在 UNIX平台下做软件,会发现gdb这个调试工具有比VC、BCB的图形化调试器更强大的功能。

4.2.3 用指针实现变量交换

程序4-4不能实现两个变量的值交换,用指针可以实现两个变量的值交换。

程序4-5 用函数交换变量(正确)

#include void swap(int* a, int* b){ int t = *a;*a = *b;*b = t;}

int main(){ int a = 3, b = 4;swap(&a, &b);printf(“%d %dn”, a, b);return 0;} 语句swap(&a, &b);中变量名前面加&得到的是该变量的地址。

提示4-13:C语言的变量都是放在内存中的,而内存中的每个字节都有一个称为地址(address)的编号。每个变量都占有一定数目的字节(可用sizeof运算符获得),其中第一个字节的地址称为变量的地址。

第 97 页

第4章

函数和递归

提示4-14:用int* a声明的变量a是指向int型变量的指针。赋值a=&b的含义是把变量b的地址存放在指针a中,表达式*a代表a指向的变量,它既可以放在赋值符号的左边(左值),也可以放在右边(右值)。

提示4-15:千万不要滥用指针,这不仅会把自己搞糊涂,还会让程序产生各种奇怪的错误。事实上,本书的程序会很少用指针。

4.2.4 初学者易犯的错误 一种典型的错误写法是:

void swap(int* a, int* b){ int *t = a;a = b;b = t;} 它交换了swap函数的局部变量a和b(辅助变量t必须是指针。int a是错误的),但却始终没有修改它们指向的内容,因此main函数中的a和b不会改变。

另一种错误写法是:

void swap(int* a, int* b){ int *t;*t = *a;*a = *b;*b = *t;} 这个程序去替换程序4-5,可能得到的结果是“4 3”。但是它还是错误的,因为t是一个变量(指针也是一个变量,只不过类型是“指针”而已),所以根据规则,它在赋值之前是不确定的。如果这个“不确定的值”所代表的内存单元恰好是能写入的,那么这个程序将正常工作;但如果它是只读的,程序可能会崩溃。

4.3 递 归

4.3.1 递归的定义和递归函数 1.基本概念

一个函数在它的函数体内调用它自身称为递归调用。这种函数称为递归函数。C语言允许函数的递归调用。在递归调用中,主调函数又是被调函数。执行递归函数将反复调用其自身,每调用一次就进入新的一层。例如: int f(int x){ int y;z=f(y);return z;} 本函数是一个递归函数。但是运行该函数将无休止地调用其自身,这当然是不正确的。这个递归函数是一个死递归(无限递归,Infinite Recursion)函数。为了防止递归调用无终止地进行,必须在函数内有终止递归调用的手段。常用的办法是加条件判断,满足某种条件后就不再作递归调用,然后逐层返回。

2.递归函数的构成要素

递归函数必须满足两个条件:

(1)必须有一个终止准则(递归的边界条件、递归的结束条件);

(2)在每一次调用自己时,必须是(在某种意义上)更接近于解(递推公式或递归方程);

边界条件与递归方程是递归函数的二个要素。若没有条件(1),则递归无从终止;若没有条件(2),则不是递归。

3.递归调用过程(两个阶段)(1)递推阶段

将原问题不断地分解为新的子问题,逐渐从未知的向已知的方向推进,最终达到已知的条件,即递归结束条件,这时递推阶段结束。

(2)回归阶段

第 98 页

第4章

函数和递归

从已知条件出发,按照“递推”的逆过程,逐一求值回归,最终到达“递推”的开始处,结束回归阶段,完成递归调用。

例4-4 用递归法计算n!。

用递归法计算n!,阶乘函数f(n)=n!可定义为:

ff(0)=1(n)f(n1)n(n1)【分析】

本题是一个递归问题。下面给出求f(5)的递归过程如下:(1)递推过程

f(5)=5×f(4)→f(4)=4×f(3)→f(3)=3×f(2)→f(2)=2×f(1)→f(1)=1×f(0)→f(0)=1 未知----→已知(2)回归过程

f(5)=5×f(4)←f(4)=4×f(3)←f(3)=3×f(2)←f(2)=2×f(1)←f(1)=1×f(0)← f(0)=1 =120 =24 =6 =2 =1 未知←---已知 对应的程序如下:

程序4-6 用递归计算阶乘

#include int f(int n){ return n == 0 ? 1 : f(n-1)*n;}

int main(){ printf(“%dn”, f(3));return 0;} 提示4-16:C语言支持递归——函数可以直接或间接调用自己。但要注意为递归函数编写终止条件,否则将产生无限递归。

4.3.2 C语言对递归的支持

可以借助于gdb来调试程序4-6。首先用bf命令设置断点——除了可以按行号设置外,也可以直接给出函数名,断点将设置在函数的开头。可以用r命令运行程序,并在断点处停下来,接下来用s命令单步执行。

每次执行完s指令,都会有一层递归调用终止,直到返回main函数。事实上,如果在递归调用初期查看调用栈,会发现每次递归调用都会多一个栈帧——和普通的函数调用并没有什么不同。确实如此,由于使用了调用栈,C语言自然支持了递归。在C语言的函数中,调用自己和调用其他函数并没有任何本质区别,都是建立新栈帧,传递参数并修改“当前代码行”,在函数体执行完毕后删除栈帧,处理返回值并修改“当前代码行”。

提示4-17:由于使用了调用栈,C语言支持递归。在C语言中,调用自己和调用其他函数并没有本质不同。

4.3.3 段错误与栈溢出 “段”(segmentation)是指二进制文件内的区域,所有某种特定类型信息被保存在里面。可以用size程序得到可执行文件中各个段的大小。

提示4-18:在可执行文件中,正文段(Text Segment)储存指令,数据段(Data Segment)储存已初始化的全局变量,BSS段(BSS Segment)储存未赋值的全局变量所需的空间。

调用栈所在的段为堆栈段(Stack Segment)。和其他段一样,它也有自己的大小,不能被越界访问,否则就会出现段错误(Segment Fault)。

每次递归调用都需要往调用栈里增加一个栈帧,久而久之就越界了。用术语把它叫做栈溢出(Stack Overflow)。

提示4-19:在运行时,程序会动态创建一个堆栈段,里面存放着调用栈,因此保存着函数的调用关系和局部变量。

第 99 页

第4章

函数和递归

栈空间与操作系统有关。在Linux中,栈大小是由系统命令ulimit指定的,例如ulimit –a显示当前栈大小,而ulimit-s 32768将把栈大小指定为32MB。但在Windows中,栈大小是储存在可执行文件的。使用gcc可以这样指定可执行文件的栈大小:gcc –Wl,--stack =16777216,这样栈大小就变为16MB。

提示4-20:在Linux中,栈大小并没有储存在可执行程序中,只能用ulimit命令修改;在Windows中,栈大小储存在可执行程序中,用gcc编译时可以通过-Wl,--stack=指定。

说明:(1)在介绍数组时,“把较大的数组放在main函数外”是因为这样定义的数组是全局数组,放在数据段。

(2)局部变量放在堆栈段。栈溢出不见得是递归调用太多,也可能是局部变量太大。只要总大小超过了允许的范围,就会产生栈溢出。

4.4 本 章 小 结

本章涉及了整个C语言中最难理解的两个东西:指针和递归。4.4.1 小问题集锦 首先,来编写一个函数solve,给定浮点数a,b,c,d,e,f,求解方程组ax+by=c,dx+ey=f。【分析】

下面利用线性代数知识来分析方程组的什么时候有唯一解、无解或无穷多解?方程组为如下:

axbyc dxeyf设它的系数矩阵为A=行变换如下:

a ba b c,它的增广矩阵为B=[A ]=b,对B实施初等d ed e fa b ca b cB=

d e f0 ea-bd fa-cd(1)当ea-bd≠0时,系数矩阵A的秩R(A)=2,增广矩阵的秩R(B)=2,即R(A)=R(B)=2,此时线性方程组有唯一解。

cebfxeabd afcdyeabd(2)当ea-bd=0时

①当fa-cd=0时,R(A)=R(B)=1<2,此时线性方程组有无穷多组解。

②当fa-cd≠0时,R(A)=1,R(B)=2,则R(A)

函数solve如下:

void solve(float a, float b, float c, float d, float e, float f){ float x, y;assert(e * a – b * d== 0 && f * a – c * d== 0);//使用断言,解不唯一退出 if(e * a – b * d!= 0){ //此方程的解是唯一的

printf(“The solution of equation is unique:n ”);printf(“x=%f”,(c * e – b * f)/(e * a – b * d));printf(“y=%f”,(a * f – c * d)/(e * a – b * d));return;

第 100 页

第4章

函数和递归

} if(e * a – b * d == 0 && f * a – c * d!= 0){ //此方程无解

printf(“The equation is no solutio:n ”);return;} } 任务2:解不唯一时仍然正常返回,但调用者有办法知道解的数量(无解、唯一解、无穷多组解)。

解答:

函数solve如下:

int void solve(float a, float b, float c, float d, float e, float f){ float x, y;if(e * a – b * d== 0 && f * a – c * d== 0){ //此方程的解是不唯一

printf(“The solution of equation is not unique:n ”);return 2;} if(e * a – b * d!= 0){ //此方程的解是唯一的

printf(“The solution of equation is unique:n ”);printf(“x=%f”,(c * e – b * f)/(e * a – b * d));printf(“y=%f”,(a * f – c * d)/(e * a – b * d));return 1;} if(e * a – b * d == 0 && f * a – c * d!= 0){ //此方程无解

printf(“The equation is no solutio:n ”);return 0;} } 然后,请编写一个程序,包含3个函数f()、g()和h(),3个函数均无参数,返回值均为int型。

任务1:定义int a,b,要求在依次执行a=f()和b=f()后,a和b的值不同。解答:

程序如下:

#include int c=1;int f(){ c++;return c;}

int g(){ c++;return c;}

int h(){ c++;return c;

第 101 页

第4章

函数和递归

}

void main(){ int a,b;a=f();b=f();printf(“a=%,b=%d”,a,b);} 很显然,依次执行a=f()和b=f()后,a=2和b=3,a和b的值不同。任务2:定义int a,b,要求在依次执行a=(f()+g())+h()和b=f()+(g()+h())后,a和b的值不同。

解答:将上面的程序a=f();和b=f();,换成a=(f()+g())+h()和b=f()+(g()+h())。很显然,依次执行a=(f()+g())+h()和b=f()+(g()+h())后,a=9和b=18,a和b的值不同。

接下来做两个编程探索。

问题1:局部变量是否可以和全局变量重名?如果可以,实际上使用的是哪个?这可能会引起什么样的难以察觉到的错误?

解答:局部变量可以和全局变量同名,但在局部变量的作用域内,实际上使用是局部变量,全局变量失效。

问题2:如果在函数中声明一个局部变量,然后返回它的地址,调用者获取该地址时,该地址是否是有效的?为什么?

解答:该局部变量的地址是无效的。因为局部变量的存储空间是临时分配的,函数执行完毕时,局部变量的空间将被释放。

4.4.2 小结

本章介绍了数组和指针,尽管它们在很多地方可以混用,但指针和数组不是一回事。要尽量回避指针。

递归要从从概念和语言两个方面理解。从概念上,递归就是“自己使用自己”的意思。递归调用就是自己调用自己,递归定义就是自己定义自己。“使用自己”可以是直接的,也可以是间接的。由于重点是设计算法和编写程序,理解递归函数的执行过程是非常重要的。

布 置 作 业

习题1 请写出下列程序的输出结果。程序如下:

#include int print(int w){ int i;if(w!=0){ print(w-1);for(i=1;i<=w;i++)printf(“%3d”, w);printf(“n”);} }

void main(){ print(3);putchar(“n”);

第 102 页

第4章

函数和递归

} 解答:输出结果如下: 1 2 2 3 3 3习题2 用递归方法求解下面问题。

有5个人坐在一起,问第5个人多少岁?他说比第4个人大2岁。问第4个人岁数,他说比第3个人大2岁。问第3个人,又说比第2个人大2岁。问第2个人,说比第1个人大2岁。最后问第1个人,他说是10岁。请问第5个人多大。

【分析】

本题是一个递归问题。若第i个人的年龄用age(i)表示,根据题意可得如下递推关系: age(5)=age(4)+2 age(4)=age(3)+2 age(3)=age(2)+2 age(2)=age(1)+2 age(1)=10 可以用数学公式表述如下:

age(n)10 n=1 age(n-1)+2 n>1求第5个人的年龄的递归过程如下:(1)递推过程

age(5)=age(4)+2→age(4)=age(3)+2→age(3)=age(2)+2→age(2)=age(1)+2→age(1)=10 未知→已知(2)回归过程

age(5)=age(4)+2←age(4)=age(3)+2←age(3)=age(2)+2←age(2)=age(1)+2←age(1)=10 =18 =16 =14 =12 未知←------------------------------已知 程序如下(其中函数age是递归函数): #include int age(int n)/* 求年龄的递归函数 */ { int c;/* c用作存放函数的返回值的变量 */ if(n == 1)c = 10;/* n==1是递归的结束条件 */ else c =a ge(n-1)+ 2;/* 递归公式 */ return(c);}

void main(){ printf(“%dn”,age(5));}

做好初中几何入门教学的体会 篇6

关键词:初中几何;入门教学;体会

初中生学习几何并不是一件易事,究其原因在于平面几何考验学生更多的是逻辑推理,而初中生以往学习接触的基本都是关于数和式的知识,而突然转入到对具有各种定理、公理的图形性质的研究,研究方法大不一样,加之几何概念往往都比较抽象,因此学习难度增加。此时若对几何入门教学没有足够的重视,那么将造成多数学生绊倒在几何入门的门槛上。下面,笔者将分享几点关于做好初中几何入门教学的体会。

一、抓好几何基础知识教学,培养学生学习的兴趣

学习兴趣是学生学习的原动力。在初中几何学习初期,平面图形在某种程度上会刺激学生的感官,从而引起学生的好奇与兴趣,这时再加以教师的有意引导与培养,帮助学生透彻掌握到几何的基础知识,让学生认识到其基本概念、定理、公理及研究方法等,学生对几何学习的热情与学习效率将立竿见影。几何概念一般较为抽象,学生的实际感受不明晰,因此在初期的学习中学生接受起来比较困难。但是如果教师注重将理论与实际有机地联系起来,尽可能保持课堂的概念教学与学生的认知强化同步进行,加强对学生直观思维的培养,并循序渐进地将学生的直观思维向逻辑思维过渡,加深学生对事物本质的认识,将有效克服学生学习几何的困难。如对于“角”的定义,教师可从时钟的针角、黑板角等实物引入。又如如何区分直线、垂线、线段、射线,教师可引导学生通过比较差异的方法来明确几者之间的关系,让学生辨别概念并牢固掌握。

二、加强几何符号语言训练,规范学生几何语言的运用

文字语言、符号语言、图像语言是几何语言的三种形态。健全学生数学思维的第一步便是要让学生学会正确规范运用这些语言。几何教学中往往离不开大量的推理论证,而在此过程中符号语言应用最多,因此极有必要大力训练学生对几何符号语言的掌握与运用。对于同一个几何图形,如图1,既可用文字语言描述,为“点C为线段MN的中垂线AB上的一点,则点C距线段MN两端长度相等”,而用符号语言则可描述为:

这种用符号将线段、相等、相互垂直等关系标志出来的就是符号语言,而形成的几何图形就是图像语言,可以看出这比一般语言的描述更加直观形象,这就是几何知识的一大优势特征,同时这种从文字语言到符号语言的翻译 过程也增加了几何学习的趣味性。学生在刚开始接触符号语言时可能比较生疏,但任何语言学习都是一个逐步适应的过程 ,只要学生反复加以训练,慢慢地就会从生疏到掌握再到熟练运用。而在学生练习的过程中,难免会犯一些错误,这就要求教师耐心指点,帮助学生尽快熟练掌握符号语言的运用。

三、加强推理论证训练,培养学生逻辑推理能力

推理是几何学习的核心,因此几何教学的重点是要培养学生的逻辑推理能力。几何推理入门教学大体有3个阶段需教师循序渐进地对学生加以引导:(1)结合概念引入三段论证模式,例如角平分线的定义:∵OC评分∠AOB,则∠AOC=∠BOC,或是∠AOC=1/2∠AOB。教师通过对学生进行一段时间的口头示范以及书写示范后,可慢慢地要求学生进行口头叙述以及规范书写。对于后续关于“顶角”方面的计算题,教师可通过多种方式对学生进行训练。(2)“平行线”教学,教师务必要学生明确之中的因果关系。(3)“全等三角形”教学,教学的重点是要逐步引导学生学会推理论证。数学学科是一门系统性很强的学科,几何逻辑推理的学习要必经了解、掌握、熟悉这三个阶段,教师需明确的是,几何入门教学重在循序渐进,只有这样才能帮助学生克服推理论证的难关。

四、运用好分析法,开发学生论证思路

明确了论证思路,几何解题也就成功了一半,但是论证思路的寻求并非轻而易举,这是几何教学的重点同时也是难点。笔者在实际教学中关注对学生的思维训练,对于每一步的推理都要提出“为什么”,以此来加强学生思维的启发,并且重视对学生逆向思维的开发,还重视加强对学生一题多解的训练,让学生不断积累解题的经验,从而开发学生论证思路,让学生从此爱上几何。教师在教学设计环节,应该对疑难点进行侧重性的分解,可以充分利用几何图形的直观形象的特点,充分利用起学生既往数学学习所获得的经验,充分利用学生好奇的心理特征,最大化地提高平面几何入门教学的效率。

总之,初中几何的学习是整个初中数学学习生涯的重要组成部分,初中几何入门教学是是引导学生后续几何学习的第一步。万事开头难,只有帮助学生打好扎实的几何知识基础,才能让学生顺利过渡到下一步的学习中。

参考文献:

[1]王杰武. 基于初中几何教学研究数学培养目标的实现问题[D].福州:福建师范大学,2008.

浅谈英语的入门教学策略 篇7

关键词:小学阶段;英语教学;学习兴趣

新课程标准要求教师在课堂上要认识到学生的主体地位,充分发挥学生的主体地位。在教学过程中,教师应当认真研究英语教材,掌握小学阶段英语入门教学的有效策略,培养学生良好的英语学习习惯,做好学生学习英语的组织者和引导者,为学生学习英语打下良好的基础,带领学生顺利走进英语学习之门。

一、兴趣是最好的老师

小学生具有爱玩、爱唱、爱说的天性,教师在英语入门教学中要充分认识到学生的这种天性,利用学生的天性来激发学生的学习兴趣。兴趣是最好的老师,教师要从学生的实际年龄、特点出发,充分发挥自身的主导作用,设计多样化的教学方法,丰富课堂的趣味性,让学生在愉悦的氛围中掌握英语技能。教师可以利用课堂游戏的方法,来激发学生学习英语的兴趣,例如“萝卜蹲”游戏,每个学生代表一个单词,让学生依次说出其他学生的英文单词,被点到的学生要边蹲边说出另外一个英文单词,使学生在游戏中加深对单词的记忆和理解。教师还可以通过听英文歌曲来提高学生的学习兴趣,一首英文歌曲中包含很多英语常用词汇,教师要选择适合学生年龄特点,容易被学生理解的英文歌曲,学生在欣赏和学唱英文歌的同时会自觉地学习其中的字母和单词,在轻松的课堂氛围中为英语入门学习打下良好的基础。此外,教师可以运用多媒体来辅助教学,通过多媒体来播放英文动画,展示英语单词图片等,来激发学生的学习兴趣。

二、习惯是学习的扎实基础

学习习惯的培养是小学阶段英语入门教学的重要工作,良好的学习习惯将会伴随学生的终身,它将直接影响到学生的学习兴趣。学习习惯不是一朝一夕就能养成的,它需要学生在长期的学习过程中逐渐形成。教师在小学阶段英语入门教学中,要充分利用一切机会,合理把握教学时机,帮助学生养成良好的学习习惯。英语入门学习习惯的养成,直接影响到学生的学习效果,学校和教师要布置早读任务,给学生留出一定的时间来读英语单词、课文等,鼓励学生多背单词和日常用语,不断积累英语知识,开设课外英语阅读活动,提高学生的阅读能力。教师在课堂上要引导学生多观察英语字母和单词,培养学生良好的观察习惯,让学生跟着录音机或老师来默念单词,用心听单词的正确发音,培养学生正确的发音能力。此外,教师还要设计多样化的教学活动,通过游戏、小组探究等方式,让学生积极主动地参与到课堂活动中,通过小组合作的方式,让学生交流自己的学习感受,鼓励学生进行简单的英语交流,培养良好的学习习惯。

三、夯实英语基础教学

英语入门教学中基础性工作是单词教学和语音教学,单词是构成英语句子的基本元素,而语音教学又与单词教学密切相关。教师在教学过程中要坚持每天引导学生利用拼读规则来正确读背单词,每天早读放录音,让学生跟着录音机练习听音和发音。学生先合上书听读单词,再打开书听读,坚持每天反复训练,培养自身的发音能力。教师要鼓励学生大声拼读字母、单词、句子,布置硬性的背诵人物,让学生熟练英语句型和对话,在课堂上有意识地培养学生的口语能力。在单词教学的过程中,教师要以26个英文字母为基础,教会学生正确理解每个单词的词性和意义,让学生真正会用单词,通过正确的教学方法来帮助学生记忆单词,每节课都要抽出时间来练习单词、复习旧单词、学习新单词、不断积累单词,提高英语学习的效率。

四、遵循小学生的特点,加强英语学习

一是发展心理学。在学生生理发展与认知发展方面进行优化教学。学语言自身有其规律,先学习听的能力,再发展说的能力,最后是读写能力。学生听到一定程度后,小学生愿意说,说得自然,熟了之后再输出,这样符合了学习语言的发展规律。

二是学习理论。联想主义的学习,运用全身反应来学习。记忆的联系若是经常并强烈,这记忆的回忆更容易。小学生先用身体反应,然后进行语言反应,将两者联系起来,形成记忆。

三是人文主义教育学。英语教学要时刻重视语言的互动,学生学习语言放松,效果最好。小学英语的入门课堂,教师要创造宽松的学习环境。

五、重视语音和单词学习

语音教学中,教师激发学生的学习兴趣,创造和谐的课堂气氛。用手势、表情等身体语言,让学生在听懂英语的前提下学单词发音与开始简单对话。小学生听觉比较灵敏,善于模仿与不怕错,教师要要求学生正确发音,提高学生的语音水平。

单词教学中,首先要学会26个字母的拼写,让学生正确理解单词意思用法,可以创新教学提高学生的记忆力。

语音教学与单词教学密不可分,必须同步进行,学生要具有看音标读单词与根据单词总结发音的能力,提高学生的综合素质。

六、因材施教,培养自主能力

小學生有的外向主动,有的内向羞涩。教师组织课堂时,内向学生一般不愿参与,教师不可以忽视这些学生,在每节课都要单独为他们安排小活动,可以指名回答,让学生有均等机会。活跃的学生要适当控制,避免其扰乱课堂。

小学生多喜欢表现自己。针对这点,教师可提前布置预习和复习任务,让学生有机会在课上表现,养成好的学习习惯、正确的学习办法,取得好的学习效果。

总之,小学阶段英语入门学习对于学生一生的英语学习有着重要的作用。小学英语教师作为学生英语学习的启蒙者,一定要不断提升自身的英语教学技能,做好学生学习英语的引导者,使学生在英语入门学习阶段掌握良好的英语学习方法,培养良好的学习习惯,提高小学生的英语学习能力。

上一篇:海洋灾害下一篇:数学实例