APP下载

C++程序设计在初中选修课活动中的实践与探究

2019-09-10杨卫清

学习周报·教与学 2019年44期
关键词:编程初中

杨卫清

摘  要:目前,编程越来越受到各国人们的重视,逐渐成为孩子成长的必备素养,“全民编程”的时代已经到来。为了响应时代要求和本校课改实际,我们决定开设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年版.

猜你喜欢

编程初中
玩游戏学编程,Blockly Games上手玩
纺织机上诞生的编程
88元抢5节直播编程课,轻松入门超越同龄人
编程屋完成数百元万天使轮融资
游戏机教出编程小达人
学编程,先画画
联系式教学法在历史与社会课教学中的运用
音乐快乐教学的实践与探索
初中物理“问题—发现”式课堂的实践与思考
共情教学模式在科学课堂的构建与实施研究