类ACM式的课堂测试一方面保留ACM竞赛的基本形式,即要求参赛选手在规定的时间内完成给定问题的编程;另一方面,结合课上测试时间和学生编程水平的实际情况,对竞赛的题量、组队、评分、判题等形式进行相应调整。标准ACM竞赛与类ACM课堂测试比较见表1。
如表1所示,由于受到课时限制,类ACM测试将测试时间从5小时缩减为2学时,相对应的题量也由10道缩减至2或3道;测试形式由3人组队变为个人完成,这是因为对于C语言程序设计的初学者而言,首先需要训练个人能力,而不是训练其团队协作编程能力;评分形式则是由整题计分变为按点计分且各小点计分之和大于满分,这是因为测试案例大多包含由浅入深的几个子问题,按点计分有助于激发学习积极性,也利于引导学生完成较难问题的求解,而小点计分之和后大于满分也有利于学生获得较好的平时成绩。阅卷、判题根据教学平台的不同既可以选择机器判题,又可以选择人工判定。对于2学时的测试时间,我们进行了进一步细分,第1学时由学生独立完成测试并计分,第2学时先由教师对题目进行讲解和必要的程序演示,再留半小时给学生进行测试,但此时通过测试所获得的分值将有所降低。
3 “最近发展区”案例
基于第2节的课程教学设计,本节重点对基于“最近发展区”理论的类ACM式C语言教学方法中贯穿授课与测试的主体——案例展开介绍。篇幅所限,笔者只选取两个代表案例,介绍其考核的知识点、分点计分的各个小点、在语法知识讲授时的铺垫以及解题的基本思路。
3.1 长整数求“根”
求数“根”测试要求主函数从键盘读入一个整数,求出该整数的“根”,即对该整数的各位数字相加求和,若得到的和大于9,则对该结果的各位数字再次相加求和,直到结果小于10为止,这个小于10的整数就是长整数的“根”,如整数12345的“根”为6,因为1+2+3+4+5=15,而1+5=6。该案例主要用于考查学生对控制结构的理解,但学生也可以通过递归函数知识编写出正确的代码。案例设计了3个层次的计分点,难度逐步加大,具体如下:①输入整数的长度固定为7位;②输入整数的长度不定,但不超过9位;③输入整数的长度不定,但不超过100位。
作为铺垫,授课教师应在课堂举例或布置作业时将计分点1作为一个独立问题,给出编程思路交由学生思考求解,如先使用一个for循环进行定数循环,求解7位整数的和;再利用一个while循环判定和是否小于10,大于10则重复第一个求和的过程,小于10则输出结果。有了这一铺垫,进行类ACM式课堂测试时学生就比较容易理解题目要求,并能够较顺利地编写程序求解计分点1。对于计分点2,输入整数可直接存储在一个整型变量中,教师应在测试时提示学生使用两次while循环,即外层循环控制当前数是否小于10,内层循环用于求各位数字之和。计分点3的输入整数已超过整型的表示范围,教师可以提示学生先使用getchar函数,边读取输入整数边做一次按位求和,从而将计分点3的问题转变成计分点2的问题。
3.2 基于动态内存分配的扫雷
扫雷是类似Windows操作系统自带扫雷游戏的案例,主要考查学生对数组和指针的理解、掌握与使用情况,同样分为3个层次的计分点:①扫雷边界区域固定为20×20的网格,每个网格有雷的概率固定为0.2,要求程序能够在屏幕上输出雷的二维分布情况,即显示一个20行20列的字符信息(有雷打‘X’,无雷打‘O’);②在计分点1的基础上,要求在无雷处输出该网格周围雷的个数,即与Windows系统游戏类似的规则;③在计分点2的基础上,要求雷区的网格规模是动态输入决定的。
作为铺垫,教师在课上讲解随机数生成并基于随机数进行概率判定的方法,且在课件中给出详细代码,学生可以直接拷贝使用。在课堂测试时,针对计分点1的提示是用一个20×20的二维数组存储随机数结果,并根据随机数结果在屏幕上输出‘X’或‘O’;计分点2的提示是使用一个22×22的二维数组,边界元素均赋值为无雷,从而简化中间区域无雷网格的周边雷数计算过程;计分点3则提示学生使用指向指针的指针进行动态内存分配,需要说明的是指向指针的指针使用方法教师也已在课上举例时通过其他案例进行了介绍,学生只需要模仿编程即可。
通过上述两个案例的介绍,可以看出测试案例均具有一定难度。在传统程序设计教学中,对于没有编程基础的大一新生,往往很少能够接触到具有上述难度的习题,但本课程的实践结果表明,基于“最近发展区”理论,有了测试前课堂教学时的相关示例铺垫,学生对上述测试表现出了浓厚的兴趣,并能够在有限的课堂测试时间内显著加深对相关知识点的理解,提高程序设计水平。
4 教学成效
2014年春季,笔者在给国防科学技术大学大一新生高级班2班(高级班学员是通过以选择题为主的摸底考试选拔出来的,仅能反映其对计算机的理解较好,即大学计算机基础知识掌握较好,但并不代表其具备编程基础[5],如高级班2班仅4人在高中阶段接触过程序设计)讲授计算机程序设计课程时使用了基于“最近发展区”理论的类ACM式C语言教学方法。期末机试成绩见表2。
如表2所示,在学期末的机试考核中,高2班的平均分达到84.25分,及格率100%,优秀率39.39%,并有2人获得满分,各项指标均大幅高于全校整体水平(全校整体成绩数据已扣除高2班的人员影响),也明显高于另两个高级班。值得注意的是高1班的及格率低于全校整体的及格率,这也在一定程度上反映出高级班的学生在课程学习之前并不一定具有更好的编程基础这一事实。
上述统计数据尤其是平均分和优秀率数据表明,在同样的学习时间内,基于笔者所提出的C语言教学方法可有效激发学生的学习兴趣,帮助学生跨越“最近发展区”,显著提高编写程序解决实际问题的能力。
5 结 语
笔者结合在国防科学技术大学从事程序设计课程教学的经验,提出基于“最近发展区”理论,借鉴ACM程序设计竞赛模式的C语言程序设计教学方法——分阶段教学,进行类ACM式的阶段课堂测试,统筹设计课上语法知识示例与课堂测试用例。教学实践结果表明,使用该方法教学的高级班学生具备更好的通过编写程序解决实际问题的能力;在学期末的程序设计机试考核中,该班各项成绩指标都大幅领先全校以及其他高级班的学生。
教育期刊网 http://www.jyqkw.com
参考文献:
[1] 谭顶良. 高等教育心理学[M]. 南京: 河海大学出版社, 2006: 6-9.
[2] 朱月秀. 基于ACM竞赛的C++程序设计课程教学改革[J]. 漳州师范学院学报: 自然科学版, 2012(1): 96-99.
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说经典论文基于“最近发展区”理论的类ACM式C语言教学(2)在线全文阅读。
相关推荐: