错误案例教学法在C语言教学的应用论文(推荐8篇)
关键词:C语言程序;编程思维;错误案例教学法
1C语言中错误类型和产生的原因
1.1C语言程序中的错误分类
在C语言学习编程过程中,一般是三种错误,语法错误、逻辑错误以及运行错误。
(1)语法错误:没有按照语言的规范进行编程而产生的错误。如缺少标点符号,变量没有申明,变量类型出错,函数名称写错等等,这些语法错误机器一般会给出提示,比如Error和Warning,在运行的时窗口下会显示错误的个数以及出错的原因等信息,很容易被发觉,如果没有修改则会影响整个程序的运行。
(2)逻辑错误:程序可以正常运行,但是得不到预期的结果。常见错误有复合语言的花括号后加分号,输入输出的数据类型与所用格式说明符不一致等等。而这样的逻辑错运行时候并没有提示,比较难发现,对于初学者而言比较困难,只有在编程中进行系统和全面的考虑才能避免逻辑错误。
(3)运行错误:在既没有语法编译错误,也无语法逻辑错误的情况下程序运行时发生的错误或者程序会忽然停止运行,比如类型溢出,数字表达式格式有误,除零错误等等。
1.2程序错误解析
(1)为申明变量或使用一些没有赋值的自动变量:C语言是一门十分严谨的程序语言,必须严格遵守变量必须先申明后使用的原则,但是很多初学者没有养成良好的编程习惯就会忘记,直接使用,这样就会不断有提示变量未定义的错误。
(2)不区分字母的大小写:在C语言中,大小写字母是不同的字符,比如A和a表示的是两个不同的变量。
(3)分号的乱用:由于分号是C语言的重要组成部分,比如简单语句以分号为结束标志,复合语句是用一对花括号括起来的一组语句,空语句只有一个分号。学生很容易忘记加分号,或者多加分号。
(4)赋值符号当成“=”使用:在很多人的思维里面“=”符号是“等于”的关系,如A=36,就认为是左边的A等于右边的36,实际上是把右边的36赋值给左边的A,如果学生的思维停留在前者“等于”的关系,就会明显出现编译的错误。
(5)数据类型定义错误,造成数据的溢出:C语言中的整数数据类型在-32768到32767之间,由于很多时候编写程序都是用的是inta,b,一些初学者都会默认用int来定义所有的变量,忽略了数据类型的范围,一旦结果超出了这个范围,甚至是小数,就会得到不一样的结果,而这个结果可能在程序的运行并不报错,也比较难发现。综上所述,这些错误很多都是学习程序的学生没有养成良好的编程习惯而造成,这样的错误防不胜防。只有在错误中学习,不断对错误进行分析,才能提高自身的编程能力。
2基于错误案例培养的C语言程序设计改革的具体措施
2.1对错误案例进行搜集和分类
搜集错误案例是一项艰苦的劳动,需要花费一定的时间和精力。首先教师需要明确C语言课程的所有教学内容,对错误案例的搜集也要有针对性,对于教师的要求就是需要研读教材,根据教学的对象和教学内容知识点分布,搜集实践教学中记录的错误日志文件,进行错误案例设计,并对错误案例进行评估,记录学生在分析错误案例中遇到的问题和反应,从而拟定相应的教学方案。其次可以让学生组织兴趣小组,大约5-6人一组,这样可以减轻教师的工作,可以由组长协助教师和组员对于提交的错误进行分类和整理,甚至可以按章节按知识点进行分类,因为学生编程过程中肯定有很多重复的错误,如果一一进行上报和记录会非常繁琐,组长只需对错误的类别和错误的频率进行记录,就会很有利的协助教师进行错误案例的设计。最后即学生自己的工作,因为真正需要学习实践的是学生本人,虽然每个组有组长,但是组长同样也是学生,他(她)的工作是既要保证自己的学习,也要汇总其他组员的学习情况,工作比较繁重,所以最好要求每一个学生自己也准备错误日志笔记本,对自己在实践练习中出现的问题,涉及到的知识点,疑问,错误的原因进行整理和记录,当然如果学生觉得时间有限,也可以用手机进行拍照,如果能通过翻阅图书,搜索网络的方式改正错误更好,实在没有能力改正可以去请教其他组员和教师,这样更能加深对错误的记录,尤其需要关注编程过程中经常出现的典型问题,这类问题可能经过多次调试也没有结果,需要加强对待,如果经过大家的帮忙或老师的指导后有了解决方案也需要记录下来,以备下次练习出现相关性问题可以自行解决。
2.2对错误案例进行分析和讨论
通过上面的途径,教师汇总了课堂教学中的错误案例后,就可以进行典型错误案例设计,可以在课堂正常教学中穿插讲解,比如可以先对学生提出错误案例问题,引导学生探索错误案例涉及的知识点,疑问,最终的解决方案等等。比如讲解选择结构的错误案例代码,可以先询问学生这段错误的案例代码主要是什么结构?如果是选择结构,再从头到尾分析代码的步骤,根据所学流程图的知识,让学生根据此段代码画出该程序的简单流程图。再通过对流程图的讲解很自然引出选择结构的语法知识点,并找出该代码真正错误的原因,最后让学生列举出日常生活中涉及到选择结构即条件判断的例子。教师还可以根据错误的类型在实践环节中给出相应的错误代码,让学生检验课堂学习的效果,避免编程过程中犯同类错误,在更正错误的过程中发现积极性,培养良好的编程习惯。
2.3教学效果及评价
通过在C语言程序课教学中引入错误案例学习,既能提高学生自主学习的效率、在实践中取得了更好的教学效果,也能大大提高学生的编程能力,例如,学生在定义数组的时候容易忽视数组的个数,可能会错误地使用下标的数字,只要教师在错误案例中重复申明该类错误,学生才会加深记忆,经过强调学生则会避免此类错误。通过对上课学生进行匿名问卷调查发现,100%的学生认为采用错误案例分析和讨论的学习模式比传统教师课堂填鸭式讲授语法知识点的模式更能提高自己的学习能力和学习效率。
3结论
想要提高C语言的编程能力,以及提高教学效果,可以从错误案例的搜集与分类开始,再引导学生通过错误案例分析与讨论解决实际问题,理清课程知识体系。错误案例教学法的运用有利于学生程序思维的建立,有利于学生程序设计能力的提高,同时对促进教学改革和加强素质教育有着积极的意义。在实际编程过程中还有其他的可能性,这需要教师在以后的教学过程中更要留心,更要注意错误经验的积累,所以研究此问题不仅仅可以提高学生的编程能力,而且对于教师自身教学技能理论加强也有着重要的实际意义。
参考文献:
在C语言的提高阶段,要把模块化的思想应用到教学中。通过案例分析,自然而然的引出问题的症结,提出能够解决问题的知识点与编程技巧。通过引导启发,让学生自上而下、逐步求精的去分析案例,掌握解决实际问题的能力,对学生深入掌握C语言大有裨益。
1 模块化案例教学
采用模块化编程,意味着开发C程序不是从逐条编写C语言代码开始,而是从宏观的角度用主程序和子程序等模块先把程序的主要结构和流程描述出来,并定义好输入和输出环节,逐步分解得到一系列以功能模块为单位的求解算法和流程。最终,通过实现各功能模块完成程序设计的目的。
案例教学源于美国哈佛商学院,这是一种注重师生互动的研究性教学方法。教师预先准备有针对性的案例,启发学生进行思考,积极参与讨论,通过案例引出知识点,进而层层深入得出解决方案,使学生全面掌握C语言编程的知识与方法。
案例教学的目的是调动学生的积极性,主动参与到案例分析中来,在讨论案例的过程中,巩固已有知识,理解新的知识点,掌握新的编程思路和方法,从而提高分析和解决实际问题的能力。
案例应分为简单案例和综合案例。简单案例针对单一的知识点,难度较小,学生参与的积极性高,有利于从一个小问题引发学生的思考,从而为综合案例奠定基础。综合案例应覆盖多个知识点,通过案例讨论,为课程设计的开展打下基础。所以,案例的选取需要有针对性,要来自学生熟悉的领域,难易程度要适中。
2 案例分析
理论课部分以简单案例分析为主,目的是让学生掌握新的知识点。通过教师引导,分析案例,启发学生寻找新知识点来解决问题。课程设计部分以综合案例分析为主,目的是让学生掌握分析解决实际问题的编程方法和技巧。
2.1简单案例分析
题目:求1+2+3+…+100之和
针对知识点:理解并掌握循环结构,能使用循环结构进行熟练编程。
已学知识点:C语言基础语法、顺序结构、选择结构。
初步分析:可以定义2个整型变量:s和n。变量s存储累加和,其初值为0,变量n作为累加项,其值由1变化到100,将n的每一个值累加到s变量,即可求出结果。引导学生利用已有知识写出如下代码:
进一步分析:代码中“n=n+1;s=s+n;”两条语句会在程序中反复出现了100次,如果我们在程序中把这两条语句写100遍,确实也可以计算出结果,但是计算机编程的优势体现在哪呢?如果题目变为求出1加到1亿呢?启发学生思考如何解决这个问题,引出循环结构存在的必要性和重要性,讲解for循环并引导学生修改代码如下:
最后,通过举一反三类比的方法,引导学生利用while循环和do~while循环改写代码,并体会循环结构的特点和作用,掌握利用循环结构编程的方法与思路。
2.2综合案例分析
题目:设计并实现学生信息管理系统
学习目标:通过该系统的开发实践,掌握C语言的关键知识点,掌握利用模块化的思想开发实际项目的方法与流程。
初步分析:通过自上而下、逐步求精的思路,可以得出该系统功能模块结构如图1所示。
进一步分析:采用模块化编程的方法,针对每个模块设计一个函数,然后在主程序main函数中调用各个模块函数来实现该系统,模块函数如表1所示,程序流程图如图2所示。
继续分析:通过分析各模块之间数据的关联,还有必要设置2个全局变量来标明学生记录数和课程记录数,之后就可以采用各个击破的方式编写各个模块函数完成该系统的开发任务。其中登录系统模块代码实现如下:
最后,依次完成各个模块函数的开发任务即可。
3 教学效果
理论课堂部分,通过教师对简单案例的分析引导,学生能够积极参与思考讨论,巩固了已有知识点,学会了新的知识点,并且达到了“知其然,知其所以然”的目标,为实验课编程实践打下了坚实的基础,实验课上安排的实验题目,学生基本上都能按时独立完成,较往年的完成情况有了很大改观。
课程设计部分,学生也能依照综合案例的分析方法,通过自上而下划分模块,各个击破的方式,完成自己的任务,基本上杜绝了往年抄袭现象泛滥的情况。
4 结语
关键词:C语言;教学改革;兴趣驱动;案例教学
中图分类号:TP312.1-4
《C语言程序设计》是计算机相关专业学生必修的一门非常重要的专业基础课,同时也是一门学生感兴趣程度比较高的程序设计课程。该课程是计算机及相关专业后继课程非常重要的前驱课程。通过该课程的学习,学生不仅要掌握C程序设计语言的知识,更重要的是要学会在程序设计语言中分析问题、解决问题的方法,提高程序设计的应用能力,为后续学习打下良好的基础。
然而,目前多数高校的《C语言程序设计》课程的教学效果却普遍不尽如人意,学生普遍反映C语言“不好学”,或者“听得懂,但不会编程序”,而教师也普遍认为学生的编程能力差,难以用C语言来进行程序开发。
1 C语言教学中存在的问题及原因分析
通过在学生及授课老师中进行广泛调研,总结出C语言教学中存在的主要问题如下:
(1)由于C语言中牵涉到的概念比较复杂,规则繁多,使用灵活,使不少学生在开始学习时兴趣极大,而随着学习的深入,面对越来越多的语法规则,学习兴趣越来越低。因此,学生普遍认为这门课难度大、不易学,反映在教学效果上就是期末考试不及格率高、学生动手能力差;
(2)即便通过了考试,绝大多数学生的C语言编程能力极度欠缺,仅具备阅读和编写几十行程序的能力,远达不到使用C语言来进行程序开发的要求。
形成这一状况的原因是多方面的,其中比较主要的有以下几个方面:
(1)目前高校的C语言课程的教学仍停留在传统的模式上,任课教师对该门课程的教学内容的理解和把握不够。对这门课,学生应该学什么,或者应该重点学什么,想要学什么,什么才能引起学生的学习兴趣等等,不能准确把握,却往往把重点放在讲述一些学生不感兴趣的语法规则方面,使得学生丧失学习兴趣,教学质量当然不高;
(2)大多数教材的结构安排都是先讲基础知识,再讲变量与运算符,然后是控制语句,过分注重语句、语法等细节的教学,基本上是以C语言教材自身的内容来展开的,没有把编程解题思路放在首位。即使后面的章节涉及到完整的编程,也总是在讲如何编程之前介绍大堆琐碎、枯燥乏味、难以理解和记忆的语法规则,和实际开发脱节,没有较容易理解和学习的生动有趣的范例。这样的教学方式已无法调动学生的学习兴趣,并最终导致学习的积极性和自信心双双受到打击。
(3)传统的C语言上机实践环节多为对教师课堂上所讲授内容进行的验证性实验,即单调乏味,学生不感兴趣;又相互之间缺乏连贯性,且无法构成一个体系。学生对编程缺乏系统的分析、设计能力,而且过于短小的程序很难让学生体会到涉及程序设计的各个方面的问题。
通过以上分析,教改小组提出了“基于兴趣驱动的案例教学法”,并在C语言教学中进行了实践,取得了较好的教学效果。
2 “基于兴趣驱动的案例教学法”在C语言教学中的实施应用
案例教学法最早于1870在哈佛法学院创立。后来,案例教学法为哈佛商学院所采纳,被引用在工商管理教育中。经过近百年的积累和发展,案例教学法已成为西方国家工商管理教育的重要手段之一。所谓案例教学法,是在教师的指导下,对案例提出的问题,运用所学的理论知识进行分析研究,提出自己的见解,做出判断和决策,达到提高学生分析问题、解决问题能力的一种理论联系实际的启发式教学方法。
案例教学法的教学过程包括案例的引入、案例学习、案例总结三个阶段。将“案例教学法”引入C语言教学过程,其中的关键就是选择、设计学生感兴趣的案例,让学生通过案例的解决来进行C语言相关知识的学习,并培养其分析问题、解决问题的能力。因此,所选案例应满足以下标准:
(1)该案例,学生感兴趣程度应比较高。兴趣是最好的老师,只有学生感兴趣的题目,才能使他们能够变被动学习为主动学习,愿意投入相当的时间、精力去分析问题、解决问题。而目前绝大多数教材上的例程,都只是对相应知识点的一些较小的验证性的程序,很难引起学生的兴趣,当然自主学习也就无从谈起;
(2)案例应能分解成多个由易到难、由简至繁的小案例,这些小案例应能覆盖C语言课程的主要教学体系,以方便循序渐进地进行课堂教学;
(3)案例应具有一定的可扩展性,并最终能够形成一个较为全面、实用的系统,以此增强学生的成就感;
(4)案例实现的难度应适中。实现过于简单的案例,难以起到锻炼学生的目的;而过于复杂的案例,学生实现不了,也会极大地挫伤学生的学习积极性;
按照以上的教学案例设计思路,在广泛、深入地对学生及授课教师进行调研后,明确了学生的学习兴趣点及教学过程中的难点,进行了相应的案例选择及设计,并最终形成了若干套学生兴趣程序较高的教学案例,表1为其中的一套教学案例。
3 结语
“兴趣驱动的案例教学法”是一种生动、灵活、多层次、全方位的教学方法,基本特点是使教师和学生共同投入一个学生感兴趣的、以案例为中心的学习过程中。通过几学期的教学实践,该教学方法取得了较好的教学效果,学生的上课认真程度、编程的兴趣、创新能力及综合程序开发能力均得到显著提高。但是,该教学方法目前仍处于实践阶段,在具体的实施过程中,我们发现应注意以下问题:
(1)实施案例的选择仍有极大的改进、改良空间。一方面,案例的选择要具有趣味性和针对性,不然不会吸引学生的学习兴趣;而另一方面,很难找到所有同学都比较感兴趣的案例。如表1列出的彩票案例,女生对其的兴趣程序明显低于男生。另外,功能过于全面的案例,对于初学程序设计的同学,又很难通过课堂教学来把内容全面传授给学生,而如果直接给学生提供所有的源代码,效果只会适得其反。因此,对于教学中使用的案例,目前仍在教研组的老师中反复的研讨、实践中。
(2)实施案例教学法对教师的要求比较高,否则很难达到预期的效果。目前,绝大多数教材还源于知识的讲解,这就要求主讲教师不仅要有渊博的理论知识,还要具有丰富的教学与实践经验,能够将教材中的理论知识与案例实践结合起来进行讲授。除此之外,教师在案例教学过程中还应避免直接把最终的程序拿出来进行讲解,而应按照“先分析、再实现”的原则进行;而在实现的过程中,也应先实现案例的主要核心内容,然后再进行逐步完善。这样才能充分调动学生的主动性、积极性,让学生参与到程序设计与完善中,引导学生一步步地分析、解决问题,形成良好的课堂教学环境。
(3)实施案例教学法对学生也有较高的要求。在案例教学过程中,学生是教学主体,那么学生素质水平也就决定了案例教学法的成败。如果学生的积极性不高,则课堂上的案例教学很难开展起来。要解决这一问题,首先教师要注重教学中的循序渐进,先从简单的案例开始,教师和学生一起分析案例并进一步训练他们学会如何分析问题,经过反复训练,学生的能力逐步提高,再增加难度。而同时,学生应做好课前的准备工作,提前预习相关内容,上课中应积极参与讨论,课后认真做好总结,并独立完成上机实践作业。
(4)案例教学的侧重点是提高学生学习C语言的兴趣、提升其编程能力,而该方法对于C语言中繁多的语法规则、以及应付等级考试中灵活多变的试题,却很难让学生系统地学习。
总之,采用案例教学,有利于学生提高分析问题、解决问题的能力,也是对传统教学法的一次重要改革,无论对学生还是教师都提出了更高的要求;而要使该教学法在C语言教学中取得更好的教学效果、发挥更大的作用,仍需进行深入的实践和进一步的完善。
参考文献:
[1]谢竞博.C语言程序设计教学中的问题及改革建议[J].重庆邮电大学学报(社会科学版),2008,20(2):137-140.
[2]简惠云.提高《C语言程序设计》教学质量的探讨[J].南昌教育学院学报,2006,21(3):47-50.
[3]王娜.C语言程序设计中程序调试的教学探讨[J].考试周刊,2008(17):183-184.
[4]赖晓晨.程序设计课程创新教学模式探索[J].中国大学教学,2008(7):42-44.
[5]高秀娥.C语言教学方法探讨[J].中国教育学杂志:高等教育版,2006(12):l46.
[6]张建珍.C语言教学方法探究[J].计算机教育,2007(9):12-13.
作者简介:蒲海波(1973.06-),男,汉族,四川省南充市,大学本科,讲师,主要研究方向:无线传感器网络、人工智能算法等;潘勇浩(1972.5-),男,汉族,四川雅安人,四川农业大学信息与工程技术学院,学士,讲师,从事计算机应用及教学研究;倪铭(1978.2-),男,汉族,四川雅安人,四川农业大学信息与工程技术学院,学士,讲师,从事计算机应用及教学研究。
从 Algol 派生出来的语言,如 Pascal 和 Ada,用 := 表示赋值而用 = 表示比较。而 C 语言则是用 = 表示赋值而用 == 表示比较。这是因为赋值的频率要高于比较,因此为其分配更短的符号。此外,C 可以多重赋值(如 a = b = c),并且可以将赋值嵌入到一个大的表达式或者语句中。这种便捷导致了一个潜在的问题:需要用比较的地方却写成了赋值。下面的语句看起来好像是要检查 x 是否等于 y :
if(x = y)
foo();
而实际上是将 y 的值赋值给 x,并检查结果是否非零。再看看下面的一个希望跳过空格、制表符和换行符的循环:
while(c == ’ ’ || c = ’t’ || c == ’n’)
c = getc(f);
在应该与 ’t’ 进行比较的地方程序员错误地使用了 =,而不是==。这个“比较”实际上是将’t’ 赋给 c,然后判断 c 的(新的)值是否为零。因为 ’t’ 不为零,所以这个“比较”一直为真,因此这是一个死循环。
一些编译器会对形如 e1 = e2 的条件给出一个警告以提醒用户。当你确实需要对一个变量进行赋值,然后再检查变量是否“非零”时,为了避免这种警告信息,应显式给出比较符。也就是将:
if(x = y)
foo();改写为:
if((x = y)!= 0)
foo();
2.多字符符号
一些 C 符号,如 /、* 或 =,只有一个字符。还有些 C 符号,如 /*、== 或标识符,具有多个字符。当编译器遇到紧连在一起的 / 和 * 时,它必须决定是将这两个字符识别为两个符号还是一个单独的符号。C 语言标准规定:“如果一个字符被识别为符号,则应该包含下一个字符看看包含此字符后构成的字符串是否仍然可以构成符号,如果可以则继续包含下一个字符,一直到不能构成符号为止。”。因此,如果 / 是符号的第一个字符,并且 / 后面紧随着一个 *,则这两个字符构成注释符开始标记。下面的语句看起来像是将 y 的值设置为 x 的值除以 p 所指向的值:
y = x/*p
/* p 指向除数 */;
实际上,因为 /* 是注释符开始标记,因此编译器会简单地“吞噬”程序文本,直到 */ 出现为止。换句话说,这条语句仅仅把 y 的值设置为 x 的值,而根本没有看到 p。我们应该将这条语句改为:
y = x / *p
/* p 指向除数 */;或者:
y = x /(*p)
/* p指向除数 */;
3.else 问题
考虑下面的程序片断:
if(x == 0)
if(y == 0)
error();
else {
z = x
y;
f(&z);
}
写这段程序的程序员的目的明显是想将情况分为两种:x == 0 和x!= 0。在第一种情况中,如果 y == 0,则调用 error()。第二种情况中,程序执行 z = x
y;和 f(&z)。
然而,这段程序的实际效果却大为不同。其原因是 else 总是与离它最近的 if 相关联。上面那段代码其实等价于:
if(x == 0){
if(y == 0)
error();
else {
z = x
y;
f(&z);
}
}
也就是说,当 x!= 0 发生时什么也不做。如果要达到我们想要的效果,应该改成:
if(x == 0){
if(y == 0)
error();
} else {
z = z
y;
f(&z);
}
4.表达式求值顺序
一些运算符以一种已知的、特定的顺序对其操作数进行求值。但另一些则不是。例如下面的表达式:
a
5.&&、|| 和!运算符
C 规定 0 代表“假”,非零代表“真”。这些运算符返回 1 表示“真”而返回 0 表示“假”。&& 和 || 运算符如果可以通过左边的操作数确定整个表达式的真假性,就不会对右边的操作数进行求值。!10 返回 0,因为 10 非零;10 && 12 返回 1,因为 10 和 12 的值都不是 0;10 || 12 也是 1,因为 10 非零。这个表达式中的 12 不会被求值,因为左边的 10 就足够确定整个表达式为真。同理 :10 || f()中的 f()也不会被求值。
6.下标从零开始
C 语言中,一个具有 n 个元素的数组中没有下标为 n 的元素,元素的下标是从 0 到n-1。下面的程序可能会崩溃:
int i, a[10];
for(i = 1;i
7.getchar 函数的返回值为整型(int)
请看以下程序:
#include
int main(void)
{
char c;
while((c = getchar())!= EOF)
putchar(c);
return 0;
}
摘 要:通过对中医药院校C语言程序设计课程开设的现状分析,针对学生程序编写的困难、兴趣不浓,学习积极性不高这一学情,根据自身教学经验的归纳与总结,受“模式”这一概念的启发,创新地提出了将“模式化”教学方法应用于C语言程序设计课程的教学实践中,使抽象的程序设计变得有章可循。结果表明:将“模式化”方法运用于C语言程序设计课程教学中不仅激发了学生的学习兴趣,使学生更轻松、快捷的掌握了程序设计的思想与方法,还提升了教学效果,是行之有效的教学创新实践。
关键词:模式化 C语言程序设计 中医药院校 教学方法
中图分类号:G4 文献标识码:A 文章编号:1674-098X(2015)05(b)-0100-02
2009年医药类计算机基础教学指导委员会颁布了“医药类院校的计算机基础教学的课程设置和基本要求”的指导性纲要文件,提出2+X的课程设置体系,其中“2”代表大学计算机基础(医药类)和程序设计基础两门必修课[1]。目前,大多数高校程序设计基础课开设为《C语言程序设计》。
C语言是一门功能强大、应用广泛的高级程序设计语言。但由于C语言中涉及的概念比较抽象、语法规则繁多,因此不少初学者感到学习困难、兴趣不浓,积极性不高。如何激发学生兴趣,提高教学质量,使学生能轻松快速的入门,培养学生的逻辑思维以及抽象思维能力,是教学中需要思考、值得探讨的问题。我校开设《C语言程序设计》的目的与现状
随着计算机技术在中医药领域的广泛、深入应用,例如医院信息管理、远程医疗、智能仪器设备、计算机医疗仿真等,都离不开程序设计技术的支持。可见,程序设计技术的基础性和重要性。我校在非计算机专业学生本科阶段开设《C语言程序设计》课程,旨在通过对课程的学习,使学生掌握程序设计的基本方法和技巧,培养学生的逻辑思维能力,训练学生严谨的治学态度,为其更深入、灵活的利用计算机技术解决行业中的实际问题奠定基础。
对于中医药院校的学生而言,本课程内容相对比较抽象、枯燥,理解、掌握起来比较困难,无法快速从“形象思维”到“逻辑思维”的转变;加之中医药院校大部分专业属于文、理生兼招的专业,考生生源的数学功底以及逻辑思维能力相对理工科院校而言较差,而C语程序设计是一门逻辑性很强的课程,这为教师的授课带来很大的阻力;此外,部分医药类专业的学生采用“背书式”的方式来学习程序设计,将概念、例题等背诵记忆下来,而并非真正理解,从而导致“上课能听懂,练习不会做”的现象比比皆是;还有部分学生片面的认为编程是程序员的事情,跟他们所学的专业以及将来的工作就业没什么直接或必然联系,因此重视程度不高,也缺乏兴趣。
针对上述问题,笔者通过几年的教学实践、总结与反思,在教学方法上进行如下研究与实践尝试,以促进中医药院校信息化人才的培养与教学效果的改善。“模式化”理论教学方法研究与实践
《C语言程序设计》课程内容较多,主要包括:程序的简单算法,语句基础,选择结构、循环结构程序设计,数组,函数,指针,构造数据类型,文件等。我校开设该课程的课时数为48学时,其中理论课时24学时,实验课时24学时。由于课时极其有限,为了更有利于非计算机专业的本科生理解程序设计的思想,且能进行简单的程序编写,而不是一味地灌输所有知识点不考虑学生是否能够接受,故我校选取了最为基础、易于掌握的部分内容进行课堂讲授,包括:程序的简单算法,语句基础,选择结构、循环结构程序设计,数组,函数。如何将各章节零散的知识点关联在一起,来进行C语言程序设计,以实现某一功能需求,是本课程理论教学的核心,而教会学生分析和解决问题的思路和方法是关键。模式其实就是解决某一类问题的方法论,即把解决某类问题的方法总结归纳到理论高度。受到“模式”这一概念的启发,笔者经过教学观察和研究发现:将“模式化”方法运用于程序设计的教学中,能为学生提供更清晰、便捷的分析问题解决问题的思路与方法,而尽量减少学生对于程序编写感觉无从下手的状态出现。
2.1 宏观上分析问题,设计程序
面对一个编程需求(即题目要求),首先要学会分析问题:即看懂题目意思。仔细研读并分析编程需求中的每一句话,从宏观上明确需要解决哪几个问题,各个问题采用何种程序设计结构,解决各个问题的关键点或关键步骤是什么。宏观分析阶段,可以用自然语言、流程图、N-S图等方法将解决问题的关键步骤进行描述,即算法描述。宏观分析“模式化”为表1宏观分析“模式化”表。
说明:表1中的第三列关于“程序设计结构”的确定,需要根据待解决的问题选择合适的C语言句型。若为有条件执行,则采用选择结构,其中单分支结构选用if句型,双分支选用if…else…句型,多分支选择if…else if…else if…else…句型或switch句型;若为反复执行,则采用循环结构,其中明确循环次数多选择for句型,明确条件限制多选择while或do…while句型;若编程需求中涉及到多个待解决的问题或功能较复杂,在分析时可以功能模块的细化,将其划分为一个个独立的子功能模块,则采用函数解决。
2.2 微观上解决问题,编写程序
在对问题进行分析并作简要描述后(即填写好表1的内容),接着进行微观上的程序编写。笔者根据“一个简单C语言程序的结构,分为预处理命令和主函数两部分”这一特点,将微观程序设计模板设计如表2微观程序设计模板。
说明:表2中的预处理部分通常包含三类语句的书写,若用到C语言系统所提供的库函数通常要书写包含头文件语句(例如,要使用标准的输入/输出函数需包含头文件#include,要使用数学函数需包含头文件#include,要使用字符串处理函数需包含头文件#include);若程序中不涉及到宏定义则宏定义语句可以省略不写;若程序中不涉及到子函数的定义则函数声明语句可以省略不写,同时子函数实现部分也可以省略不写。
按照微观程序设计模板设计好后,学生最终只需按照C语言语法格式的要求将模板中每一部分或步骤“翻译”(即转化)成C语言的语句,即可完成程序的编写。在Visual C++6.0的开发环境下将编写好的文件保存为后缀名为.C的源文件,经过编译、链接、运行,验证程序设计的结果。
2.3 C语言程序设计案例分析
编程需求:打印出所有的“水仙花数”,所谓“水仙花数”是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个“水仙花数”,因为153=13+53+33。
建立水仙花数宏观分析模块化表。(见表3)
建立水仙花数微观程序设计模板。(见表4)
将水仙花数微观程序设计模板转化为C语言的源程序,代码如下所示:
#include
main()
{
int n,gw,sw,bw;
for(n=100;n<=999;n++)
{
gw=n%10; //分离出数n的个位
sw=n/10%10; //分离出数n的十位
bw=n/100; //分离出数n的百位
if(n==gw*gw*gw+sw*sw*sw+bw*bw*bw)//满足水仙花数的条件判断
printf(“%-5d”,n);
}
}
结语
笔者通过对学生的学习观察以及自身的教学经验总结,将“模式化”教学方法应用于C语言程序设计课程的教学实践中,取得了良好的教学效果。使学生再不会感觉程序编写无从下手或是深不可测,激发了学生的学习兴趣;培养了学生独立分析问题、解决问题的能力;使学生更轻松、快捷的掌握了程序设计的思想与方法。
参考文献
1.1 C语言发展概述
C语言是在1972年至1973年间由美国的贝尔实验室的M.D.Ritchie和K.Thompson以及英国剑桥大学的M.Richards等为描述和实现UNIX操作系统而设计的。
最初的C语言是附属于UNIX的操作系统环境,而它的产生却可以更好地描述UNIX操作系统。时至今日,C语言已独立于UNIX操作系统。它已成为微型、小型、中型、大型和超大型(巨型)计算机通用的一种程序设计语言。
随着C语言的不断发展、应用和普及,目前,C语言已经能够在多种操作系统下运行,实用的C语言编译系统种类繁多,如Microsoft C、Turbo C等。1.2 C语言的特点
C语言能够成为目前广泛的高级设计语言之一,完全是由其语言特点决定的。
(1)语言基本组成部分紧凑简洁。(2)C语言运算符丰富,表达能力强。(3)C语言数据结构丰富,结构化好。(4)具有结构化的控制语句。
(5)C语言提供了某些接近汇编语言的功能。(6)C语言程序所生成的目标代码质量高。(7)C语言程序可移植性好。C语言的弱点:
(1)运算符的优先级较复杂,不容易记忆
(2)C语言的语法限制不太严格,一定程度上降低了某些安全性。1.3 简单的C语言程序。1.3.1 C语言程序的构成 1.3.2 C语言程序的特点
(1)C程序是由函数构成的,其中至少包括一个函数main()。(2)函数体是由左右花括号{ }括起来的部分。(3)C语言中的每个基本语句都以“;”结束。
(4)C语言书写格式自由,一行内可以写一个语句,也可以写多个语句。
(5)#include语句是编译预处理语句,其作用是将由双引号或尖括号括起来的文件内容读入该语句位置处。对程序说明:
(1)可用/*„*/对C程序中的任何部分作注释。
(2)C语言中所有变量都必须先定义类型,然后再使用。(3)一个C语言程序通过函数之间的相互调用来实现相应的功能。即可以是系统提供的库函数,也可以是根据需要自己定义的函数。1.4 C语言上机步骤
运行环境:DOC操作系统下的Turbo C 1.4.1 C程序上机步骤
1.编辑:在TurboC环境下。将C语言源程序通过键盘输入到计算机中,并以文件形式存盘,源程序都是以.C为扩展名。
2.编译:通过编辑程序将源程序输入到计算机后,需要经过C语言编译器将其生成目标程序。得到的目标文件都是以.OBJ为文件扩展名。3.连接:经过编译后生成的目标文件需经过连接后才能生成可执行代码。其扩展名是.EXE。
所谓连接,是将目标文件和库函数或其他目标程序连接成可执行的目标程序。
4.执行:连接后源程序的目标程序就是可执行文件了。在DOS系统下,只要键入可执行文件名,按回车键就可以了。1.4.2 Turbo C系统菜单 1.Turbo C的主屏幕和主菜单功能 2.文件菜单及功能 1.4.3 程序调试方法
一个计算机程序必须对其进行测试来确定其可以正确地工作,这一过程称为调试。程序错误
语法错误:通过编译和连接就会找到 运行错误:通过调试自己找出问题所在 1.设置和使用观察变量 2.单步执行程序 3.设置和使用断点
2.1 常量和变量 2.2 整型数据 2.3 字符型数据 2.4 浮点型数据 2.5 变量的初始化
第二章 数据类型与表达式 2.1 常量和变量
2.1.1 常量:在程序运行过程中其值不能被改变的量。2.1.2 变量:在程序运行过程中其值可以被改变的量。
标识符:用来标识变量名、符号常量名、函数名、数组名、类型名、文件名的有效字符序列。1.标识符的有关规定:
(1)由英文字母、数字、下划线组成,且第一个字符必须是字母或下划线,一般不超过8个字符;(2)大小写字母的含义不同。
(3)不能使用C语言中的关键字做标识符,(4)用户取名时,应当尽量遵循“简洁明了”和见名知意的原则。2.变量名的有关规定:
(1)使用变量名前,一定先定认,后使用,否则不能做为变量名。(2)每一个变量属于一种类型,便于在编译时据此检查该变量所进行的运算是否合法。(3)变量名的定义:存储属性、数据类型、变量名表 3.数据类型 2.2 整型数据 2.2.1整型常量
(1)十进制整数:数码直接开头的十进制数。如1234,-234。(2)八进制整数:以0开头的常量是八进制数。如011=(11)8(3)十六进制整数:以0x开头的数是十六进制。如0x123即(123)16 例2.1 三种进制表示方法的转换 源程序a1.c main(){ Int x=1246,y=01246,z=0x1246;Printf(“%d,%d,%dn”,x,y,z);Printf(“%o,%o,%on”,x,y,z);Printf(“%x,%x,%xn”,x,y,z);} C:>a1 1246,678,4678 2336,1246,11106 4de,2a6,1246 2.2.2整型变量 原则:使用变量前,先定义,后使用。(1)基本型:用int表示;
(2)短整型:用short int或short表示;(3)长整型:用long int或long表示;(4)无符号型:
无符号整型:用unsigned int或unsigned表示;
无符号短整型:用unsigned short int或unsigned short表示;无符号长整型:用unsigned long int或unsigned long表示;2.2.3 整型变量使用
不同的整型数据,应根据其特性和取值范围,将其定义成不同类型的整型变量。
例2.2不同类型的数据进行算术运算。源程序a2.c Main(){ Int a,b,s1,s2;Unsigned x;a=10;b=-30;x=20;S1=a+x;s2=b+x;Printf(“a+x=%d,b+x=%dn”,s1,s2);} C:>a2 运行结果为 a+x=30,b+x=-10 2.2.3 整型变量使用
不同的整型数据,应根据其特性和取值范围,将其定义成不同类型的整型变量。
例2.3 整型数据各类型所能表示的范围 源程序a3.c main(){int a,b;long c,d;unsigned e,f;a=32767;b=1;c=2147483647;d=1;e=65535;f=1;Printf(“int: %d,%d,n”,a,a+b);Printf(“long: %d,%ldn”,c,c+d);Printf(“unsigned: %u,%un”,e,e+f);} C:>a3 运行结果为 Int: 372767,-32768 Long: 2147483647,-2147483648 Unsigned:65535,0 2.3 字符型数据 2.3.1 字符型常量
字符常量是由一对单引号括起来的单个字符构成,例如:‘A’,‘b’,’2’,’%’’;’等。一个字符型常量是该字符集中对应的编码值:‘0’~‘9’的ASCⅡ编码值是48~57。显然‘0’与数字0是不同的。
2.3.2 字符型变量
字符型数据分为两类:一般字符类型(char)和无符号字符类型(unsigned char)。
例2.4 字符型数据与整型数据可以通用 源程序a3.c Main(){char c1,c2;Printf(“%c,%cn”,c1,c2);Printf(“%d,%dn”,c1,c2);} C:>a4 运行结果为 A,B 65,66
2.3.3 字符串常量
字符串常量是由一对双引号括起来的字符序列,例:“fsdf”,”A”等。字符串常量中不能直接包括单引号、双引号和反斜杠““。字符串常量与字符常量的区别:
(1)字符串常量是用双引号括起来的字符序列。(2)字符串常量有串尾标记””;(3)字符串常量允许扩展表示法;
(4)C语言中没有专门的字符串变量。字符串如果需要存放在变量中,需要用字符型数组来存放。
注意:不要将单个字符组成的字符串常量与字符常量混淆。‘a’为字符串常量,不能把一个字符串常量赋给一个字符变量。例如:下面的用法都是错误的: Char c1,c2;C1=“a” C2=“CHINA”;字符‘’由系统自动加入到每个字符串的结束处,不必由编程人员加入。
字符串“CHINA”在内存中的存放形式如下图,其长度是六个字节,而不是5个字节。字符‘’所对应的ASCⅡ值为0,即“空”字符。2.4 浮点型数据 2.4.1 浮点型常量
浮点型常量有两种表示形式。十进制数形式
它是由数字和小数组成,如:3.14159,-7.2,8.9 指数法形式
如:180000.0用指数法可表示为1.8e5,1.8称为尾数,5称为指数。
0.00123用指数法可表示为1.23e-3 注意:
(1)字母e 或E之前(即尾数部分)必须是有数字的。(2)e或E后面的指数部分必须是整数。如:e-3,9.8e3.1,e5都是不合法的。
2.4.2 浮点型变量(实型变量)
把带有小数点的数称为浮点数,或实型数。浮点型变量又称为实型变量,按能表示数的精度,分为:单精度浮点型变量和双精度浮点型变量,其定认方法如下:
float a,b;/*单精度变量的定义*/ double c,d;/*双精度变量的定义*/ 单精度:占4个字节,有效位为7位,数值范围为10-37~1038 双精度:占8个字节,有效位为15~16位,数值范围约为10-307~10308 浮点型常量不存在单精度型和双精度型之分。2.5 变量的初始化 变量的初始人化:在定义变量的同时给变量赋予初值。方法:
(1)先说明变量类型,然后再赋值。
(2)在对变量类型说明的同时,给变量赋初值。先定义后赋值 int a,b,c;char d;floatb f;a=2;b=5;c=10;d=‘a’;f=5.7;定义和赋值同时进行 int a=5;short b=10;char c=‘a’;float d=7.8;3.对几个变量同时赋一个初值 Int a1=10,a2=10,a3=10;
初始化不是在编译阶段完成的,而是在程序运行时执行本函数时赋以初值的。相当于一个赋值语句。例如: int a=10;相当于: int a;a=10;
又如: Int a;,b,c=20;相当于: Int a,b,c;C=20;第三讲 运算符以及数据类型 2.6 运算符及表达式 2.7 数据类型转换 2.8 类型定义 2.6 运算符及表达式
C语言运算符可以分为:算术运算符、逻辑运算符、关系运算符、位运算符、赋值运算符。2.6.1 算术运算符和算术表达式
1.算术运算符:加、减、乘、除及取模即:+,-,*,/,%来表示。C语言规定:
(1)模运算符%,仅用于整型变量或整型常量。
(2)优先级:一个表达式中如有多个运算符,则计算先后次序为相应运算符的优先级高的优先。乘、除、模优先级高于加、减的优先级。(3)结合方向:是一个运算对象两侧的运算符的优先级别相同时,应遵循的处理规则。
算术运算符的结合方向是从左至右; 赋值运算符的结合方向是从右至左。
算术表达式:由算术运算符、括号以及操作对象组成的符号C语言语法规则的表达式称为算术表达式。2.6.2 赋值语句 1.赋值运算符
语言的赋值运算符是“=”,它的作用是赋值运算符右边表达式的值赋给其左边的变量。
例如:a=10,x=a+5,前者是把常量10赋给变量a,后者是将表达式a+5的值赋给变量x.注意:如果“=”两侧的类型不一致,在赋值时要进行类型转换。例如a=b,执行该语句时,b的结果转换为a的类型后才能进行赋值运算。2.复合赋值运算符
C语言允许在赋值运算符“=“之前加上其它运算符,以构成其复合运算符。复合运算符多数为双目。复合运算符有:
+=,-=,*=,/=,%=,<<=,>>=,&=,^=,|= 例:
a+=2
等价于 a=a+2 x*=y+5 等价于 x=x*(y+5)x%=8
等价于 x=x%8 赋值运算符都是自右向左执行。3.赋值语句与赋值表达式 赋值语句最简单的形式是: <变量>= <表达式>;
功能:是赋值运算符右边的“表达式”的值赋给左边的变量。
赋值表达式也可以包含复合的赋值运算符,例: 如果a=10,表达式a+=a-=a*a的值为-180。其步骤为:(1)先进行a-=a*a的计算,它相当于a=a-a*a=10-10*10=-90.(2)再进行a+=-90的计算,它相当于a=a+(-90)=-90-90=-180.4.自增自减运算符
i++(或i--)表示在使用该表达式值之后将i值加1(或减1)。++i(或--i)表示在使用该表达式值之前将i值加1(或减1)。
说明:
(1)++和--仅适用于变量,不能用于常量或表达式。(2)++和--运算符的结合方向是“至右向左”。Main(){int a=100;printf(“a++=%dn”,a++);printf(“++a=%dn”,++a);printf(“a--=%dn”,a--);printf(“--a=%dn”,--a);} 输出结果: a++=100 ++a=102 a--=102--a=100
2.6.3 关系运算符和关系表达式 1.关系运算符
关系运算符均为两目运算符。共有六种: >
大于
<
小于 >=
大于等于 <=
小于等于 ==
等于
!=
不等于
关系运算符要求两个操作数是同一种数据类型,其结果为一逻辑值,即关系成立时,其值为真(true),用非0值表示;关系不成立时,其值为假(false),用0表示。
关系运算符的优先级借低于算术运算符,关系运算符==和!=低于前四种运算符,并且结合方向均为自左至右。2.关系表达式
由关系运算符将两个表达式连接起来的有意义的式子称为关系表达式。如:a+b 关系表达式的值是一个逻辑值,即“真”或“假”。用1表示“真”,用0表示“假”。如: a=4,b=1,C=a>b;c的值为1,若a=1,b=8,x=a>b;x的值为0。2.6.4 逻辑运算符和逻辑表达式 1.逻辑运算符 逻辑运算符有“&&“(逻辑与)、”||“(逻辑或)和”!“(逻辑非)三种。 逻辑运算符的操作对象为零或非零整数值,见表2.4.表2.4 逻辑运算规则 逻辑表达式 由逻辑运算符和其操作对象组成表达式称为逻辑表达式。2.6.5 位运算符 位(bit)运算是C语言的一大特色,可直接对构成内存的基本单位 “字节”(byte)进行按位操作。按位与(&)操作规则:参加运算的两个运算量,如果两个相应的位均为1,则该 位的结果为1,否则为0,见表2.5 表2.5 接位与 例如:(1)清零。 (2)取一个数中的某些位。高位清零: 00101101 10011100 & 00000000 11111111 00000000 10011100 低位清零: 00101101 10011100 & 11111111 00000000 00101101 00000000 按位或(|) 操作规则:参加运算的两个运算量,其相应的位中只有一个为1,则该位的结果为1,否则为0。 表2.6 按位或 例如: (1)01000001 | 00101001 01101001(2)01000001 | 00000000 01000001(3)01000011 | 11111111 11111111(4)01000001 | 10111110 11111111 例如:将某一个数的某些位置为1。一个整数a,要将其低字节全置为1,即低字节为11111111,可将该数与255(十六进制为FF,二进制为11111111)按按位或即可。按位异或(^) 操作规则:参加运算的两个运算量,当相应位相同时,其结果在该位为0,相应位不同时,其结果在该位为1,即按位相加,但不进位。 表2.7 按位异或(1)使指定位翻转。即由1变为0,由0变为1。例: 01100110 ^ 00001111 01101001(2)不使用临时变量,交换两个值。方法为:若有两个数a和b,通过 下面的赋值语言可将 a和b的值互换: a=a^b;b=b^a;b=a^b;4.按位求反(~) 操作规则:运算符~是一个单目运算符,用来对一个数二进制表示按位求反,即瘵0变成1,将1变成0。 表2.8 按位求反 例: ~01101001 10010110 将一个数的某些位变为0。方法是:瘵该数a与~b按位求与,此处的b为这样的一个数,即要求a 中变为0的那些位均为1,其余位均为0。如要将a的最低位变为0,则可使用下述表达式实现。A=a&~1 5.左移(<<) 操作规则:将一个数的各二进制位全部左移若干位,左移后,右边的这些位用0填补,左边移出的位舍弃不用。例:a=a<<2;若a=15,即二进制00001111,左移两位后变为00111100。若再向左移4位,则变为11000000。 将一个数左移1位,相当于该数乘以2,左移2位相当于该数乘以4。如上例中a=15,则a=a<<2,此时a=15*4=60。但是这种情况仅指左移时没有1被移出去的情况,左移运算要比乘法运算快得多。 6.右移(>>) 操作规则:将一个数的各二进制位全部右移若干位,右移后,右边移出的位被舍弃,而左边的填补分两种情况:(1)该数为无符号数,则高位补0。例:a=a>>2;右a=15,二进制为00001111,右移两位后为00000011。 (2)该数为有符号数,若原来的符号位为0(最高位为0,即正数)则高位补0,若原来的符号位为1(即表示该数为负数),高位补0或1,取决于所使用的计算机系统。有的系统补0,称为逻辑右移,有的系统补1,称为算术右移。例:a:***1 a>>1:***1(逻辑右移)a>>1:***1(算术右移)2.6.6 其他运算符 逗号运算符 逗号运算符为“,“。逗号表达式是用逗号运算符把两个表达式组合成的一个表达式。其一般形式为 〈表达 式1〉,〈表达式2〉 说明:(1)逗号表达式的执行过程是:先求表达式1的值,再求表达式2的值,表达式2的值就是整个逗号表达式的值。 (2)一个逗号表达式可以与另一个表达式构成一个新逗号表达式。(3)逗号运算符是所有运算符中级别最低的。 (4)逗号表达式常用于for语句中,它可以表达多个初值或多个步长增量。 逗号表达式的一般形式可以扩展为 〈表达式1〉,〈表达式2〉,〈表达式3〉,„„〈表达式N〉 表达式n的值是整个表达式的值。 条件运算符 条件运算符是一个三目运算符,把三表达式组合成一个表达式。其一般形式为 〈表达式1〉?〈表达式2〉:〈表达式3〉; 功能:计算〈表达式1〉的值,如果该值为真(非0值),则计算〈表达式2〉的值,并且该值即为条件表达式值。若〈表达式1〉的值为假(0),则计算〈表达式3〉的值,并将该值作为条件表达式的值。说明: (1)条件运算符优先级别高于赋值运算符,低于关系运算符和算术运算符。 (2)条件运算符结合方向是“自右至左”。 (3)〈表达式1〉与〈表达式2〉、〈表达式3〉类型可以不同。3.Sizeof运算符 sizeof运算符是测试变量、表达式或类型名所占用的字节 数。有两种用法。 sizeof〈表达式〉:测试表达式所占用的字节数。sizeof〈表达式〉:测试类型名所占用的字节数。例如: sizeof(float)其值为4。sizeof运算符可以出现的表达式中。main(){ int a=4;fload b=5.6;printf(“%d,%dn”, sizeof(a), sizeof(b));} 输出结果: 2,4 2.7 数据类型转换 在内存中,字符是以系统中所使用字符的编码值形式存储的,C语言允许字符型数据和整型数据之间通用一个字符型数据,即可以以字符形式输出,也可以以整型形式输出,同时,字符型数据可能赋给整型变量,整型数据也可以赋给字符型变量,只是当整型变量数据的大小超过字符型变量的表示范围时,需要截取相应的有效位。 除字符型数据和整型数据之间可以通用之外,不同类型的数据在进行混合运算时,往往需要进行强制类型转换。因此类型转换有两种方式:一种是自动类型转换;另一种是强制类型转换。2.7.1 自动类型转换 在进行计算时,首先将不同类型的数据转换成同一类型,然 后进行计算 不同类型数值转换规则: Double float Long Unsigned Int char ,short 2.7.2 强制类型转化 强制类型转化的一般形式如下所示: (强制的类型名)〈变量〉 例如:(int)(a+b),将a+b的结果强制转换成int型; (float)a/b,将a的结果强制转换成float型后,再进行计算。注意:经强制类型转换后,得到的是一个所需类型的中间变量,原来变量的类型并没有发生任何变化。2.8 类型定义 C语言允许使用typedef语句定义新类型名,以取代已有类型名,如: typedef int counter;作用是定义counter等价于基本数据类型名int,以后就可以利用counter来定义int型变量了。如: counter I,n; 等价于int I, n;类型定义的优点是:能够提高程序可读性。注意: (1)typedef语句不能创造新的类型,只能为已有的类型增加一个类型名。(2)typedef语句只能用来定义类型名,而不能用来定义变量。例如:分析下例程序。# include “stdio.h” typeref int integer;typedef float real;Main(){ integer i=5;real f;f=real(i)/10;printf(%f”,f);} 第四讲 数据的输入输出 3.1 数据的输入 3.2 数据的输出 3.3 应用举例 3.1 数据的输入 3.1.1 字符输入函数getchar 格式: getchar() 功能:从键盘上接收输入的一个字符。例如: char c; ┆ c= getchar()其中c是字符型或整型变量。 例1:从键盘输入一个字符,并将其存入字符型变量c 中。#include”stdio.h” Main(){char c;C= getchar();} 3.1.2 格式输入函数scanf 格式:scanf(格式控制,地址表); 功能:用来输入任何类型数据,可同时输入多个类型或不同类型数据。格式控制:是由双括号括起来字符串,主要是由“%”和格式符组成 2.地址表 Scanf函数中的“地址表”部分是由变量的地址组成的,如果有多个变量,则各变量之间用逗号隔开。地址运算符为“&“,如变量a的地址可以写为&a。 例3.2用scanf函数,从键盘 上输入一个整型数、一个浮 点数和一个字符,分别存入 变量i、f和c中。 #include”stdio.h” main(){ int i;float f;char c;scanf(“%d,%f,%c”,&I,&f,&c);printf(“i=%d,f=%f,c=%c”,i,f,c);} 说明: (1)在scanf函数“格式控制”部分中的每个格式说明符都必须在“地址表列”中有一个变量与之对应格式说明符必须要与相应变量的类型一致。 (2)当格式说明符之间没有任何字符时,在输入数据时,两个数据之间要使用“空格”、“Tab”或“回车”键做间隔;如果格式说明符之间包含其它字符,则输入数据时,应输入与这些字符相同的字符做间隔,如: Scanf(“%d,%f,%c”,&i,&f,&c); 在输入数据时,应采用如下形式:20,7.8,a(3)可以在格式说明符的前面指定输入数据所占的列数,系统将自动按此列数来截取所需的数据,如: scanf(%2d%3d”,&x,&y);当用户输入78985时,系统将自动地将78赋给变量x,将985赋给变量y。这种方式也可用于字符型数据的输入。 (4)应该特别注意的是,scanf函数中的“地址表列”部分应当中变量的地址,而不是变量名。.2 数据的输出 3.2.1 字符输出函数putchar 数据的输出一般是以终端显示器(屏幕)为处理对象。格式:向终端输出一个字符。 说明:变量c可以是字符型,也可以是整型。例3.3 从键盘输入一个字符,在屏幕上显示出来。#include”stdio.h” main(){ char c;c=getchar(); /*从键盘输入一个字符*/ putchar(c); /*在屏幕上显示一个字符*/ } putchar函数也可以输出一些特殊字符(控制字符),如:putchar(‘n’)作用是输出一个“换行”字符。3.2.2 格式控制函数printf 格式: printf(格式控制,输出表); 功能:输出任何类型的数据。1.格式控制 “格式控制”部分与scanf函数的相似,也是由双引号括起来的字符串,主要包括格式说明和需要原样输出的字符。 “格式说明”:由“%”和格式符组成,如%c和%f等,作用是将要输出的数据转换为指定格式后输出。printf函数中使用的格式字符见表3.2。 表3.2 printf函数格式字符 注意:格式字符必须小写 输出表 printf函数中的“输出表”部分由表达式组成,这些表达式应与“格式控制”字符串中的格式说明符的类型一一对应,若“输出表”中有多个表达式,则每个表达式之间应由逗号隔开。 例3.4 从键盘输入一个整数和一个浮点数,并在屏幕上显示出来。#include”stdio.h” main(){ int i;float f;scanf(“%d,%f”,&i,&f);printf(“i=%d,f=%f”,I,f);} 执行此程序,按格式输入数据: 50,8,9 i=50,f=8.900000 说明: (1)printf函数中的“格式控制”字符串中的每一个格式说明符,都必须与“输出表”中的某一个变量相对应,如上述程序中的“%”与i对应;“%f”与f对应,而且格式说明符应当与其所对应变量的类型一致。 若要显示“%”字符,则应在“格式控制”字符串中连写两个“%”,如: Printf(“x=%d%%”,100/4);将显示:x=25%。 (2)对格式说明符c、d、s和f等,可以指定输出字段的宽度。%md:m为指定的输出字段的宽度。如果数据的位数大于m,则按实际位数输出,否则输出时向右对齐,左端补以“空格”符。%mc:m为指定的输出字段的宽度。若m大于一个字符的宽度,则输出时向右对齐,左端补以“空格”符。 %mc:m为输出时字符串所占的列数。如果字符串的长度(字符个数)大于m,则按字符串的本身长度输出,否则,输出时字符串向右对齐,左端补以“空格”符。 %-ms:mr的意义同上。如果字符串的长度小于m,则输出时字符串向左对齐,右端补以“空格”符。 %m.nf:m为浮点数据所占的总列数(包括小数点),n为小数点后面的位数。如果数据的长度小于m,则输出时向右对齐,左端补以“空格”符。 %-m.nf:m、n的意义同上。如果数据的长度小于m,则输出向左对齐,右端补以“空格”符。 (3)除了格式说明符及其输出字段的宽度外,在“格式控制”字符中的其他字符,将按原样输出。 (4)在显示数据时,可以不指定输出字段的宽度,而直接利用系统隐含的输出宽度。3.3 应用举例 例3.5 分析下列程序,观察运行结果。main(){ char ch=‘a’;int a=98;unsigned b=1000;long c=123456789;float x=3.14;double y=1.2345678;pPrintf(“(1)a=%d,a=%c,ch=%d,ch=%cn”,a,a,ch,ch);printf(“(2)b=%un”,b);printf(“(3)c=%ldn”,c);printf(“(4)x=%f,y=%fn”,x,y);printf(“(5)x=%e,y=%en”,x,y);printf(“(6)y=%e10.2fn”,y);} 运行的结果为 (1)a=98,a=b,ch=97,ch=a b=1000 C=123456789 X=3.140000,y=1.234567 x=3.14000e+00,y=1.23456e+00 Y=1.23 例3.6 从键盘上输入一个大写字母,把它转换面小 写字母,然后显示出来。#include”stdio.h” main(){ char x1,x2;printf(“x1=?n”);scanf(“%c”,&x1);x2=x1+32;printf(“%c,%cn”,x1,x2);} 运行结果 x1=? A A,a 例3.7 分别输入一个浮点数,一个整数,一个字符型数。#include “stdio.h” main(){ float f;int I;char c;scanf(“%f%d%c”,&f,&I,&c);printf(“%f%d%c”,f,I,c);} 例3.8 从键盘输入一个字符并鸣笛输出。#include “stdio.h” Main(){ Char c;C=getchar();Putchar(‘07’);Putchar(c);} 第五讲 条件语句 4.1 语句和复合语句 4.2 if语句 4.3 switch语句 4.4 应用举例 第四章 条件语句 结构化程序的三种基本结构:顺序结构、选择分支结构和循环结构。顺序结构:是指每个程序都是按照语句的书写顺序依次执行的。选择分支结构:是指通过对特定条件的判断,来选择一个分支执行。循环结构:循环是指在给定条件下,重复执行某段程序,直到不满足条件为止。4.1 语句和复合语句 表达式语句:一个表达式的后面跟随一个分号构成的语句。如:x=x+a;说明:分号“;”是语句的终结符,而不是语句的分隔符即分号是语句的最末组成部分。 复合语句:由左右花括号括起来的语句; 形式:{说明部分;语句部分} 一个复合语句在语法上等同于一个语句,在程序中,凡是单个语句能够出现的地方,都可以出现复合语句。一个复合语句又可以出现在其他复合语句内部。 在复合语句的后面必须有一个分号,做为该语句的终结符。4.2 if语句 If语句是条件选择语句,它是通过对给定条件的判断,来决定所要执行的操作。 4.2.1 if语句的三种形式 If语句的第一种形式 格式:if(表达式)〈语句〉 功能:首先计算表达式的值,若表达式的值 为“真”(为非0),则执行语句,若表达 式的值为“假”(为0),不执行语句。例如: If(x>y)printf(“%d”,x);2.If语句的第二种形式 格式:if(表达式)〈语句1〉 else 〈语句2〉 功能:首先计算表达式的值,若表达式的值为“真”(为非0)。则执行语句1,若表达式的值为 “假”(为0),则执行语句2。例如: if(x>y)printf(“%d”,x);else printf(“%d”,y);3.If语句的第三种形式 格式: if(表达式1)〈语句1〉 else if(表达式2) 〈语句2〉 else if(表达式3) 〈语句3〉 ┆ else if(表达式n) 〈语句n〉 else 〈语句n+1〉 功能:首先计算表达式的值,若第n个表达式的值为“真”(为非0),则执行语句n,若所有的表达式的值都为“假”(为0),则执行语句n+1。其流程图如下: 例如: if(score>89) grade=‘5’;else if(score>74)grade=‘4’;else if(score>59)grade=‘3’;else grade=‘2’;说明: (1)if语句中的表达式可以是C语言的合法表达式。 (2)第二种、第三种格式的if语句中,在每个else前面有一个分号,整个语句结束处也有一个分号。这是由于分号是C语句中不可缺少的部分,这个分号是if语句中的内嵌语句所要求的。 (3)在if和else后面可以只含有一个内嵌的操作语句,也可以含有多个操作语句,此时应用花括号“{ }“将几个语句括起来,构成一个复合语句。 例4.1 将两个数中较大者赋给 s。main(){ int a,b,s;a=10;b=20;if(a>b)s=a;else s=b;printf(“s=%dn”,s);} 执行结果: s=20 例4.2 比较两个数,按由大到小输出。main(){ int a,b,x,y;a = 10;b = 20;if(a>b){x=a;y=b;} else {x=b;y=a;} printf(“x=%d,y=%dn”,x,y);} 执行结果: x=20,y=10 4.2.2 if语句的嵌套 在if 语句中又包含一个或多个if语句,称为if语句的嵌套。一般形式如下: if() if() 〈语句1〉 else 〈语句2〉 else if() 〈语句3〉 else 〈语句4〉 if() if() 〈语句1〉 else if()〈语句2〉 else 〈语句3〉 说明: (1)if与else的配对关系,从最内层开始,else总是与离它最近的未曾配对的if配对。 (2)if与else的个数最好相同,从内层到外层一一对应,以避免出错。 (3)如果if与else的个数不相同,可以用花括号来确定配对关系。例如: If() {if()〈语句1〉} else 〈语句2〉 这时{ }限定了内嵌if 语句的范围,因此else与第一个if配对。例4.3 有一函数 编一程序,输入一个x值,输出y 值。main(){ int x,y;scanf(“%d”,&x);if(x<0)y=-1;else if(x==0)y=0; else y=1;printf(“x=%d,y=%dn”,x,y);} 4.2.3 条件运算符 如果if语句的形式如下所示: if(表达式1) x=〈表达式2〉; else x=〈表达式2〉; 无论表达式1为“真”还是为“假”,都只执行一个赋值语句且给同一个变量赋值。 可以利用条件运算符,将这种语句简单地用如下语句来表示。 x=〈表达式1〉?〈表达式2〉:〈表达式3〉; 说明:即当表达式1的值为“真”时,将表达式2的值赋给变量x;当表达式1的值为“假”时,将表达式3的值赋给变量x。如: a=5,b=10,c=20;x=a>b? c*b:c/b;因为a>b为假,则x=c/b=2。 例4.4 输入两个数,并将其中较大者显示出来。#include “stdio.h” main(){ int a,b,max;scanf(“%d%d”,&a,&b);max=(a>b)? a:b;printf(“max=%d”,max);} 条件运算符也可以嵌套使用,如: Grade=(score>=90)?’A’:(score<=70)?’C’:’B’当score>=90时,将字符‘A’赋给变量grade;当score<=70时,将字符‘C’赋给变量grade;否则将字符‘B’赋给变量grade.4.3 switch语句 Switch语句是多分支选择语句,其一般形式如下:Switch(表达式) { case 〈常量表达式1〉:〈语句1〉 case 〈常量表达式2〉:〈语句2〉 ┆ case 〈常量表达式n〉:〈语句n〉 default:〈语句n+1〉 } ;可同时省略 switch语句的执行过程是:首先计算switch后面圆括号内表达式的值,若此值等于某个case后面的常量表达式的值,则转向该case后面的语句去执行;若表达式的值不等于任何case后面的常量表达式的值,则转向default后面的语句去执行,如果没有default部分,则将不执行switch语句中的任何语句,而直接转到switch语句后面的语句去执行。说明: (1)switch后面圆括号内的表达式的值和case后面的常量表达式的值,都必须是整型的或字符型的,不允许是浮点型的。 (2)同一个switch语句中 的所有case后面的常量表达式的值都必须互不相同。 (3)switch语句中的case和default的出现次序是任意的,也就是说default也可以位于case的前面,且case的次序也不要求按常量表达式的大小顺序排列。 (4)由于switch语句中的“case常量表达式”部分只起标号的作用,而不进行条件判断,所以,在执行完某个case后的语句后,将自动转到该语句后面的语句去执行,直到遇到switch语句的右花括号或“break”语句为此,而不再进行条件判断。 所以在执行完一个case分支后,一般应跳出switch语句,转到下一条语句执行,这样可在一个case的结束后,下一个case开始前,插入一个break语句,一但执行到braek语句,将立即跳出switch语句,如: 如: Switch(n){ case 1: x=1; case 2: x=2;} 当n=1时,将连续执行下面两个语句 : X=1;X=2;如: Switch(n){ case 1; x=1;Braek;Case 2;X=2 Braek }(5)每个case的后面即可以是一个句号,也可以是多个语句,当是多个语句的时候,也不需要用花括号括起来。(6)多个case的后面可以共用一组执行语句,如: Switch(n);{ Case 1: Case 2: x=10; braet ┆ } 它表示当n=1或n=2时,都执行下列两个语句: X=10;Braek; 例4.5 从键盘输入一个月份(1~12),并显示该月份的英文名称 #include”stdio.h” Main(){ int month;scanf(“%d”,&month);switch(month){ case 1:printf(“January”); braek;case 2:printf(“February”); braek;case 3:printf(“March”); braek;case 4:printf(“April”); braek;case 5:printf(“May”); braek;case 6:printf(“June”); braek;case 7:printf(“July”); braek;case 8:printf(“August”); braek;case 9:printf(“September”); braek;case 10:printf(“October”); braek;case 11:printf(“November”); braek;case 12:printf(“Decmeber”); braek;Default:printf(“Data Error!”);Break;} } 4.4 应用举例 例4.6 输入一个数值,求出它的平方根,若为负数时,求出它的复数平方根。#include “stdio.h” #include “math.h” main(){ int n;float root;printf(“enter a number:t”);scanf(“%d”,&n);if(n>=0);{ root=sqrt(n);printf(“sqrt(%d)=%f”,n,root);} else { root=sqrt(abs(n)); printf(“sqrt(%d)=%fi”,n,root);} } 例4.7求两个数中最小值。#include “stdio.h” main(){int x,y,min;printf(“enter two integers:n”);acanf(“%d,%d,&x,&y);min=x 例4.8 从键盘输入一个操作符并进行相应和操作。#include “stdio.h” main(){ int x=10,y=5,z;char op;scanf(“%c”,&op);switch(op){ case ’+’:z=x+y;braek; case ’-’:z=x-y;braek; case ’*’:z=x*y;braek; case ’/’:z=x/y;braek; default :printf(“Operater Error!”);} printf(%d%c%d=%d”,x,op,y,z);} 例4.9 输入三个数,按由小到大的顺序输出。#include “stdio.h” main(){ int a,b,c,temp;printf(“enter three integers:t”);scanf(“%d,%d,%d”,&a,&b.&c);if(a>c){temp=a;a=b;b=temp;} If(a>c){temp=a;a=c;c=temp;} if(b>c){temp=b;b=c;c=temp;} printf(“%d<%d,%d”,a,b,c);} 第六讲 循环控制 5.1 goto语句 5.2 while循环语句 5.3 do-while循环语句 5.4 for循环语句 5.2 while循环语句 用while语句来实现“当型”循环结构。格式:while(表达式) 〈语句〉 /*循环体部分*/ 功能:当表达式的值为非0时,执行while语句中的循环体。结构流程图如图所示。说明: (1)循环体如果包含一个以上语句,应该用花括弧括起来,以复合语句的形式出现,否则while语句范围只到while后面第一个分号处。(2)在循环体中应有使循环趋向于结束的语句,即设置修改循环条件的语句。 (3)while语句的特点是先判断表达式的值,然后执行循环体中的语句,如果表达式的值一开始为假(值为0),退出循环,并转入下一语句去执行。 例5.2 求s=1+2+3+„100的值。结构流程图如右图。main(){ int i,s=0;i=1;While(i<=100);{s=s+1;i++;} printf(“s=%d”,s);} 运行结果 s=5050 5.3 do-while循环语句 do-while循环语句,用来实现“直到型”循环结构。格式:do <语句> while(表达式)功能:先执行〈语句〉,后判断表达式的值。它的执行过程是:先执行一次指定的语句,然后判断表达式的值,当表达式的值为非零(”真“)时,返回重新执行该语句,如此反复,直到表达式的值等于0为此止,此时循环结束。0(假)说明: (1)用while语句和用do-while语句处理同一问题时,若二者的循环体部分一样,其结果也一样。但在while后面的表达式一开始就为假(0值)时,两种循环的结果是不同的。 (2)如果do-while语句的循环体部分是多个语句组成的话,则必须用左右花括号括起来,使其形成复合语句。 关键词:案例教学法,应用型本科,C语言 0 引言 C语言是一种被广泛学习、普遍使用的计算机高级程序设计语言, 大多数高等学校都把它作为入门的计算机语言教学课程, 而C语言程序设计课程又是具有较强的技术性和实践性, 该课程的教学要求理论与实践很好结合, 要求学生具有较强的动手能力。而我国传统的C语言程序设计教学方法一直是以介绍语法为主线, 配上一些作为语法应用示例的简单程序, 缺少培养编程能力方面的知识, 忽视了知识的应用, 学生即使掌握了基本的语法知识, 但是自己却写不出程序。案例教学法是一种新的教学方法, 能够弥补传统教学在创新知识、引导学生开展应用型学习方面的不足。 1 案例教学模式 案例教学是在学生掌握了有关基本知识和分析技术的基础上, 在教师的精心策划和指导下, 根据教学目的和教学内容要求, 运用典型案例将学生带入特定事件的现场进行案例分析。通过学生独立思考或集体协作, 进一步提高其识别、分析和解决某一具体问题的能力, 同时培养正确的理念、作风、沟通能力和协作精神的教学方式。与传统教学方法相比, 在培养学生分析问题和解决实际问题能力方面, 案例教学有着独特的优势, 因而受到重视, 近年来在理科应用型人才培养的专业课教学所占比例逐渐扩大。 2 C语言程序设计教学存在的问题 2.1 没有正确认识《C语言程序设计》课程 部分学生认为自己毕业后不会从事计算机软件开发的工作, 所以没有必要学好C语言;还有学生认为现在C语言己经过时, 在当今软件领域中已无用武之地, 所以学不好也无所谓。错误的学习动机导致后期的学习非常地被动, 学习兴趣逐渐淡化甚至消失, 学习效果很差。 2.2 没有激发学生学习兴趣 由于C语言涉及的概念复杂, 灵活性大, 随着课程的逐层深入, 许多学生会觉得枯燥乏味, 从而丧失学习兴趣。作为教师如何激发学生的兴趣, 从而使教学成为师生双方乐于参与的一种充满情趣的活动是教学中亟待解决的问题。 2.3 缺乏适合的教材 目前, 一般学校使用的教材绝大多数是参照谭浩强教授的《C程序设计》而编写的, 即在每一章介绍基本概念后, 提供一些例题、解释相关概念的使用方法和使用过程中的注意点, 然后, 在章节末尾提供习题对本章内容进行强化。这种教材的优点是基本概念描述清楚, 学生便于记忆;缺点是学生仅仅记住了各章节中的概念, 并没有真正理解它们, 更谈不上如何使用它们。加之章节之间联系不强, 要想综合运用各章节知识比较困难。 2.4 没有明确的上机目的 部分教师在教学过程中没能布置明确的上机任务, 学生上机之前不清楚上机内容, 没有明确上机目的。有的学生上机时仅仅是将课本上的案例或是教师上课时所讲的例题在电脑上编辑, 不去分析具体算法和其中的语法结构, 上机操作完全变成“照猫画虎”式的验证上机, 根本达不到实践创新的目的。 2.5 缺乏整体设计的概念 C语言是一个逻辑性很强的课程, 学生在学习的过程中, 由于缺少教师的正确引导, 没有注意如何综合运用相关内容解决具体问题, 导致学生在学完程序设计课程进入应用阶段时, 面对具体的专业设计要求无从下手。 《C语言程序设计》是计算机各专业的主干基础课程。通过对本课程的学习, 使学生理解C语言的基本语法和规定, 掌握程序设计基本算法和思路, 具备一定的程序设计能力, 熟悉上机调试程序的方法, 养成良好的程序编辑习惯、设计规范和风格, 为后续课程及其它程序设计课程的学习和应用奠定坚实的基础。因此说, 该门课程的教学质量直接影响计算机专业的培养目标。 由于教学型院校的学生基础较薄弱, 在学习中普遍认为C语言语法多, 枯燥难懂, 全部课程完成后, 感觉知识零乱, 只能看懂程序, 而不会编写程序, 更不会应用C语言解决实际问题。由于教学法的陈旧, 一些教师教学中重语法教学, 忽视应用案例, 致使学生学习的积极性不高, 兴趣不足, 教学效果不甚理想, 严重影响后续课程的学习, 甚至影响到学生四年的学习积极性。青年学生好奇心强, 富有想象力, 善于吸收新知识。在日常生活中, 我们发现学生上网, 玩游戏都能无师自通, 很快就能上手操作, 可见, 兴趣是学习的动力。因此, 对于应用型人才的培养, 必须改进传统的教学方法, 在教学中采用案例教学, 提高他们的学习积极性, 能达到较好的效果。 3 案例教学法在C语言程序设计中的优势 3.1 培养学生的兴趣和积极性 C语言程序设计教材中, 前几章都是先介绍C语言程序设计的一些基本概念和基础知识, 然后才介绍程序的编辑、编译和运行。这些基本概念和基础知识, 既枯燥又比较抽象难懂。另外, 有一些概念之间的差别和程序的设计步骤如果只通过教师讲述, 学生在字面上可以接受, 但在理解深度上往往难以达到令人满意的效果, 如果能设计出一系列问题, 让学生在实践和解决问题的过程中自己去探究和体验, 情况将完全是另一个样子。因此, 在教学中, 我们完全可以打破课本原有的顺序组织课堂教学的方式, 改用从案例入手, 通过给学生演示、让学生模仿, 在实际应用中去探究和领悟这些基本概念, 并适时地加以归纳总结和延伸概念, 让学生在轻松愉快的气氛中学习新知识。 3.2 改变传统学习方式 C语言是应用性很强的一门课程, 既有理论, 又有实践, 既讲方法, 又讲动手能力。采用案例教学法就可以改变这种“填塞式”的做法, 将学生的眼、手、脑全部调动起来, 这是培养学生的学习兴趣的重要途径之一。 案例教学法打破了以教材为中心的传统教学模式, 不按教材的顺序授课, 而是以精选出的程序设计的案例为中心, 把学习的重点放在具体案例的讲述上, 把要学习的语法和概念融入到具体案例中来讲解。整个教学过程中强调在应用中学习, 从而避免了枯燥的理论说教, 不仅能增进学生的学习兴趣, 而且对提高学生综合分析和解决实际问题的能力也大有帮助。 4 案例教学法中的案例选择与设计 案例教学具有生动、形象、具体、实效性强的潜在优势, 如何把案例教学的潜在优势, 变成实实在在的教学效果。我们在《C语言程序设计》教学实践中有较为深切的体会, 这就是:“好案例+好教法=好效果”。 案例教学法的教学过程设计包括案例引入、案例学习与讨论、评估与总结3个基本过程。要完成案例所要求的教学目标, 就必须对教学过程进行周密的设计。 其一, 教学案例并不是简单的举例, 它应该具有系统性、针对性、可操作性, 案例所涉及的知识点要能涵盖课程的绝大部分知识, 在《C语言程序设计》课程选择中一般应注意趣味性、可行性、挑战性。 其二, 老师在设计案例时, 必须接近实际, 与实际生活或工作相关且具有一定规模, 既符合所需掌握知识的特点, 又能让学生感兴趣。不同的学习阶段使用难度不同的案例。用由易而难的C程序案例入手去组织教学, 而不是一开始就单纯进行枯燥的语法教学。 其三, 老师在设计案例时, 不但要设计一些课堂教学中使用的案例, 还设计一些供学生自己学习、提高、甚至具有较高难度的具有挑战性的案例, 可以把国内、国外的计算机程序设计大赛的一些题目作为教学案例, 不仅能激发学生的学习兴趣, 还让他们提前了解这些大赛, 为今后参加备战这些大赛打下基础。 5 案例教学法在课堂中的应用 案例教学过程中一个重要环节是学生参与问题的讨论。在课堂上通过分析案例, 使学生能够参与学习活动, 教师和学生能够相互交流, 学生学习由被动变为主动, 主动提出问题, 思考问题。在教学活动过程中, 把学生分成6人~7人一组。在教师的指导下, 通过对案例程序源代码进行多向思维启发分析, 同时针对分析过程中遇到的问题及心得相互交流。案例经过学生的讨论后, 教师应该及时做出讲评, 并再次讲授案例分析中所需要用到的理论知识和技能。最后提交相应的分析报告, 牢固掌握专业知识。这样做有助于建立起计算机学科的知识体系, 实现师生的有机结合, (上接第196页) 提高实际应用能力。 相互交流也是不可缺少的重要组成部分。通过BBS在线答疑、E-mail信箱、QQ群等可以很方便地实现师生之间不同方式的相互交流, 从而让学习没有传统的时空限制。 6 案例教学在课程设计中的应用 在课程设计阶段提前布置一个综合型的案例, 让学生基本自行解决, 通过分析、设计、编码、上机调试、写出完整的设计报告, 最后答辩。在各个环节中, 教师积极参与到各个环节与学生进行交流讨论, 了解学生任务完成的情况, 解决学生遇到的问题。在最后的答辩环节全体同学参加, 交流设计过程中的心得, 老师对整个过程总结。每完成一轮次的教学后, 要及时总结, 对在教学过程中出问题、不适合教学的案例进行调整, 并补充新的教学案例, 更好地满足以后的教学工作。 7 案例教学法注意事项 为了更好地发挥案例教学法的作用, 在使用案例教学法的过程中应该注意如下几点: 1) 案例设计要新颖, 对学生有吸引力, 最好是能贴近学生生活; 2) 案例设计难易要适中, 太难会让学生有挫折感, 太简单又不能激起学生的学习欲望, 同时案例设计中要将课程的重要知识点包含在内, 不能脱离相关知识点; 3) 教学中分析问题时老师不能将源代码全盘端出, 而应以引导为主, 鼓励学生多动手, 否则如果学生完全照搬照抄, 就失去了教学的意义; 4) 案例设计应该有可扩展性, 留给学生创新的空间, 这样能让优秀的学生有发挥的空间。 8 结论 5年来的探索与实践证明, 在《C语言程序设计》课程的教学中采用案例教学模式有助于改善传统语法讲授型教学方式中学生积极性不高、教学效果差的不足, 能促使教师的教育观念的转变, 还能激发学生的学习兴趣, 使学生由被动接受知识变为主动学习知识, 有利于提高学生综合运用所学知识分析问题、解决问题的能力, 还有利于培养学生的创新能力, 更能体现以人为本的教育理念。 另外, 案例教学法是课堂教学中理论联系实际的有效途径之一。案例教学主要的特点是把理论与实践紧密结合, 对于学生掌握课程理论, 增加课堂教学信息量, 提高教学质量, 培养学生创新思维、实践能力和综合素质均有较好的作用。 【关键词】项目驱动教学;C语言;高职计算机教学 【中图分类号】G633.67 近年来,随着高等职业教育的迅猛发展,基于高职学生的教育教学方法也在不断的推进,如何引导学生积极主动的学习以及提高其学习的热情和兴趣成为了摆在许多高职教师中的主要问题。本文笔者结合自身多年来的从业经验进行探讨,结合计算机C语言的学习课件分析高等职业技术学院学生学习的兴趣点和特点[1]。在教学过程中应用项目驱动教学法,对于提高学生学习兴趣以及培养学生分析能力和解决问题的能力以及培养学生进行自主编程的能力均具有显著的效果。接下来笔者便针对这一教学方法展开具体的探索,仅供业界同仁讨论和分享。 1 项目驱动教学法的内涵 所谓的项目驱动教学法,指的是老师和学生共同合作完成一个完整的“项目”工作而进行的教学活动,它既是一种课程模式,同时也是一种教学方法。项目驱动教学是完成对学生实践引导的任务驱动式教学的主要方法,属于项目教学的方法之一。 项目驱动教学方法主要是以学生为中心,教师在其中扮演着组织者和引导者的作用。这种教学方法的具体实施过程中,老师并不是直接把现成的知识和技能传授给学生,相反是由学生按照老师给出的指导提示一步步完成项目寻找和学习的过程[2]。在这一过程中,学生不在把学生当成是任务,相反是根据具体的项目需求来学习,并且由被动的学习知识变成主动的寻找知识进行掌握。 2“项目驱动”教学的特点 项目驱动教学中,老师在教学过程里引进若干个项目,并且按照实际的步骤展开教学研究的筛选工作,从而引导学生亲自动手进行实践操作的体验。学生在老师的引导下独自完成整个项目,从而有利于其对项目中各个环节和注意事项的掌握,在学习中加强实践动手操作的能力,并完成对整个系统知识的掌握[3]。驱动教学法具有如下几个特点: 首先,驱动教学法强调的是学生的主体作用,它主要提倡学生采取自主学习的方法完成对知识的获取。在这一过程中,学生是互动教学的主体角色,而老师在此过程中扮演的是引导学生进行探索的角色。教师需要在此环节中不断培养学生自学的能力以及实际动手和自主创新的能力。这一活动有利于学生了解知识,总结知识并牢固的掌握知识[4]。 其次,项目驱动教学法在推动中所选取的项目,大都为学生在现实生活中能够接触到的项目,这样一来学生便能很好的了解自己所学知识如何具体用来解决实际生活的出现的问题。为此便要求教师在进行项目筛选时,尽量向实际生活靠拢,引导学生快速进行学习实践状态,掌握项目的程序和规范以及具体操作方法。 3教学内容体系 3.1 项目设置 教师在授课项目中的选择对其教学的过程和最终效果有着直接的影响,因而老师需要根据实际的教学进度和教学计划进行项目的筛选,选择那些难易程度较为适中的项目。并且将所选项目分配给各个小组的学生,使他们能够围绕选择的项目进行理论知识的学习和实践动手能力的练习。 计算机C语言在全部课程中仅仅有一个学习的课时,因为教师在选择项目时,还应当适当控制好项目的规模。规模过大的项目,由于课时安排的限制,老师只能选取其中一部分进行讲解,从而影响课程学习的完整性,同样的如果项目难度过大,还会打击学生的自信心。相反,如果老师选择的学习项目规模过小,则很难激发学生学习计算机C语言的热情,让学生觉得缺乏挑战性。 3.2 项目实施 项目由老师进行提问,进而对整个项目的设计和制作过程进行演示,并着重讲解相应的知识点,随后学生将该项目进行模仿制作。在整个项目学习期间,学生和老师之间以及学生和学生之间可以进行自由的交流探讨互动,将这些课后自主训练的项目拿到课堂上进行落实,大大提高了教学讨论的效率和效果。记过几次课程的入门训练,老师便可以将需要学生们自主完成的项目进行筛选公布,提前便布置下去,给学生充分的时间学习和准备。学生们利用课下的时间自主完成整个项目,老师利用课堂上的机会请同学上台展示演示自己项目设计的经过,并且针对学生容易出错的疑点难点进行详细的讲解。在学生演示完成之后,其他同学便可以就该学生的项目进行提问,营造出一种互动交流探讨的课堂学习气氛。 3.3 项目总结 项目驱动的教学思想,主要是将需要学习的新知识分解到若干子项目之中去完成,而忽略了知识本身所具备的系统性和完整逻辑性。这种教学方法使得知识在学生的头脑中还是零散的,为此便需要老师在完成了知识讨论之后紧接着对学生们所讨论的结果进行归纳总结,并且结合相关的理论知识进行知识系统的串联讲解。通过这种讲解加深学生对所学知识的理解和记忆,最终完成知识系统性完整化的掌握。 3.4 成绩的评价 驱动教学法成绩的评定可以采用项目答辩的方式完成,每个小组选派一名代表在机房中进行主要答辯,并完成对其小组项目作品的展示,其他组员予以相应的补充。任课老师以及其他同学可以根据个人观点对小组成员进行适当的提问,最终结合其所做的具体项目的规模和难度以及小组每位同学的表现情况给出最终的考核成绩[7]。通过这种成绩评定的方式让学生充分认识到所学理论知识在实践应用的中重要性。 4结束语 项目驱动教学方法作为一种探究式的教学模式,对于老师和学生有着双向共赢的优势。从学生的角度看,项目驱动教学有利于巩固各类学习实践操作的知识和技能,从而使学生的学习目标更为明确;从老师的角度看,项目驱动教学把老师从高高的讲台上拉到学生中间,加强了师生的互动交流,有利于教师同学生感情的培养,从而有利于教学效果的提升。 参考文献: [1] 吕伟忠.高职院校C语言教学改革的思考[J]. 科教文汇(下旬刊). 2008,3(11):74. [2] 刘爱琴.、任务驱动、教学法在C语言教学中的应用[J]. 太原城市职业技术学院学报. 2008,10(03):118-119. [3]姚志宏.中等职业教育中C语言教学改革[J]. 实验教学与仪器. 2013,30(06):45-47. 【错误案例教学法在C语言教学的应用论文】推荐阅读: 案例教学法在外科护理教学中的应用与效果09-13 浅析案例教学法在思想政治教学中的应用11-21 乡土案例在高中地理教学中的应用09-13 案例教学法在实验中医学中的应用11-24 均值不等式典型错误案例分析11-28 如何在体育教学中预防和纠正错误01-23 高职数学应用案例教学探析论文12-06 《大自然的语言》教学案例09-25 妙用错误教学资源10-30错误案例教学法在C语言教学的应用论文 篇7
错误案例教学法在C语言教学的应用论文 篇8