杨卫清
摘 要:目前,编程越来越受到各国人们的重视,逐渐成为孩子成长的必备素养,“全民编程”的时代已经到来。为了响应时代要求和本校课改实际,我们决定开设C++程序设计学修课活动,以培养学生开拓抽象逻辑思维能力、创新能力等信息技术核心素养。本文主要阐述C++程序设计在我校选修课活动中的实践探究过程。
关键词:C++编程;初中;选修课活动
一、编程,是这个时代的趋势,也是这个时代的要求
目前,编程越来越受到人们的重视,已逐渐成为孩子成长的必备素养,“全民编程”时代正在走来。本文通过教师准备、学生选择、课程选择及改变、课堂学习与课后作业等方面来阐述C++程序设计在初中选修课活动中实践与探究的具体操作。
二、C++编程活动课的实践与研究
(一)教师准备
首先,教师学习C++程序设计及相关教学理论。学校为每个信息技术教师购买了《信息学奥赛一本通(C++版)》和《CCF编写的中学生计算机程序设计(基础篇和提高篇)》两套书,教师利用课余时间积极学习认真研究,并在办公室内形成了良好的编程探索研究氛围。其次,教师利用一切机会参加有关信息学奥赛教练员培训。
(二)学生的选择
1.调查学生情况,挖掘有编程潜力的优质学员。对于每届新生,我们会利用开学前(军训期间)通过问卷和查看档案的形式,完成对学生小学阶段信息技术学习情况调查,以发现有信息技术特长的学生,尤其是有编程基础的学生,为下一步选取优质学生做准备。
2.筛选学生,基于师生双向选择,互相有需求。首先,学生自愿报名,要求数学成绩较好(一般85分为底线);其次在正式组班前要对报名同学做挑选,主要是筛选出对编程有兴趣且能够坚持下去的学生。
3.确认名单,签订协议。每个年级开设两个班,每个班30人左右,第一次开课和学生签订一份课程学习协议,增加学生开始学习这门课的仪式感和坚持学下去的信心。
(三)教程的选择与改编
1.教程的编写:以CCF编写的中学生程序设计内容为基础,根据我校实际情况编写出40节的内容(七年级上学期10节,七年级下学期10节;八年级上学期10节,八年级下学期10节)。
2.学案的编写:根据校编教程编写学案,每节一个学案,供2课时使用,预计编写40个学案(80课时)。
(1)低起点,小步子。所有学案编写我们都注重低起点,尽量把学生当成零基础进行对待。
(2)精讲精练,高质高效。所有例题和习题精心挑选,尽量让例题都具有代表性,让每个习题都是经典题型。注重让一个例题代表一种类型,注重题目的变换迁移,争取实现通过一个例题的精讲,达到领会一类问题的解决方法。
如学习循环语句时:例题编程求1+2+3+……+n的值,非常容易入手,所以学生一看到题目,觉得很熟悉,马上就有跃跃欲试的解题兴趣。针对这个经典例题,我们进行分析归纳,充分利用。此类问题一般分为两大类:一类是直接求1加到n的和,另一类是求和s不大于某个数m的最大n的值;
第一类:分别用for语句和while语句实现1加到n的和:
int main()
{inti,sum;
sum=0;
for(i=1;i<=100;i++)
sum=sum+i;
cout<<sum<<endl;
return 0;
}
用for语句实现1加到100
int main()
{ inti,sum;
sum=0,i=1;
while(i<=100)
{ sum=sum+i;
i++;
}
cout<<sum<<endl;
return 0;}
用while语句实现1加到100
第二类:分别用for语句和while语句实现和s不大于某个数m的最大n的值:
Intmain()
{
inti,m,sum;
sum=0;
cin>>m;
for(i=1;sum<=m;i++)
{
sum=sum+i;
}
cout<<i-2<<endl;
return 0;
}
用for語句实现
Intmain()
{
inti,m,sum;
sum=0;
cin>>m;
i=1;
while(sum<=m)
{
sum=sum+i;
i++;
}
cout<<i-2<<endl;
return 0;
}
用while语句实现
通过对比加深理解循环控制变量和循环结束条件语句的含义,从而更能理解for循环和while循环使用的具体问题情境。
(3)经典重现,以旧识新。在学习递归函数时,我们从熟悉的经典的斐波那契数列过度,通过对比迁移,完成对递归函数的含义构建,形成新的知识。例如求斐波那契数列的第40项:
int main()
{
inti,a=0,b=1,c;
for (i=3;i<=40;i++)
{
c=a+b;
a=b;
b=c;
}
cout<<c;
return 0;
}
循环求斐波那契数列的第40项;
intfib(int);
intmain()
{
cout<<fib(40);
return0;
}
int fib(int n)
{
if(n==0) return 0;
if(n==1) return 1;
return (fib(n-1)+fib(n-2));
}
递归函数求斐波那契数列的第40项;
3.教程和学案的反馈与整理
(1)教师根据课堂实际教学反馈对教程和学案进行改进和反思。在教程与学案的设计上,初稿可能存在这样那样的问题,尤其是在课堂容量上、学习深度设置上等方面。经过教师课堂实践,对存在的不足进行修改完善,以提高教程及学案和学生的匹配度。同时对课堂上的各种非正常状况及时记载,及时写好课后反思。
(2)集体备课讨论。每周的集体备课上,每个上课教师先把上课情况及对教程和学案的修改和大家做个说明,大家再根据上课教师讲的课堂情境及对教程、学案的修改进行思考、讨论。最后,形成一个较为统一认可的教程学案完善方案。下次上课的教师,可根据修改后的教程、学案,结合自己的教学方法,生成有自己个性的教学方案。
(3)让学生参与到课程建设。抽取部分上课学生做课程观察员,开课前就和学生说明,他们除了和其他同学一样学习课程知识技能外,还肩负着对上课内容的观察和反馈,主要是:课堂容量是否太大(老师有没有讲完),课堂内容的难易程度(老师讲的是否太快或太慢),课堂内容分层是否合理(学习梯度是否太大)这几个方面。每两周进行一次学生反馈,让学生感受到自己是课程设计的一份子,增加学生的课程主人公意识,同时也让课程多了一个视角,更加完善。
(四)课堂学习与课后作业
1.教学实践:根据教程和学案,教师根据学生情况按计划开展C++程序设计教学,并及时做好课后反思。
例如在学习循环结构for语句时,求1+2+3+……+100的例题讲解结束后,对题目变化分别求出1到100的偶数和、奇数和。分别通过对循环变量控制和对数值判断两种方法实现。
int main()
{
int sum=0;
for(int i=2;i<=100;i=i+2)
sum=sum+i;
cout<<sum;
return 0;
}
控制循环变量求sum
int main()
{
int sum=0;
for(int i=1;i<=100;i++)
if(i%2==0) sum=sum+i;
cout<<sum;
return 0;
}
循环内挑选数值求sum
通过对这两种思路的探究,学生的思维会被发散打开,于是就会有下面的尝试,同时求出1到100的奇数和、偶数和。
int main()
{
int sum1=0,sum2=0;
for(int i=2;i<=100;i=i+2)
{
sum1=sum1+i;
sum2=sum2+(i-1);
}
cout<<sum1<<””<<sum2<<endl;
return 0;
}
控制循环变量求sum1、sum2
int main()
{
int sum1=0,sum2=0;
for(int i=1;i<=100;i++)
{
if(i%2==0) sum1=sum1+i;
if(i%2==1) sum2=sum2+i;
}
cout<<sum1<<””<<sum2<<endl;
return 0;
}
循環内挑选数值求sum1、sum2
学生的思路一旦被打开,他们的想法往往出乎老师的意外,解决问题的各种可能方式都会可能产生,而在这种不断尝试的过程中,学生的思维会慢慢变得灵活起来。如刚才的这个题目,后来学生在教师还未讲授两个自变量的情况下,就有学生这样尝试了:
int main()
{
int sum1=0,sum2=0;
for(intj=1,i=2;i<=100;j=j+2,i=i+2)
{
sum1=sum1+j;
sum2=sum2+i;
}
cout<<sum1<<””<<sum2<<endl;
return 0;
}
两个循环变量求sum1、sum2
2.课程一开始就要求敲代码,禁止“纸上谈兵”。比如:编写程序用字符“*”打印各种图形(正方形,长方形,三角形,菱形,及这四种图形的空心图形),编写程序有点枯燥,但当学生调试成功时,马上成功感让他顿时感觉很爽,觉得自己很牛,于是他会指导别的同学,会挑战更难的图形。
3.课后作业:每次课都留适量作业,供学生课后练习。主要是让学生复习课堂学习内容,练习巩固,不至于下次上课忘记掉。课后作业主要来自一本通网站(http://ybt.ssoier.cn:8088/),这个网站都有很丰富的题库,学生可以注册登录,选择相应的问题(网站的题目设置和上课的知识点顺序基本上是一致的,所以学生可以根据每次课选择相应的练习),自己通过编程完成调试,再在线提交,网站会实时的给出提交代码的测试结果。测试比自己检查要严谨的多,首先是编译是否通过,其次是有10组测试数据,每组10分,当看到100分时,大多数学生还是比较激动的。而网站会根据每个用户提交次数和成功的次数进行积分排名。这样会带来更多的成功感和竞争意识,对提高学生的编程严谨意识有很大帮助。
三、研究成果
经过一年多的时间和探索,我们老师和学生一同经历了开始的兴趣高昂、信心满满,到困难重重、几近迷茫,再到走上轨道、目标明确,再到体验编程的快乐的奇妙之旅。这一路走来,也收获颇丰。学生对编程从一无所知的神秘,到有所了解,再到可以利用编程解决简单的问题。这门课程的开设打开了这批学生学习编程的大门,为以后更加深入的学习奠定了良好的信息素养。
参考文献:
[1]董永建等著,《信息学奥赛一本通(C++版)》,科学技术文献出版社2013年版.
[2]陈颖等主编,《CCF中学生程序设计入门篇》,科学出版社,2016年版.
[3]江涛等主编,《CCF中学生程序设计基础篇》,科学出版社,2016年版.