论文部分内容阅读
[摘要]C语言作为一门高级程序设计语言,其重点是培养学生掌握程序设计的思想和方法,难点是作为程序设计的入门课程,应当如何引导学生突破传统的思维方式,学会分析问题和解决问题,培养程序设计的新思想。这里笔者谈谈在从事C语言教学过程中的一些经验和想法。
[关键词]算法 C程序设计 教学方法
一、 引言
程序设计语言类课程的指导思想是:使学生通过学习既掌握高级编程语言的知识、编程技术和基本算法,又掌握程序设计的思想和方法,更具备利用计算机求解实际问题的能力,能灵活运用高级语言进行程序设计。在C程序设计教学中,如何将教学的重点放在思路、算法、编程构思和程序实现上,提高学生的编程能力是我们教师值得考虑解决的问题。
二、 注重教学的方式方法
笔者认为教学方法和教学模式并不是一成不变的,现实中由于教学目的、教学内容及学生情况等因素的千差万别,没有哪一种教学模式或方法是普遍适用的,惟一的原则就是根据实际情况采用合适的教学模式和教学方法。比如大学新生入学就学习C语言,在接受新知识和理解新概念的能力方面有一定的差异,那么我们就应该适当降低教学难度,让他们先熟练掌握基本的知识点后,再深入。相对于计算机的一些纯理论课和实操课来说,《C语言程序设计》注重由设计算法到书写程序并进行调试的整个过程,显得抽象、复杂,这也是大多数学生抱怨程序设计太难、不好学的主要原因。因此,我就将第一次课定为上机实验课,给出几个简单并有输出结果的程序源代码,让每个学生编辑并调试。当他们”编”的程序成功地输出结果的时候,学生对程序设计的兴趣自然就产生了。在此基础上,再进行一些简单的修改,让程序得到不同的结果,并解释原因,然后提出新的问题,让学生思考如何修改程序以解决新的问题。整个教学过程中应该把解题思路、方法和步骤当作授课的重点,让学生明白如何分析并解决实际问题,逐渐培养学生进行程序设计的正确思维模式。
1.在教学过程中用启发、引导的方法;设置一些难度不一的问题,引导学生思考,活跃他们的思维。问题是最好的老师,是学生学习的引导者,没有问题便没有深入。在教学过程中,引导学生在问题解决中学习,要留给学生时间思考、讨论、解决问题,从而让学生对这些知识点记忆深刻并更深入地展开学习。
例如,在讲数组的概念时,老师可以先设置问题:编程计算10个人的英语平均成绩。根据以前所学,学生会想到:需要说明10个类型相同的变量用于存放这10个人的英语成绩。再进一步要求:计算50个人的英语平均成绩。这时候如再说明50个变量,则会将问题麻烦化,学生此刻需要讨论该如何合理说明变量。再深入一步:求100个人的英语平均成绩。此时,当教师引出数组的概念、分析数组的性质时,学生不仅能够很容易记住数组的性质,还能够知道在什么情况下使用数组类型,事半功倍。
2.教给学生正确的学习方法,引导学生掌握程序设计的思想;经验丰富的软件设计者都知道程序设计的关键在于找到解决问题的方法,即算法。结构化程序设计的思想,是当拿到一个任务时,首先应将这个问题自顶向下逐步细化,逐层向下分解,直到满足每一个要求。实现时,可以先用流程图、N-S图或PAD图描述出算法,再将之转化成程序。C语言作为大学第一门程序设计课程、面向毫无程序设计经验的一年级新生开设,问题是:他们根本不知道什么是软件工程,也不能立刻掌握问题的全貌,很难读懂流程图、N-S图描述的算法,更不用说问题的转化。伪代码是接近于自然语言描述算法的工具,英文字符少,简单易懂,便于掌握和表达,也易于转换成高级语言。在讲课时,采用自顶向下的方法讲解每一道程序设计题,可采用伪代码语言描述算法,将问题描述成几个子问题或子功能,再将子问题进一步细化,直到所有子问题或子功能都能用语句描述为止。
例:编写程序计算1~100的累加和。
这个程序实现比较容易,可以作为循环结构讲解的入门题目。老师在给出程序之前可以先和学生讨论:如果要从数1加到数100,是不是要定义100个变量来表示1至100?这样实现可以吗?有没有简便的算法?答案是肯定的,从而给学生引出循环的概念。然后先进行以下分析:
①要解决问题,需要定义几个变量,变量的类型如何确定。
②变量需要定义初始值吗?
③求累加和。
④输出结果。
进一步分析:
①经过分析可以定义两个变量,分别设变量i用于累计加法运算的次数,做计数器使用,同时也可作为存放加数的变量,变量sum用来存放连续加法运算的累加值;根据题目要求其类型应为整型(int)。
②因为累加从1开始,所以变量i被赋初值1;存放累加和的变量sum要先将其内容清空,即sum=0。
③使用循环结构求出累加和。
④输出sum的值。
将③再进一步深入:
◆ 让学生分析循环继续的条件是什么(i<=100);当满足循环条件时如何实现求和运算(sum=sum+i;);变量i作为每次累加的加数,其内容一定要是变化的,从1变化至100(i++;),同时此语句可使循环结束,从而避免死循环。
这种方法可以引导学生了解程序设计的思路和方法,有助于他们把握问题全局,分阶段逐步深入细化。
3.有选择地运用多媒体教学;直观、形象的多媒体教学可以使学生在有限时间内迅速理解、掌握、获取更多知识和信息,教学过程中,应有选择地使用多媒体教学,如使用幻灯片、视频、动画等,可以将C语言中的语法规则和逻辑推理的内容直观、形象地讲授给学生,加深其对问题的理解,实现将抽象问题形象化、枯燥问题生动化的效果。对于多媒体教学不易实施的程序设计方法的讲解,我们采用传统的教学方法配合适当的板书,教会学生如何思考、推理,如何用语句实现算法,培养了学生的抽象思维、逻辑推理能力。
4.算法设计是重点,注重典型算法的教学
算法是程序设计课程的教学重点,也是难点。所谓算法就是为解决一个问题而采取的方法和步骤。可以说,程序设计的灵魂是算法,而语言只是表示算法的一种工具而已。没有正确的算法,计算机将解决不了任何问题。因此,在开始进行语言教学之前,应先简单介绍如何分析问题、设计算法并将算法正确表示出来,以保证更好地进行后面的教学。
对于C语言所涉及到的算法,应进行部分精讲,同时还应注意这些算法之间的联系,也为后续课程打基础。这些典型算法有选择法、筛选法、起泡法、折半查找法等算法。在讲解算法时,应该与课程的相关内容进行结合,如选择法可以结合选择程序设计结构;筛选法、起泡法等算法可以结合数组、函数部分进行教学。这样学生在熟练掌握这些算法的同时,也学习并掌握了相关课程内容,并逐渐养成了在程序设计时进行触类旁通思考的思维模式。
三、积极培养学生综合运用知识及自己动手的能力
程序设计课程的实践性很强,学生只听不练根本达不到学习该课程的目的。曾有学生问:用程序实现比较两个数的大小有什么用?这些说明教材的例题注重理论实现,离实际应用较远,学生学习积极性不高,兴趣不大,甚至抄作业应付老师。只有让学生动手编写他们感兴趣的程序,学生才会有成就感,才会对课程产生兴趣,学起来才会比较从容。如何让学生综合应用所学知识解决实际问题,激发其学习兴趣,提高其学习的主动性?我们可以加入课程设计的环节。课程设计是对一学期所学知识的总结和巩固,其选题既要与实际生活或工作相关,满足实际需求,又能够让学生感兴趣、能够运用所学知识解决。设计的题目也可以具有一定的规模,可将其分成几个子题目,让学生分组完成,组内分工合作,既培养了学生的团队协作精神,又锻炼学生的动手能力。
四、增加交流机会,经常总结,及时解决教学过程中的问题
在教学过程中,老师应尽可能地增加与学生交流、沟通的机会,让学生将学习中遇到的问题及时提出来,以了解学生对课程内容的掌握情况。有时教学中也会遇到解决不了的问题,就会利用课后查找相关资料,与有经验的教师讨论,从而解答学生的问题。从与学生交流的过程中,笔者发现函数部分是C语言的一个难点,尤其是如何调用函数、参数如何进行传递等知识点,很多学生在学习这部分内容时掉了队,因此我建议教学时,应在详细解释函数定义和函数声明的含义之后,重点讲解函数调用。
以上是笔者在教学中的一些经验体会,实际在教学过程中值得探讨的问题还有很多,比如教学中应适当给予学生鼓励、本科阶段的学生应该如何培养其自学能力等。在C语言教学中,应把逻辑和编程解题思路放在首位,教会学生如何分析问题、解决问题是关键。教学是一门艺术,也是一门学问,它是教师的创造性、能动性、表演才能和科学水平的综合体现,如何将教学对象的内在积极性与潜能充分发挥出来,从而达到最佳的教学效果,还需要进行一个长期的探索、实践并总结。
参考文献
[1]谭浩强.C程序设计(第二版)[M].北京:清华大学出版社,2004
[2]郑立华,张莉.在C程序设计教学中注重培养学生的综合编程能力[J].计算机教育,2005
[3]吴文虎.程序设计基础(第二版)[M].北京:清华大学出版社,2004.9
[关键词]算法 C程序设计 教学方法
一、 引言
程序设计语言类课程的指导思想是:使学生通过学习既掌握高级编程语言的知识、编程技术和基本算法,又掌握程序设计的思想和方法,更具备利用计算机求解实际问题的能力,能灵活运用高级语言进行程序设计。在C程序设计教学中,如何将教学的重点放在思路、算法、编程构思和程序实现上,提高学生的编程能力是我们教师值得考虑解决的问题。
二、 注重教学的方式方法
笔者认为教学方法和教学模式并不是一成不变的,现实中由于教学目的、教学内容及学生情况等因素的千差万别,没有哪一种教学模式或方法是普遍适用的,惟一的原则就是根据实际情况采用合适的教学模式和教学方法。比如大学新生入学就学习C语言,在接受新知识和理解新概念的能力方面有一定的差异,那么我们就应该适当降低教学难度,让他们先熟练掌握基本的知识点后,再深入。相对于计算机的一些纯理论课和实操课来说,《C语言程序设计》注重由设计算法到书写程序并进行调试的整个过程,显得抽象、复杂,这也是大多数学生抱怨程序设计太难、不好学的主要原因。因此,我就将第一次课定为上机实验课,给出几个简单并有输出结果的程序源代码,让每个学生编辑并调试。当他们”编”的程序成功地输出结果的时候,学生对程序设计的兴趣自然就产生了。在此基础上,再进行一些简单的修改,让程序得到不同的结果,并解释原因,然后提出新的问题,让学生思考如何修改程序以解决新的问题。整个教学过程中应该把解题思路、方法和步骤当作授课的重点,让学生明白如何分析并解决实际问题,逐渐培养学生进行程序设计的正确思维模式。
1.在教学过程中用启发、引导的方法;设置一些难度不一的问题,引导学生思考,活跃他们的思维。问题是最好的老师,是学生学习的引导者,没有问题便没有深入。在教学过程中,引导学生在问题解决中学习,要留给学生时间思考、讨论、解决问题,从而让学生对这些知识点记忆深刻并更深入地展开学习。
例如,在讲数组的概念时,老师可以先设置问题:编程计算10个人的英语平均成绩。根据以前所学,学生会想到:需要说明10个类型相同的变量用于存放这10个人的英语成绩。再进一步要求:计算50个人的英语平均成绩。这时候如再说明50个变量,则会将问题麻烦化,学生此刻需要讨论该如何合理说明变量。再深入一步:求100个人的英语平均成绩。此时,当教师引出数组的概念、分析数组的性质时,学生不仅能够很容易记住数组的性质,还能够知道在什么情况下使用数组类型,事半功倍。
2.教给学生正确的学习方法,引导学生掌握程序设计的思想;经验丰富的软件设计者都知道程序设计的关键在于找到解决问题的方法,即算法。结构化程序设计的思想,是当拿到一个任务时,首先应将这个问题自顶向下逐步细化,逐层向下分解,直到满足每一个要求。实现时,可以先用流程图、N-S图或PAD图描述出算法,再将之转化成程序。C语言作为大学第一门程序设计课程、面向毫无程序设计经验的一年级新生开设,问题是:他们根本不知道什么是软件工程,也不能立刻掌握问题的全貌,很难读懂流程图、N-S图描述的算法,更不用说问题的转化。伪代码是接近于自然语言描述算法的工具,英文字符少,简单易懂,便于掌握和表达,也易于转换成高级语言。在讲课时,采用自顶向下的方法讲解每一道程序设计题,可采用伪代码语言描述算法,将问题描述成几个子问题或子功能,再将子问题进一步细化,直到所有子问题或子功能都能用语句描述为止。
例:编写程序计算1~100的累加和。
这个程序实现比较容易,可以作为循环结构讲解的入门题目。老师在给出程序之前可以先和学生讨论:如果要从数1加到数100,是不是要定义100个变量来表示1至100?这样实现可以吗?有没有简便的算法?答案是肯定的,从而给学生引出循环的概念。然后先进行以下分析:
①要解决问题,需要定义几个变量,变量的类型如何确定。
②变量需要定义初始值吗?
③求累加和。
④输出结果。
进一步分析:
①经过分析可以定义两个变量,分别设变量i用于累计加法运算的次数,做计数器使用,同时也可作为存放加数的变量,变量sum用来存放连续加法运算的累加值;根据题目要求其类型应为整型(int)。
②因为累加从1开始,所以变量i被赋初值1;存放累加和的变量sum要先将其内容清空,即sum=0。
③使用循环结构求出累加和。
④输出sum的值。
将③再进一步深入:
◆ 让学生分析循环继续的条件是什么(i<=100);当满足循环条件时如何实现求和运算(sum=sum+i;);变量i作为每次累加的加数,其内容一定要是变化的,从1变化至100(i++;),同时此语句可使循环结束,从而避免死循环。
这种方法可以引导学生了解程序设计的思路和方法,有助于他们把握问题全局,分阶段逐步深入细化。
3.有选择地运用多媒体教学;直观、形象的多媒体教学可以使学生在有限时间内迅速理解、掌握、获取更多知识和信息,教学过程中,应有选择地使用多媒体教学,如使用幻灯片、视频、动画等,可以将C语言中的语法规则和逻辑推理的内容直观、形象地讲授给学生,加深其对问题的理解,实现将抽象问题形象化、枯燥问题生动化的效果。对于多媒体教学不易实施的程序设计方法的讲解,我们采用传统的教学方法配合适当的板书,教会学生如何思考、推理,如何用语句实现算法,培养了学生的抽象思维、逻辑推理能力。
4.算法设计是重点,注重典型算法的教学
算法是程序设计课程的教学重点,也是难点。所谓算法就是为解决一个问题而采取的方法和步骤。可以说,程序设计的灵魂是算法,而语言只是表示算法的一种工具而已。没有正确的算法,计算机将解决不了任何问题。因此,在开始进行语言教学之前,应先简单介绍如何分析问题、设计算法并将算法正确表示出来,以保证更好地进行后面的教学。
对于C语言所涉及到的算法,应进行部分精讲,同时还应注意这些算法之间的联系,也为后续课程打基础。这些典型算法有选择法、筛选法、起泡法、折半查找法等算法。在讲解算法时,应该与课程的相关内容进行结合,如选择法可以结合选择程序设计结构;筛选法、起泡法等算法可以结合数组、函数部分进行教学。这样学生在熟练掌握这些算法的同时,也学习并掌握了相关课程内容,并逐渐养成了在程序设计时进行触类旁通思考的思维模式。
三、积极培养学生综合运用知识及自己动手的能力
程序设计课程的实践性很强,学生只听不练根本达不到学习该课程的目的。曾有学生问:用程序实现比较两个数的大小有什么用?这些说明教材的例题注重理论实现,离实际应用较远,学生学习积极性不高,兴趣不大,甚至抄作业应付老师。只有让学生动手编写他们感兴趣的程序,学生才会有成就感,才会对课程产生兴趣,学起来才会比较从容。如何让学生综合应用所学知识解决实际问题,激发其学习兴趣,提高其学习的主动性?我们可以加入课程设计的环节。课程设计是对一学期所学知识的总结和巩固,其选题既要与实际生活或工作相关,满足实际需求,又能够让学生感兴趣、能够运用所学知识解决。设计的题目也可以具有一定的规模,可将其分成几个子题目,让学生分组完成,组内分工合作,既培养了学生的团队协作精神,又锻炼学生的动手能力。
四、增加交流机会,经常总结,及时解决教学过程中的问题
在教学过程中,老师应尽可能地增加与学生交流、沟通的机会,让学生将学习中遇到的问题及时提出来,以了解学生对课程内容的掌握情况。有时教学中也会遇到解决不了的问题,就会利用课后查找相关资料,与有经验的教师讨论,从而解答学生的问题。从与学生交流的过程中,笔者发现函数部分是C语言的一个难点,尤其是如何调用函数、参数如何进行传递等知识点,很多学生在学习这部分内容时掉了队,因此我建议教学时,应在详细解释函数定义和函数声明的含义之后,重点讲解函数调用。
以上是笔者在教学中的一些经验体会,实际在教学过程中值得探讨的问题还有很多,比如教学中应适当给予学生鼓励、本科阶段的学生应该如何培养其自学能力等。在C语言教学中,应把逻辑和编程解题思路放在首位,教会学生如何分析问题、解决问题是关键。教学是一门艺术,也是一门学问,它是教师的创造性、能动性、表演才能和科学水平的综合体现,如何将教学对象的内在积极性与潜能充分发挥出来,从而达到最佳的教学效果,还需要进行一个长期的探索、实践并总结。
参考文献
[1]谭浩强.C程序设计(第二版)[M].北京:清华大学出版社,2004
[2]郑立华,张莉.在C程序设计教学中注重培养学生的综合编程能力[J].计算机教育,2005
[3]吴文虎.程序设计基础(第二版)[M].北京:清华大学出版社,2004.9