案例教学法在理论教学与实践教学间的应用

2018-04-24 12:14董玉蓉
中国教育技术装备 2018年20期
关键词:C语言程序设计理论教学计算思维

董玉蓉

摘  要 针对新工科背景下程序设计课程中理论教学与实践教学脱节的现象,在C语言程序设计课程教学中引入案例教学法,架起理论教学与实践教学间的桥梁。并以明确的教学内容和目标为依据,设计以学生为中心、以问题为导向、以讨论为基础的案例教学环节,提高学生学习兴趣和主动性,最终达到提高计算思维和编程能力的目的。

关键词 计算思维;案例教学;C语言程序设计;理论教学;实践教学;教学改革

中图分类号:G642.41    文献标识码:B

文章编号:1671-489X(2018)20-0131-04

Application of Case Teaching in Theoretical Teaching and Prac-tical Teaching//DONG Yurong

Abstract In view of the disconnection between theoretical teaching and practical teaching in the course of program design in the back-ground of new engineering, this paper introduces the case teaching method in the course of C Language Programming, and sets up a bri-

dge between theoretical teaching and practical teaching. And on the basis of the teaching contents and target, the design of case teaching link with student center, issue-oriented and issue-based, to improve students interest and initiative in learning, and to improve the ability

of computational thinking and programming.

Key words computational thinking; case teaching; C language pro-gramming; theoretical teaching; practical teaching; teaching reform

1 背景

新工科跨越了现有学科的界限和产业边界,是对传统学科的整合,是面向为了新技术和新产业发展的学科[1]。新工科背景下的高等教育强调通识教育对专业教育的支持,包括加强基础科学教育,使学生对各种新技术的科学基础有扎实的理解,对学生适应日后新技术和新产业的快速发展和变化十分重要。

计算思维是思维三大模式之一,现已成为所有大学生应该具备的能力。C语言程序设计作为非计算机专业的通识教育课程,是后续相关专业课程的基础。该课程通过面向过程的程序设计方法,培养学生计算思维和程序实现能力,从而能更好地利用计算机科学与技术解决各个专业领域的相关计算和信息处理问题。

当下很多高校进行课程改革,压缩了程序设计课程的课时,因此,如何在有限的教学课时内完成教学内容、实现总体的教学目标,成为授课教师亟待解决的难题,而在新工科背景下进行的教学改革会使这个问题越来越严峻。当前强调计算思维能力的程序设计类课程改革大都基于MOOC+SPOCs+翻转课堂的混合式教学模式[2]。这类教学改革改变了传统教学中“满堂灌”现象,使得学生学习不受时间、空间的限制,同时对教学资源进行了合理规划和有效利用,并对教学内容进行了优化。混合式教学方法虽然能够很好地解决教学课时不足的问题,但由于在线学习对学生学习的主动性和自主性要求很高,对一些学习基础薄弱、学习兴趣不高、目标不明确并缺乏独立思考和自我激励的学生而言,这种教学模式并不能很好地帮助他们完成课程学习,提高课程成绩。

C语言程序设计教学一直以来都由理论教学和实践教学两个部分组成。理论教学是知识的传递过程,主要是由教师到学生的单向传递,是对学生知识的增量;实践教学是知识的应用、经验的积累过程,是对学生综合能力的锻炼。C语言程序设计是实践性很强的一门课程,强调理论应用到实践,该课程的学习必须通过大量的编程和程序调试训练,在实践中掌握编程知识,培养编程能力,并逐步理解和掌握程序设计的思想、方法和技巧。对于大多数学生来说,上课时听得懂、跟着老师会做题,并不是真正的懂、真正的会。在线学习虽然能够将教学过程重现,帮助学生再次进行深度学习,但仍然有学生只是掌握了语法知识和常用的算法,即使想到了解决方法,也无法将其描述成适合计算机执行的步骤。理论知识不能解决实际的问题,造成理论学习和上机实践脱节,让学生越来越觉得编程很难,从而影响到学习后续内容的兴趣和主动性。

2 案例教学:理论教学与实践教学的桥梁

案例教学是一种开放式、互动式的教学方法[3-4],是在理论教学和实践教學之外,启发学生对问题的思考、讨论和进一步探索,能对知识结构进行整合,帮助学生在案例实施过程中通过同伴之间的讨论和交流,提升计算思维和编程实现能力。案例教学的目的是完成教学任务,基于问题和探索问题是这种教学方法的核心特点[5]。

理论教学是知识传递的过程,实践教学是知识应用、经验积累的过程。案例教学是对知识结构的整合、经验交流与学习的过程,能在理论教学和实践教学之间起到桥接的作用。因此,如何在课程教学计划设计、案例设计时使得理论教学、实践教学、案例教学达到平衡,是授课教师需要考虑的首要问题。

案例教学以学生为中心,关键在于“学”,要避免在学生没有理论基础和实践经验的情况下开展案例教学。教师是案例的设计者。在案例实施过程中,教师所扮演的是引导者和主持人的角色,避免成为问题的解答者和答案的仲裁者;学生是案例实施的主角,教师将学的主动权交给学生,通过案例中的问题激发学生学习的兴趣,引起学生之间的讨论。在整个过程中,教师适当的引导和对学生行为的约束是很有必要的,能够保证教学环节有序按计划进行,完成教学内容,达到理想的教学目标。

案例设计是案例教学的基础,案例的好坏直接关系到案例教学能否顺利地进行,能否达到预期的教学目标。需要注意的是,C语言程序设计的教学内容并不都适合进行案例教学。因此,案例的选择不仅要考虑教学计划、教学内容、教学目标和教学对象,还要结合案例教学的特点来选择。案例选择要做到描述简洁、正确,尽量选择一些典型问题的求解,以便学生掌握程序设计所需的各类基本问题的算法。案例中提出的问题要有针对性,要使学生能够将所学的理论知识进行综合应用,联系实际问題进行综合分析、设计算法和编程实现,避免学生在学习过程中感觉知识点零散繁杂,同时避免将综合性的课程实习当成案例。

案例教学强调学生的主动参与,学生可以选择分组或者是在全班进行讨论。与传统课堂教学中知识由教师向学生的单向传递相比,同伴之间的交流会让学生更加舒适和放松,更有利于学生之间多向的经验交流和分享。讨论的过程也是知识、经验、认知的碰撞。问题的提出、分析和解决,都是在同一个知识水平上进行(尽管有的学生学得好,有的学生学得不好,但地位的平等会让学生更加贴近,容易交流),问题的提出和解决方法的描述,用他们的方式和语言更加容易让伙伴理解和接受,学生也更容易在同伴而不是教师那里接受到经验。

教学总结对任何一种教学方法、任意一门课程来说都是一个重要的环节。案例教学中的教学总结可以是教师对教学实施过程的总结性评价,也可以是学生对自己所听、所想、所学的总结。教学总结有助于教师改进教学案例、完善教学设计,还能够提升学生学习中的认知水平,增强教学效果。

3 案例教学设计

学习程序设计,理解计算机解决问题的方式很重要,要知道计算机擅长和不擅长做什么。想要编写程序,首先要能够读懂程序,能对已有的程序进行模仿,会套用已有的程序。现有的经典算法,内含一些基本问题的解决方法和思路,通过在基本问题的基础上增加复杂的条件,帮助学生熟练掌握并学会使用这类算法,能够使学生在碰到相似问题时快速找到解题思路,节省时间,降低问题的难度和复杂度。在实际应用中,适应C语言程序设计的案例教学可以简化为三个步骤:案例设计、教学实施、教学总结。

案例设计  为了能够让学生在学习完算术运算符、数据类型、三大控制结构、基本输入输出之后,强化对理论知识的理解和掌握,能够熟练应用并编写相应的程序去解决实际生活中的问题,本文设计了一个有关循环结构应用的案例,由浅至深、由简到繁,从简单需求入手,逐步将程序完善,适用于解决更复杂的问题。

循环结构是程序设计的三大控制结构之一,学生在学习该结构之前已经学习了运算符、输入输出、顺序结构、选择结构的语法知识,并上机编程实践了简单的程序。循环结构的语法知识难度和复杂程度都要大于前两种结构,并且从循环结构开始就要使用枚举法、二分法、选择排序、冒泡排序等常用算法。学生在理论知识学习之后直接进行上机实践难度较大,此时就需要教师结合教学目的和教学内容设计合理的案例教学来激发学生兴趣,正确引导学生思考。在案例选择时,选择小而经典的算法,能使学生更好地掌握和理解计算思维。

下面两个程序的功能分别是使用枚举法和辗转相除法来判断输入的整数是否为素数。

枚举法:

#include

void main()

{

int x;

int i;

int primes = 1;  //  x是素数

printf(“请输入一个整数:”);

scanf(“%d”, &x);

for ( i=2; i

{

if ( x % i == 0 )

{

primes = 0;

break;

}

}

if (primes == 1 ) printf("是素数\n");

else printf("不是素数\n");

}

辗转相除法:

#include

void main()

{

int x;

int i;

int primes = 1;  //  x是素数

printf(“请输入一个整数:”);

scanf(“%d”, &x);

for ( x=1; x<=100; x++ )

{

for ( i=2; i

{

if ( x % i == 0 )

{

primes = 0;

break;

}

}

if (primes == 1 )  printf(“%d “, x);

}

printf(“\n”);

}

问题1:比较两个程序,哪段程序最优?为什么?

问题2:试着找出其他能够判断素数的方法,并将该方法描述出来。

扩展1:输出100以内的素数。

扩展2:输出前50个素数。

思考题:需要几层循环?每一层循环变量能不能设置成一样?循环的次数是多少次?如何让程序效率更高?在没有计算机的情况下,如何知道你的算法是正确的?

该案例是在经典问题上增加了难度,由浅入深;是对经典问题的扩展,更贴近实用;要求学生不仅学会方法,更要领会思路;让学生能够掌握变量分析法,在脱离计算机的情况下也能编写出正确的程序,理解算法真正的含义。该案例的教学实施是在循环结构理论教学结束之后。通过本次案例教学,有助于学生对三大控制结构的整合,能够对之前所学理论知识进行固化,加强知识从理论到实践转换。

教学实施  教学实施以讨论为基础,是案例教学的核心环节。学生是关注的中心和主角,对于同一个案例,不同的学生会有不同的关注点。在问题1的讨论中,学生关注点主要集中在程序中表达式的复杂程度、循环的次数、语句的条数、能否读懂、算法的步骤、流程图是否容易画出等方面。问题2在问题1的基础上增加难度的同时,考查了学生对算法描述方法的掌握程度,该问题没有标准答案,学生只要能用一种方法正确地描述出算法,就算是回答了。

扩展1和扩展2是对两个已有的程序进行扩展,很多学生在看到题目之后马上开始写代码,并有强烈的上机实践的欲望,这时教师就要提醒学生注意后面的几个思考题。

对于同一个问题,学生也能提出不同的解决方法,不同的方法又会有不同的步骤,就会形成不同的算法,而同一个算法又會有不同的描述。在讨论过程中没有设定标准答案,学生要在讨论过程中对比不同的方法、算法和描述,对算法进行分析,可以从循环执行的次数、程序的语句行数、程序的可读性、输出结果是否美观等方面进行比较,找出最优的解决方案。学生之间多向的知识和经验的碰撞,要比教师单向的知识传递和教师与学生之间双向的讨论产生的效果更显著,学生也更乐于向同伴而非教师寻求帮助。

教师作为整个教学环节的设计者、引导者和主持人,在课堂上要适时地引导案例讨论的进程,控制课堂讨论进度,必要时进行提示和提问,避免讨论过于发散。学生在讨论过程中可以加入自己的需求,试图让问题得到更合理、完善的解决,极大地调动积极性;也学会使用计算机编程去解决现实中的实际问题,进而提高计算思维能力。对案例不设置标准答案,也没有明确的指示性答案,只要能编程实现,能解决问题,就是一个好的程序。

在案例教学实施过程中,教师特别要注意那些能力不符合案例教学要求的学生,要能够及时做出调整和正确的引导,以免影响他们学习的积极性和主动性。

教学总结  教学总结是案例教学的重要环节。教学总结可以是教师对案例中的难点、重点的强调解析,也可以是学生对未解决或发现的新问题的提问。有学生提出:前50个素数输出之后,在终端会由一行显示,这样的结果不利于查看和进一步分析。有学生就提出:可以让这些数分成五行显示。五行显示后又发现数有大有小,各行长短不一,输出也很难看,那么为什么不让五行的长度一样呢?怎样才能让五行长度一样呢?这些问题是在平时的编程中很容易出现的,看似很简单,可没有细致的观察提不出问题,没有经验的积累也无法解决问题。发现问题是能力,分析问题、解决问题也是能力。学生提出的问题和感兴趣的内容可以在考试中出现,这对学生的学习也是一种激励。

4 结语

笔者结合从事C语言程序设计课程教学的经验,通过在理论教学和实践教学之间引入案例教学,帮助学生将零散的知识融入已经掌握的知识体系中去。教学实践表明,通过学生之间的讨论,能够调动学生学习的兴趣和主动性;学生在教学实施过程中从问题到答案,逐步经过问题抽象、计算建模、编程实现,这一过程恰恰是计算思维中最重要的三个思维过程——抽象、分解与组合;通过学生之间多向的经验交流和共享,帮助学生提高编程能力,而编程能力的提高直接反映了学生计算思维能力的提高。■

参考文献

[1]林建.面向未来的新工科建设[J].清华大学教育研究,

2017(2):26-35.

[2]战德臣.“大学计算机”“MOOC+SPOCs+翻转课堂”混合教学改革实施计划[J].计算机教育,2016(1):12-16.

[3]兰霞萍,陈大超.案例教学的问题与出路[J].教学与管理,2017(4):1-4.

[4]丁海燕,袁国武,周小兵,等.高级语言程序设计案例教学模式的探讨[J].计算机教育,2011(8):65-68.

[5]王名.如何进行案例教学[EB/OL].[2006-07-19].http://

case.sppm.tsinghua.edu.cn:9090/ggalzx/detail_wh.jsp?

boardid=12&pageno=1.

猜你喜欢
C语言程序设计理论教学计算思维
和谐教学法在高校思想政治理论教学中的实践与探索
以“学生为中心”的《C语言程序设计》教学设计探究
嵌入式系统课程“中断、异常与事件”教学实践及启示
程序设计课程中计算思维和应用能力培养问题研究
民族高校C语言程序设计课程教学改革的研究
基于翻转课堂的《C语言程序设计》课程教学系统的实现与研究
浅谈《C语言程序设计》课程的教学改革
算法的案例教学探析
浅谈艺术专业学生计算思维能力的培养
《C语言程序设计》课程的教学改革与实践