STEAM课程框架下的例题设计策略研究

2017-10-31 23:57郑长宏郭建谭乐婷
中国信息技术教育 2017年20期
关键词:宝库语句变量

郑长宏+郭建+谭乐婷

STEAM课程可以粗略地分为两条主线:知识学习主线和项目任务主线。知识学习主线多是通过求解例题让学生学习基本知识、基本技能和基本思想,为项目任务主线的学习奠定基础。因此,STEAM课程设计中的例题设计显得尤为重要。笔者总结多年的信息学奥林匹克竞赛、机器人、图形化编程教学经验,特别是近年来在全年级开展的STEAM模块化系列课程之“C++编程基础”的实践研究,得出以下例题设计策略。

● 铺垫例题,让学生学会分解任务以降低难度

STEAM课程的教育目标之一是培养学生分解任务的能力。在STEAM课程中,教师主要引导学生完成任务(或项目),但很多时候这些任务的难度较大,不太容易一次就完成,所以需要把任务分解为难度相对较低、更容易完成的子任务。在设计例题时,教师也可以将其分解为多道子例题,把包含基础知识的例题放到前面作为铺垫,由易到难逐步提升。

案例一:比较两个变量的大小,由小到大输出。

在学习第4讲《if语句与关系表达式》一课时,笔者准备了这样一道例题:输入两个不相等的数a和b,由小到大输出。解题方法之一:如果ab,则先交换a和b的值,然后输出a和b。解决这个题目有两个关键点:一是使用if语句对条件进行选择,二是交换变量a和b的值。学生认为交换变量a和b的值只需要这样两条赋值语句:a=b;b=a。然而,这样执行的结果是错误的,因为a和b的值最后都是b的值。为了解决这个难点,笔者花了不少时间来给学生讲解如何交换两个变量值。结果,教学超时,没有完成教学任务。

解决策略:把这道题的两个任务分解开,把交换两个变量a和b值的问题放到第3讲《变量的定义与赋值》中,同时,笔者设计了这样一道例题:请输入变量a、b的值,然后交换变量的值,再输出。学生通过第3讲的学习,清楚地理解了交换两个变量的值需要用到第三个变量临时存储数据,代码如下:

t=a;a=b;b=t;

在学习《if语句与关系表达式》比较两个数大小的时候,教师可以用这样的伪代码将程序表示如下:

if(b>a) 交换a和b的值;

输出a的值,输出b的值;

有了前面的铺垫,学生理解起来就容易多了。

● 优化例题,让学生体验项目优化的过程

STEAM课程强调项目式学习,项目的设计与制作过程就是一个不断优化的过程。教师可以把例题设计得有些小缺陷,让学生在解题的过程中不断思考,不断优化,同时体验项目优化的过程。

案例二:宝库密码问题的两次改进。

笔者在第7讲《计数循环与for语句》中设计了这样一道例题A:富翁有个宝库,输入密码才可以打开。如果密码正确,则提示“宝库即将打开,请稍后……”;如果密码错误,則提示“密码错误,请重新输入密码”!并再次输入密码,但只能输入三次。请用程序模拟这个宝库密码。

这道例题就是一个小小的项目,类似于手机输入密码解锁屏幕,或银行ATM取款的过程。如果直接这样设计例题,没有给学生优化改进这个项目的机会,学生就失去了思考的原动力,能力的培养有限。

解决策略:笔者把这道例题简化成了一个不完善的例题B:富翁有个宝库,输入密码才可以打开。如果密码正确,提示“宝库即将打开,请稍后……”;如果密码错误,则提示“密码错误”!请用程序模拟这个密码宝库。笔者把这道例题设置在《if语句与关系表达式》一课中,当学生调试成功以后,有位学生提出这样的疑问:“老师,输入错误密码,程序要终止,这时还要再运行一次程序,才能输入正确密码。这太麻烦了,如何才能在输入错误密码之后,程序报错但不停止运行,直接再次输入密码呢?”笔者在全班表扬了这位勤于思考的学生,也顺理成章地在第5讲《while语句与逻辑表达式》用例题B的改进版例题C作为引入。

改进后的例题C是这样的:富翁有个宝库,输入密码才可以打开。如果密码正确,提示“宝库即将打开,请稍后……”;如果密码错误,则提示“密码错误,请重新输入密码”!请用程序模拟这个密码宝库。学生使用while语句调试成功以后,又提出问题:“密码错误可以一直输入密码,直到密码正确。我同桌都把我的密码试出来了!”笔者:“那怎么优化呢?”学生:“我觉得应该限定次数,比如三次,手机就是这样的。”

笔者又顺势设计出了较为完善的例题,也就是最开始的第7讲的例题A。

于是,例题B只判断密码是否正确;例题C判断密码是否正确,如果错误要求重新输入密码;例题A判断密码是否正确,如果密码错误要求重新输入,但只能输入三次。

通过对例题B、C、A三个版本的设计,让例题不断优化。这不仅让学生的思考步步深入,还让学生体验到了STEAM项目优化的过程。

● 多解例题,让学生从多角度思考问题

一题多解,能够让学生从多个角度观察问题、思考问题,在STEAM教学过程中可多加运用。

案例三:三个变量a,b,c排序的问题。

为了引入if语句的嵌套和逻辑表达式,笔者设计了例题:给a、b、c三个数排序,由大到小输出。

首先,笔者给出了较为困难的使用if语句的嵌套的解法一:先判断a>b,再分情况判断b>c,然后再分情况判断a>c。具体求解思维导图如图1所示。

学生看到上面的层叠关系就觉得很难,再看到密密麻麻的程序代码时,更感觉是一头雾水。笔者顺势引导学生学习第二种解法:利用学过的数学知识,不难分析出这样六种关系:①a>b>c;②a>c>b;③b>a>c; ④b>c>a;⑤c>a>b;⑥c>b>a。

可以用六条不带else的if语句解决,思路如下:

① if(a>b>c),输出“a>b>c”;

② if(a>c>b),输出“a>c>b”;

③ if(b>a>c),输出“b>a>c”;

④ if(b>c>a),输出“b>c>a”;

⑤ if(c>a>b),输出“c>a>b”;

⑥ if(c>b>a),输出“c>b>a”;

但是新的问题来了,C++语言虽然允许类似“a>b>c”的表达式,但“a>b>c”并不表示“a>b并且b>c”。于是,笔者引入逻辑运算符和逻辑表达式“a>b&&b>c”来表示“a>b并且b>c”。

笔者带着学生总结了解法一的主要特点是if语句的嵌套,解法二的主要特点是分情况讨论。当学生认为问题圆满解决的时候,笔者又提出:“我们可以综合解法一和解法二的特点,设计一个既简单又不需要逻辑运算符的解法。”通过思考,有学生综合了解法一的嵌套和解法二的分情况讨论,得出了解法三:运用不带else的if语句的嵌套,用伪代码表示如下:

① if(a>b)if(b>c),输出“a>b>c”;

② if(a>c)if(c>b),输出“a>c>b”;

③ if(b>a)if(a>c),输出“b>a>c”;

④ if(b>c)if(c>a),输出“b>c>a”;

⑤ if(c>a)if(a>c),输出“c>a>b”;

⑥ if(c>b)if(b>a),输出“c>b>a”;

同一例题,从多个角度思考,运用不同的方法求解,拓宽了学生思维的广度。

● 改编例题,让学生注重解决问题的过程和方法

STEAM教育是注重过程和方法的教育。教师通过改编例题可以让学生关注解题的过程和方法,而不仅仅是答案。

案例四:1到100的整數和求解问题。

在for循环的经典例题中,“求1+2+3+……+100的和”是最常见的例题。笔者也使用过这道例题来讲解for语句,但学生往往看到这道题就想到它的结果是5050。因为这道题在数学课上已经学习过了,利用求等差数列和的方法(首项+末项)×项数÷2可以轻松算出结果。但为了让学生掌握for语句计数循环的方法,即通过for循环和语句“sum=sum+;”把每一个数加起来,笔者把例题改编成求20+21+23+……+108,改编后,学生不容易一眼算出结果,就把注意力集中到使用for语句求解的问题上来。

● 美化例题,让学生领略编程之美

在“C++编程基础”教学中,笔者注重美化例题,把艺术教育融入到C++代码的字里行间和程序格式的排列缩进之间,让学生在潜移默化中领略编程之美。

案例五:编写一个小小的计算器程序。

排版优美的程序代码,不仅利于阅读,而且可以感受到C++的代码之美。在学习if语句和switch语句的时候,有这样一道例题:编写一个小小的计算器程序,输入变量a和b,再输入+、-、*、/中的一个符号,完成相应的计算,输出答案。笔者在讲解该例题时,特别强调书写的规范性,即代码的缩进与对齐,程序部分代码如图2所示。

以上是编写程序时体现出的代码美感,还可让程序输出结果也体现出美感。

案例六:运用二重循环输出图形符号。

学习循环语句的嵌套可以通过使用二重循环输出特定的图形符号来练习。笔者设计了如图3所示的图形,编制例题,让学生学习二重循环的使用。

由此可见,美化例题是让例题在设计中融入艺术教育,让学生潜移默化地感受编程之美。

合理运用例题设计策略精心设计例题,让学生在STEAM课程中学习方法,培养思维,增长能力。这需要教师不断探索,不断实践。endprint

猜你喜欢
宝库语句变量
青花志展览
读书
分离变量法:常见的通性通法
基本算法语句
我喜欢
不可忽视变量的离散与连续
作文语句实录
轻松把握变量之间的关系
变中抓“不变量”等7则