基于PBL的程序设计语言教学案例设计

2015-10-14 00:57白洪涛何丽莉胡成全
科教导刊 2015年23期
关键词:教学情景

白洪涛[1] 何丽莉[2] 胡成全[2]

([1]吉林大学公共计算机教学与研究中心 吉林·长春 130012;[2]吉林大学计算机科学与技术学院 吉林·长春 130012)

摘 要 针对学生学习计算机程序设计语言的困难,以提高学生的实际编程能力为目标,提出了分层次的基于问题(Problem Based Learning,PBL)的程序设计学习方法。包括:以激发学习兴趣为目标的教学情景案例、以培养“计算思维”为目标的宏观问题和以培养实际编程能力为目标的微观问题等。教学实践表明基于PBL的教学取得了良好的效果。

关键词 基于问题的学习 教学情景 宏观问题 微观问题

中图分类号:G424 文献标识码:A DOI:10.16400/j.cnki.kjdkz.2015.08.061

Programming Design Language Teaching Cases Base on PBL

BAI Hongtao[1], HE Lili[2], HU Chengquan[2]

([1] Center for Computer Fundamental Education, Jilin University, Changchun, Jilin 130012;

[2] College of Computer Science and Technology, Jilin University, Changchun, Jilin 130012)

Abstract: For students to learn computer programming languages difficult, in order to improve students' ability to target the actual programming is proposed based on hierarchical problem (Problem Based Learning, PBL) learning programming. Including: to stimulate interest in learning the target of teaching case scenario, to develop macro issues "computational thinking" as the goal, and to develop practical programming capabilities targeted micro issues and so on. The practice shows that the good results achieved based on the teaching of PBL.

Keywords: problem-based learning; teaching situation; macro issues; micro issues

0 引言

计算机程序设计语言是学生们普遍认同的学习难点,过多的语法知识点以及在考核考评模式下,学习计算机程序设计语言应有的根本目标——编程能力没有得到很好的锻炼。当前的教学模式是以教师为主体,教师是教学过程的主导,学生是知识的被动接受者和思想的跟随者。因此,培养学生的创造力,构建以学生“学”为中心的教学体系是非常必要的。

基于问题(Problem Based Learning,PBL)的教学模式率先由美国神经病学教授Barrows创立。①PBL已从国际医学界扩展到工程、法学、工商管理等诸多学科,从大学高等教育逐步延伸到中小学教育。②③PBL在国内的起步较晚,上世纪90年代才引起研究者的关注,全国教育科学“十五”项目规划将PBL的网络化设计列为重点课题。1994年开始,陆续有关PBL理论研究的文章发表,且侧重于医学教育领域,2000年后扩展到其他领域,但理论研究比例较大。④⑤PBL在高等院校计算机程序语言学课程中的实践,则较为少见。

本文引进PBL教学模式,通过基于“问题”的学习,探寻一条适合学生学习计算机程序设计语言的有效途径,同时为教师在教学中提供可参考的方法和思路。

1 教学情景案例

1.1 什么是计算机语言

对于初学者而言,最直接的问题就是:“什么是计算机语言?”我们从《通灵芯片》一书⑥中对计算机语言既抽象又形象的解释来阐述这一问题。

石头上我蚀刻了一副图案,内有几何图形种种,在不明者眼中,显得神秘而又复杂,但我明白,只要布局正确,这块石头将被赋予一种特殊的能力,即对一种至今无人说过的咒语做出反应。我用这种语言提问,石头会显灵应答:那是一个我用符咒创造的世界,一个在石头图案内想象的世界。

石头是硅片(硬件),咒语就是程序(软件)。

1.2 计算机语言与人类语言的关系,学习计算机语言与学习外语的相似性

语言也是我们人类的主要交流途径,要说对方能够听得懂的话。若我们想让计算机遵从我们的意愿工作,就必须对计算机“说”它能够“听得懂”的“语言”。

学习和使用计算机语言与我们学期一门外语(如英语)一样,有两种方式:

先学习单词、语法,再学习语义。

学习一定的语法,在使用(编程)中学习语义,融会贯通。

我们建议采用第二种学习方法,竭力避免为了语法而语法,死记硬背的学习是没有意义的。

1.3 结构化程序设计的好处

我们吃中餐都有这样一个体会,同样一个菜品,在不同的饭店,由不同的厨师做出来的味道迥异。而比如KFC,无论在世界上的哪个店面,口味几乎是一样的。同学们想为什么呢?对,因为KFC建立了一套标准化的食品制作流程,每个环节都是规定好的,细致的,不需要个人主观“发挥”的。同样,程序设计既可以是“京酱肉丝”,也可以是“汉堡包”。可以是艺术,也可以是工程。比较而言,我们更侧重于用工程化的思想和方法来进行程序设计。进而,有了结构化程序设计方法,就是为了规范程序设计的个人行为的。使得程序有更好的可读性、可理解性和可移植性。

1.4 正确理解编译器的提示信息

同学们在用编译器对高级语言源程序进行编译的时候,若有语法错误,通常编译器会告知我们语法错误出现在哪一行。有时仅仅有一个语法错误,但是编译器会显示有很多行都有错误。很多同学不理解,以为出了什么问题,其实这是可以解释的,如图1所示:

图1 编译器匹配规则

第一行有5个正确的匹配,如果我拿走了其中的一个(黄色一对中的一个),则高级语言顺序编译器根据至上而下检查的原则,会出现4个(而不是一个)失配的错误。只要更正了黄色的部分,则所有错误消失。

2 宏观问题

(1)如何才能学好计算机程序设计语言?

回答:从模仿开始。

人类学习母语是模仿,学习计算机程序设计语言也可以从“照葫芦画瓢”开始,在模仿的过程中修正错误,掌握知识点,培养程序设计的思路、方法和技能。

类比,学习外语如英语的方法也不该只是大量地背单词,应该是从说话、阅读、写作当中学习,学会用是最终目的,否则再多的单词也是没有生命力的。

(2)if 语句和switch…case语句都能实现选择分支,是不是二者用哪个都可以?

回答:虽然从语法上,switch…case结构相当于多个if嵌套。也有一些题目来考察两者的相互转换。但语法不该被乱用或滥用,switch…case结构只有在特定的多分支选择时才适合使用。

(3)条件表达式可以代替if语句,那么就多用条件表达式对吗?

回答:这个问题类似于switch…case结构一样,不能被滥用。只有类似于下面的条件语句

if  ( a>b )

Max = a;

else

Max = b;

才能使用 Max = a>b?a:b;来代替,不是任何if语句转换成条件表达式都是合适和易于理解的。

(4)为什么C语言有“指针”?是必须的吗?

回答:包括C语言在内的任何一种计算机程序设计语言,都是从实用性出发的,而不像数学定理那样追求“当且仅当”。C语言的指针并不是必须的,比如C#就没有指针的概念,但有了“指针”,能够使程序更具灵活性,在实现某些功能时更方便、快捷。当然,C语言的指针也有一些负面的作用,如野指针。对初学者来说,C语言的指针也确实是一个难点。但无论如何,同学们完全可以通过勤学多练,掌握“指针”。随着学习和应用的深入,同学们会慢慢体会到C语言的“指针”不仅不是阻碍,而且还是解决问题的“利器”。

3 微观问题

(1)数组既然是多个数据元素的集合,是否可以对数组所有元素进行整体输入和输出?

例如:int a[10];

scanf(“%d”, a);

回答:C语言规定,数组的名字代表了数组首元素的地址(或理解为数组在内存中的起始地址),虽然scanf的参数表列的要求是地址,但不允许用一个地址将数组所有元素都输入,除非要输入的字符串,且字符串是放到字符数组中,并当作一个整体来看待的。

正确的方法是:

int a[10], i;

for (i=0; i<10; i++)

scanf(“%d”, &a[i]);

对于字符数组而言,可以:

int c[10];

scanf(“%s”, c);

(2)如何验证对浮点数在“足够接近”情况下的等值。

回答:浮点数的定义决定它的绝对精确度会随着其代表的值变化, 所以比较两个浮点数的最好方法就要利用一个精确的阈值。这个阈值和作比较的浮点数值大小有关。不要用下面的代码:

double a, b;

...

if (a == b) /*错!*/

要用类似下列的方法:

#include <math.h>

if (fabs(a - b) <= epsilon * fabs(a))

epsilon 被赋为一个选定的值来控制“接近度”。你也要确定a 不会为0。

(3)莫要乱写“;”

C语言程序的一行是以“;”为结尾的,但不意味着任何一行程序的末尾都要加“;”。比如:

for ( i=0; i<100; i++ )

sum = sum + i;

有很多同学在for ( i=0; i<100; i++ )后加了一个“;”,这使得本来完成一个功能的语句,硬生生地被“分开”了。

4 结束语

熟练掌握一门计算机程序设计语言,无论是对计算机还是非计算机专业的学生都是非常重要的。教学实践表明,通过不同层次基于问题的学习,能够显著增强学生的主观能动性,提升学习兴趣。本文是在我校教育教学改革项目的支持下的教学研究成果。期望在政策的指引下,通过师生的共同努力,探索出适合当代大学生学习计算机程序设计语言和相关课程新道路。

参考文献

2013.09,吉林大学本科教学改革研究项目,在线“非计算机专业计算机程序设计PBL教学”内容研究,项目编号:2013097;

2013.09,吉林大学本科教学改革研究项目,基于PBL理论的《无线传感器网络》课程教学研究,项目编号:2013093;

2013.09,吉林大学本科教学改革研究项目,《物联网应用系统分析与设计》课程建设,项目编号:2013091

猜你喜欢
教学情景
小学数学新课程教学中的问题浅议
高中化学课堂教学创设学习情景性问题的研究
小学数学应用题教学策略探究
初中英语教学中情感教育的运用
浅谈英语教学中的情景创设
例谈教学情景在初中英语课堂中的灵活运用
试谈多媒体技术在课堂教学中的作用
视频资源在初中科学教学中的运用
创设有效教学环境,提高教学效率