顾正兰
(盐城师范学院 数学与统计学院,江苏 盐城 224002)
很多学生对学习C语言感到无从下手,经常问一个问题:究竟怎样学习C语言?分组实践教学可以解决学生的这一问题,并让学生愿意学习进而掌握C语言知识。
很多学生在中学阶段很努力学习,希望能够考取理想的大学。面对枯燥、乏味的学习,有些中学教师为了鼓励学生,给他们画了一个空洞的大饼:上大学就不用这么辛苦学习了,大学很轻松。带着这样的憧憬,他们步入大学。
而C语言程序设计这门课程,恰好安排在大一第一学期学习[1]。在翻过了高考难关,步入大学后,很多学生学习处于放松状态,以为不努力学习考试也可以轻松通过。
高中阶段,教师为了提高学生的学习成绩,过度地给学生讲解知识点。填鸭式的教学导致很多学生上大学后仍习惯于被动地接受知识,不会独立思考,缺乏主动学习的意识。而大学学习内容比较多,知识容量大,被动的学习方式使他们无法适应大学的教学方式,不能及时吸收新知识,知识点就会越积越多,最后导致听不懂,不适应。
一开始看到程序设计,很多学生带着对已有计算机应用产品的认识,认为可以开发出很多智能化的程序,可以随心所欲地利用已有知识开发游戏。但一旦开始学习,就会发现程序设计还需要很多需要记忆的知识点,而他们又懒于对知识的记忆,便从心理开始厌烦,提不起学习兴趣。
程序设计表达方式和数学、生活中的思维方式有相似之处,也有很多不同,刚入学的大学生还不习惯程序设计的思想。在学习程序设计时,控制结构掌握不好,不能很好地以程序设计的理念来思考程序设计。
分组实践教学中,学生能够加深对知识点的理解,提高自身素质和动手操作能力。在分组实践中,进行团队合作,可提高学生的团队合作能力;分组实践中,通过小组之间的竞争,能够发现自己的不足;分组实践中的评价机制、激励措施、过程性考核、翻转课堂都能够有效提高学生的学习能力,增强学生的自信心以及约束力。
整合知识点,学习一个知识点,引导学生在实验课及课外利用计算机进行实践。通过把所学习知识点变成程序、上机操作、运行程序输出来理解知识点。在教学中,学完一个知识点后给学生演示,引导学生自己去实践,再通过结论反思教学中的知识点,如不同类型数据间的混合运算这个知识点,在混合运算规则中应注意:
1. 类型相同直接运算,结果保持原类型
这一点很容易被学生理解,在实际教学中学生也很容易掌握。
2. 运算对象类型不同,系统自动转换为同一类型再进行运算,结果为转换后的类型
这个知识点很多学生会认为表达式中所有运算对象都可以转换为同一个类型来进行运算。通过上机实践,看最后运算结果,反思这个运算规则。如表达式:7/2+4.5,很多学生看到这个4.5是浮点数,忽略了7/2被除数和除数均为整数,得到的结果是8。对此可以编写代码让学生上机实践:
#include ″stdio.h″
void main( )
{ double t;
t= 7/2+4.5;
printf(″t=%f ″, t);
}
分析运行结果:
t=7.500000
输出t=7.500000,反推7.5-4.5=3,也就是说运算7/2,被除数和除数都是整数,商也为整数,7和2并没有转换成浮点数进行计算。
上机实践不仅可以让学生熟悉上机操作,还能加深对知识点的理解,让学生进一步理解学习程序设计最简单最直接的方法就是实践。
实践案例的选择,对于刚刚接触计算机编程的学生来说,要循序渐进,不能选择特别复杂的实例。
针对学生不主动咨询的问题,可以让他们进行分组学习,通过分组讨论实践来完成实验教学,讨论中应鼓励同学之间的交流。大一新生分组时可以尝试不同的模式。在教学实践中,尝试了以下几种分组模式:
1. 学生自由组队
很多学生选择同一宿舍的同学为一个小组,据统计大一新生选择这种情况的有90%以上。
如果某个宿舍的学生学习自觉性比较高,那么这种分组模式的教学效果就会很好。在实践教学中,他们能相互探讨,共同完成教学任务。遇到解决不了的问题,课后在宿舍里还会进一步讨论。实践结果显示,这个宿舍的学生成绩都非常优秀。
相反,如果这个宿舍的学生学习自觉性比较差,这种分组模式就会失去分组的目的和初衷。
2. 按照自觉性好中差搭配固定分组
这种模式一般是在了解学生的学习状态之后采用的。在多年教学实践中,以学习方式、男女比例以及性格等因素进行分组,这种分组模式较为合理,适合一段学习之后进行。
需要强调的是,这种分组方式如果没有一定的配套措施,也很难发挥出优势。自觉性好的学生一般学习积极性比较高,成绩相对比较好;自觉性差的学生相对而言,学习积极性不高,知识点掌握就比较差。
3. 随机分组
这种分组模式不可控因素很多,适用于特定活动中,如进行对抗比赛、游戏类实践教学等。实践表明,比赛中队友很给力的时候,整个小组就会比较有活力。队友较弱的小组,就会一盘散沙。
实践中多次随机分组,可以增强学生之间相互了解,也给教师了解学生的机会。多次的随机分组可以为固定分组奠定基础。
不同类型的分组都有其自身优势,在一定程度上都可以带来较好的教学效果。因此,在教学中教师要根据不同的教学内容选择不同的分组模式。
对每一次实践进行点评。点评有学生自评、互评和教师点评等多种模式。评价机制是对实践教学的一种完善和促进。
1. 学生自评
通过自我了解和反思,确定自己在小组实践中的定位,发现自身不足,不断提高自己。
2. 小组成员互评
小组成员之间互评,可以逐渐了解小组成员,发现彼此的优点和不足,促进小组成员的共同进步。
3. 小组之间互评
通过小组互评,能够发现其他小组合作中的优点,反思自身小组合作的不足,增强团队合作能力,在之后的合作学习中能够发挥自身优势,提高学习效果。
4. 教师点评
从教学角度了解学生,给与点评。由于时间限制不可能每个同学都能点评,因此可以对成绩突出的小组和同学进行点评。教师点评可以在小组项目完成答辩环节后进行。平时教学中,还可以对表现较好的同学进行表扬,也可以选择部分同学的学习成果进行展示,一方面可以提高学生的自信心,另一方面还可以为其他同学树立学习榜样。
5. 作业互评
通过对同学作业的互评、打分,可以从别人作业的情况反思自身,查找不足,进而提高作业质量。
把每一章节知识点作业的完成情况作为平时成绩考核的依据,督促学生及时完成作业、测试。注重过程性考核,把每一次的作业、测试以及课堂表现等纳入学期课程考核中[2]。把分组实践教学的成绩按照小组和个人进行评分。每一次具体项目分组实践考核成绩小组考核成绩占50%,个人考核成绩占50%。过程性考核是保证分组实践教学顺利完成的原动力。
1. 小组过程性考核
小组过程性考核是每次实践任务完成情况的考核,旨在帮助学生树立团队的观念,促进小组成员之间相互帮助,获得集体荣誉感。这种考核需要每个小组组长整体协调,小组成员相互了解,制定合作方案,更好地完成项目。
2. 个人过程性考核
对个人完成作业、测试的考核,也是让学生了解自身知识点的掌握情况。通过个人过程性考核,能避免队友拖后腿拉低学生个人得分情况的发生。同时,可以帮助同学在实践中共同进步,并增加个人过程性考核得分。个人过程性考核可以在分组项目实践答辩环节中进行。
由于课堂教学时间有限,不可能把所有的任务都放到课堂上来解决。翻转课堂可以解决课堂教学时间不足带来的问题。在翻转课堂中可以让学生利用所学知识,在课外讨论,完成课题,并在课堂上进行答辩。翻转课堂可以在有限的课堂时间内,实现教学的高效率,提高学生的自学能力。翻转课堂不是简单的自学,而是分组讨论实践,让学生进行有目的有计划学习,通过小组竞争方式完成教学任务。
如整型变量的符号属性有signed(有符号)和unsigned(无符号)之分。如果不了解二进制,这个知识点则不容易理解。但在课堂上没有足够的时间展开讲解,可以利用翻转课堂完成此教学内容。如给出一个简单的实例,让学生自己查阅资料解决转换原理问题。然后给学生下列程序,让学生分组完成。
#include
void main()
{
unsigned short int t=-1;
short int x=65535;
printf(″t=%d,x=%d ″, t, x);
}
运行结果:
t=65535,x=-1
分组进行讨论:为什么会是这个结论“t=65535,x=-1”?
从整数的二进制补码形式进行分析,-1的补码和65535的补码用两个字节表示时是一样的。促使学生上网查阅二进制补码,理解整数存储的规则,拓展学生的学习思维,让学生学会管理自己课余时间,学会查阅资料。
理解二进制存储后,再给出,把int型前面short修饰删除,其他不变:
#include
void main()
{
unsigned int t=-1;
int x=65535;
printf(″t=%d,x=%d ″, t, x);
}
运行结果:
t=-1, x=65535
分小组讨论为什么int无符号和有符号又是这样的结果“t=-1, x=65535”?
通过两种程序对比,让学生自己探究为什么。在与同学讨论分析中,会越辩越明,最后发现就是一个简单的问题。在查阅资料中了解整数二进制补码的存储,printf函数格式符%d,对于int型就是按照存储的二进制补码方式进行解读。而对于short型数据是要区分signed和unsigned的格式进行解读。在Visual C++6.0或者Visual Studio 2010等版本以上编译系统给int型的量分配4个字节,所以65535是范围之内的数。
引导学生利用所学知识,解决数学中的一些典型问题,能直观地利用所学知识解决实际问题。
分组实践教学不是简单地进行分组上机实践,而是带着问题去实践,带着问题去讨论。有了问题才会有目标,而不是完成式地应付学习,在完成目标时才会有成就感。分组实践有一个固定的小组成员之间讨论,分工才会明确,查阅资料才会有方向感。如前面不同类型数据间的混合运算。
建立SPOC课程、MOOC课,通过网络平台自主按照要求学习,有针对地选择需要学习的知识点。C语言程序设计内容比较多,不可能所有的知识点都在课堂上讲解,因此要引导学生利用电脑、手机,借助于网络进行学习。
教师还可以利用网络平台发布学习任务,运用翻转课堂完成教学讨论、互评等实践环节。
在C语言程序设计课堂教学中采用分组实践方法,提高了学生的学习兴趣,教学效果显著。信息与计算科学专业计算机二级通过率达到95%以上,有的班级达到100%,优秀率也比较高,达到40%以上。在硕士研究生考试中,很多学生选择C语言程序设计或者相关的课程作为专业首选,复试中也常常选择C语言程序设计作为复试课程,每年都有很多学生考取心仪的学校。
“C语言程序设计”课程教学既要注重基本理论程序设计思想的讲解,使学生能够掌握基本理论,又要培养学生思考和分析能力,提高学生学习程序设计解决实际问题的能力。通过分组实践教学,培养了学生的自学能力,激发了学生的学习兴趣,从而提高了学生解决实际问题的能力。