郝雷刚 贾卫超 辛潇静 齐航
邯郸科技职业学院 056046
摘要:本文探索性将“一题多解”教学策略应用于“理实一体化”教学课程,通过对“计算当前日期是本年度第几天”这一问题,分别采用C语言中的基本流程控制语句、多路分支语句、数组和函数四种方法从不同角度展示解决问题的方法和技巧,帮助学生加深对C语言知识点的理解并增强学生灵活运用知识技巧能力,以达到“串珠成线,简洁高效”的目标,帮助学生梳理整体知识脉络,提高教育教学质量。
关键字:一题多解 教学策略 C语言
一题多解的意思是,同一道题(或同一个问题)可以有多种不同的解答方式方法。一题多解与“条条大路通罗马”这种哲学思想有着异曲同工之妙。通过一道题的多视角思考,多方法解答,不仅可以拓宽解题思路,开拓视野,而且有助于学生将所学知识系统化。但是该教学策略并没有在C语言程序设计教学中进行提倡,导致不少职业学院的学生感觉C语言程序设计内容枯燥抽象,难学不易掌握,学习兴趣不是很大,信心不足。如果教学老师能够很好地运用-题多解这一教学策略,相信可以取得很好的教学效果。
一、高职C语言程序设计课程的地位与特点
作为高职院校电子信息类专业的一门专业基础课,通过本课程的学习, 培养学生基本的C程序阅读能力、简单算法的编写能力、程序设计的基本方法,并逐步形成正确的程序设计思想和良好的程序设计风格,让未接触过程序设计的学生借助于C语言养成良好的程序书写习惯和编程思维习惯从而跨入程序设计的门槛,为学习后续课程的学习打下良好基础。
二、实施一题多解策略的关键要点
实施一题多解教学策略的核心是教师,目标是学生,途径是课堂。设计并实施好一题多解教学策略,需要着重做好以下几方面工作:一是教师需要具备扎实的专业领域知识和编程技巧并能够灵活运用不同的解法;二是教师需要具备良好的引导能力和问题解决思维,引导学生思考和探索问题的不同解法,以激发学生的思维灵活性和创新能力;三是教师需要具备良好的课堂把控能力,需要合理安排教学时间,管理好课堂的教学进度;四是教师需要对整体课堂教学过程进行专门设计,在考察学生对不同解法的理解和实现能力的同时,还应提供及时的反馈和指导,帮助学生改进和提升自己的解题能力。
三、一题多解教学策略的运用与实践
(一)设计目标
在《C语言程序设计》中程序基本流程控制语句、开关语句和数组是三个连续的教学设计单元,每一部分的教学侧重点有所不同。本课题的目标是通过一个教学案例,将三个教学设计单元的知识点进行串联,帮助学生加深对基本流程控制语句、开关语句和数组的理解,以达到将相关知识点“串珠成线”的目标和学以致用的效果。
(二)题目描述
通过键盘输入一个日期,计算出该日期是当年的第几天。
(三)课程思政
为了解决阴历和阳历这两种历法之间的不匹配问题,古人采用“19年7闰”的闰月法。祖冲之发现了新的闰法,并应用岁差原理,精确地计算出一回归年是365.24284481日。最终他制成了《大明历》,打破了老闰法,这一年他才33岁。
(四)教学设计单元一,基本流程控制语句
1.核心程序源码
根据闰年规则“四年一闰,百年不闰,四百年一闰”,年份满足下列条件之一,则为闰年。
(1)能被4整除且不能被100整除(如2004年是闰年,而1900年不是)
(2)能被400整除(如2000年是闰年)
//通过循环累计month之前的月份天数
for(index=1;index<month;index++){
if(index == 1||index == 3||index == 5||index == 7||index == 8||index == 10||index == 12){sums += 31;
}else if(index == 2){
//判断是否为闰年
if((year %4 ==0 && year%100 !=0)||(year % 400 ==0)){sums += 29;}else{sums += 28;}
}else{sums += 30;}
}
//累计当月日期
sums+= day;
2.教学反思与总结
本环节是学生在学习完C语言基础语法之后的第一个实训项目,难度不易过大,考察的知识点涵盖了基本输入输出语句、运算符与表达式、分支语句和基本循环语句。本方案通过for循环语句累加当前输入月份之前的天数,最后累加当月的日期数,以实现计算出当前日期是全年第几天的目标。在本方案实施的难点在于多级判断和循环与判断的嵌套,很多同学由于逻辑不清晰和语句结构不熟练导致程序运行失败,教师可以通过引导学生绘制流程图的方法,逐步化解各个难点,以达到层层深入的目标。
(五)教学设计单元二,Switch开关语句
1.核心程序源码
//利用switch...case特点累加每月天数
switch(month){
case 12:
case 11: if(month>11){sums+=30;}
case 10: if(month>10){sums+=31;}
case 9:if(month>9){sums+=30;}
case 8:if(month>8){sums+=31;}
case 7: if(month>7){sums+=31;}
case 6:if(month>6){sums+=30;}
case 5:if(month>5){sums+=31;}
case 4:if(month>4){sums+=30;}
case 3:if(month>3){sums+=31;}
case 2:if(month>2){
//判断是否为闰年
if((year %4 ==0 && year%100 !=0)||(year % 400 ==0)){sums+=29;}else{sums+=28;}
}
case 1:if(month>1){sums+=31;}
}
//加上当月日期
sums += day;
2.教学反思与总结
本方案利用了switch语句多路分支的特点,巧妙利用逆序的方式实现对月份天数的累加,最后累加当月的日期数,以实现计算出当前日期是全年第几天的目标。通过case 语句可以清晰的标明当前所处理的内容,在case后附加条件判断可以有效解决月份累计错误的问题。通过与基本流程控制语句的对比,学生会进一步加深对switch语句使用条件和适用场景的理解,注意避免易错点,并通过练习和实践提高对其的掌握程度。
(六)教学设计单元三,数组
1.核心程序源码
//巧用数组用来保存每个月的天数
int days[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
//判断是否为闰年
if((year %4 ==0 && year%100 !=0)||(year % 400 ==0)){
days[2]=29;
}
//通过循环累计之前的月份天数
for(index=0;index<month;index++){
sums += days[index];
}
//累计当月日期
sums+= day;
2.教学反思与总结
数组是学生在学习完基本数据类型后,所学习的第一个复杂类型数据结构。本方案巧妙利用数组连续存储数据及高效内存访问的特点,巧妙将一年的十二个月份的天数连续存储到了数组中,同时利用简单的循环语句,实现完成天数的累加,有效避免了类似if和switch语句中的多次判断问题,提高了程序的可读性和执行效率。通过本案例的学习,可以进一步加深学生对数组特性的理解,开阔今后使用数组的方法。
四、教学效果分析
本文所论述的“一题多解”教学策略笔者已经通过超星学习通平台对2023级计算机应用技术专业四个班级的大一新生进行了实践,效果反应良好。相比较与其他专业的学生,应用专业的学生有四个方面的明显变化:一是普遍觉得C语言没有别人所说的那么难学那么难以接受;二是课堂互动更加积极,愿意主动发言了;三是对程序设计产生了兴趣,开始自己动手编写程序了;四是通过小组合作,同学之间的关系更融洽了!
五、小结
同一问题的思考角度不同采用的方法策略也就不同。一题多解,就是启发和引导学生从不同的角度运用不同的方法解答同一问题的过程。通过对各种方法过程的思考比较,不仅能更好地理解和掌握C语言程序设计的基本知识和要领,还能在思考和比较中,加深对知识点的理解,拓宽思维面,为今后的学以致用打下基础。本课题以C语言程序设计课程为例,展示一题多解教学策略在高职“理实一体化”课程教学中的具体教学设计与实践,希望可以给其他老师在今后的C语言程序设计课堂教学中起到借鉴作用。
参考文献:
[1]武柳. 计算机C语言的课程教学实践 [J]. 集成电路应用, 2022, 39 (10): 160-161. DOI:10.19339/j.issn.1674-2583.2022.10.069
[2]张文慧. C语言中冒泡排序的课堂教学设计 [J]. 电脑知识与技术, 2020, 16 (32): 183-184. DOI:10.14004/j.cnki.ckt.2020.3528
[3]梁建华. 基于C语言的数据结构中排序算法的分析研究 [J]. 漯河职业技术学院学报, 2019, 18 (03): 32-34.
[4]李永华,辛建军. 基于OBE理念的C语言程序设计多元教学 [J]. 商洛学院学报, 2023, 37 (05): 77-83. DOI:10.13440/j.slxy.1674-0033.2023.05.011
[5]杨任尔,陆云龙,严迪群等. C语言课程育人功能挖掘的教学实践 [J]. 中国信息技术教育, 2022, (12): 94-96.