基于模块化的C 语言课程线上线下混合式教学探讨*

2023-09-07 09:43吕雅丽朱红磊许玉龙
中国教育技术装备 2023年6期
关键词:数组例子指针

吕雅丽 朱红磊 许玉龙

河南中医药大学信息技术学院 郑州 450046

0 引言

C 语言课程是计算机及其相关专业的专业基础课,它综合了利用计算思维和编程工具解决实际问题所需的基本方法和编程技能[1-2]。该课程主要介绍C 语言编程技术,其重点内容是C 语言程序基本结构和基本语法,包括数据类型、选择结构、循环结构、函数、数组、结构、枚举、指针等内容。为后续专业课程的学习打下编程基础。该课程一般安排在大学一年级上学期开设,即本科院校学生进入大学的第一学期。所以这门课程的教学还有一个重要的任务就是转变学生的学习方法和学习理念,使学生适应大学的学习生活。课程教学有待将以往的线上线下融合、以学生为中心的混合教学模式进行相应调整[3],在引导学生掌握程序设计的基础上,培养学生的综合能力,实现育人育心的目标[4]。本研究分析C 语言程序设计课程教与学的现状,探索基于模块化的线上线下混合式教学模式,并在教学中进行实践,有效地促进了课程的教学效果和教学目标的实现。

1 C 语言课程教与学的现状

C 语言课程通常开设在学生进入大学的第一学期,旨在培养学生的程序设计能力和计算思维能力。这个阶段,学生刚步入大学,学生学习的方法和理念还停留在中学时代听讲、做题的模式。但大学的学习模式是听讲、自学、实践、应用的模式,学习过程需要很大的学习主动性并具有很大的挑战性。C 语言程序设计课程的学习就是典型的大学学习模式。学生在学习方法和学习思路还没有转变的情况下,普遍会觉得该课程难学。总结多年的教学经验,该课程在教与学的过程中主要存在以下问题。

1.1 课程内容抽象

编程技术是问题描述—问题解决—测试这一操作过程的实现。这一实现过程不同于用汉语或者英语等自然语言描述问题,而是要用计算机语言去表达、去实现。这种新的表达方式对于初学者来说是抽象的。就像一直用中文交流的人,突然要求他们学习法语表述,初次接触时肯定都会觉得难。但任何一门语言都有各自的规则和规律,掌握了规则和规律就能轻松运用。编程语言也是一样,掌握其语法规则和实现方式,按照这些规则去写、去用,就不会觉得过于抽象。这就要求教师在教学中尽量把抽象的内容形象化,转换成简单易懂的图或者动画。

1.2 学生存在畏难心理

学生在接触新的、抽象的内容时,第一感觉就是难,加上C 语言课程的学习模式、思维方式与学生已有的学习方法不同,学习过程中,“难”这种思想一直存在于学生的大脑中。可是,C 语言程序设计真的难吗?学通的学生会觉得很简单,因为C语言程序设计语法规则少,表述也简单,整体课程内容也不多。学生在刚开始学习的过程中不要过于纠结各种为什么,先模仿着例子来写,再照着例子来改,之后就会脱离例子自己编写。看得多了、写得多了,原理自然就明白了,语法可掌握。所以,学生初学时不要过于纠结原理,重点在仿写,在练习的过程中理解、掌握原理。

1.3 学生学习目标定位不明确

学生在学习过程中容易急于求成。他们在现实生活中看到各种各样的软件,觉得自己学习了编程就应该会编写类似这样的软件。他们没有认清专业的培养计划和该门课程的学习目标。C 语言程序设计课程是学习编程基础,掌握编程的基本技巧,为后续计算机专业课程的学习打下坚实的基础。软件开发技术不是一门课的任务,是专业培养的任务,后期有多门相关课程的学习,可以使学生逐步掌握软件开发能力。学生在C 语言程序设计课程的学习中要明确学习目标,踏踏实实地做好基础学习和练习。

2 模块化的线上线下混合式教学设计

2.1 教学环节设计

整个教学环节分成三步:课前、课中、课后。线上和线下相结合,理论和实训相结合。

2.1.1 课前:线上自学

教师通过视频、文档等形式给出前期知识总结、当前知识的问题导入。学生通过在线观看视频和文档做到复习和预习。学生也可以通过一些公共的线上课程进行自学。

2.1.2 课中:线下课堂教学

课堂上教师通过对知识进行解析、关键操作进行演示、阶段性归纳总结等方式,使学生尽快掌握新的知识和技巧。课堂上也将完成小组汇报和阶段性测试工作。

2.1.3 课下:线上或线下练习实训

教师给出实训题目,学生通过闯关方式来完成实训。实训题目完成情况作为平时作业考核的主要依据,同时课下学生对相关问题的讨论和总结也将作为小组讨论考核的依据。

2.2 教学模块设计

将整个课程分为以下几个模块进行教学设计。

2.2.1 编程基础

编程基础主要是让学生认识程序、认识程序的功能,着手开始编写代码。这一模块将涉及基本的输入输出语句、数据类型、表达式、程序结构等内容。课前预习,这一模块提供输出“Hello World!”的程序运行视频和不同符号形成一个爱心的程序运行视频,同时,通过文档提供完整代码。学生通过观看视频和查看代码体会程序功能。有兴趣的学生还可以把原始代码复制到编译器中进行运行甚至修改。这一课前预习可以很好地吸引学生的学习兴趣。这一模块的教学过程将贯穿几个简单例子的实现。第一个例子就是输出“Hello World”。通过对这个例子的解析,讲授C 语言中输出语句的使用。第二个例子是“求华氏温度对应的摄氏温度”,讲授C 语言中的变量、常量、数据类型、表达式等基本语法。第三个例子为“分段计算水费”。这个例子用到输入和简单的分支。结合课堂内容设置课下练习和闯关实训。这一模块可以设置这几个问题:输出“Hello World”、输出图形、求三个数的最大值等,对C 语言的基本语法进行巩固和练习。

2.2.2 流程控制语句

流程控制语句模块主要学习分支语句和循环语句。这一模块内容较多,是该门课程的学习重点。选择语句的讲授课前提供“猜数游戏”的程序运行视频和代码。课堂教学主要通过例子“判断奇偶数”“输入表达式输出运算结果”“百分制成绩与五分制成绩转换”等实现。多个例子都是分别用if 和switch 两种语句实现。讲授这些例子的同时,需要讲授逻辑运算符和逻辑表达式的使用。这一模块的实训练习是“闰年判断”“分段函数问题”“学生成绩等级换算”等。循环语句的内容比较多,相对来说有一定难度。课前提供“用格雷戈里公式求π 的近似值”的例子视频和源代码。课堂教学主要通过例子:“统计整数位数”“判断素数”“求1!+2!+…+100!”等。同时,将用到跳转语句和循环嵌套。循环嵌套的例子要给出多种变型,让学生透彻理解。课后闯关练习“小球自由落体运动”“最大公约数和最小公倍数”“字符串中各类字符数的统计”“求水仙花数”等。这些内容的学习中学生会开始感觉到编程的难度,要加强引导。对一些有代表性和有难度的闯关练习需要利用课堂时间进行解析。

2.2.3 函数

函数是编程中的难点,语法结构容易理解但使用较难掌握。这一模块在讲授过程中尽量多用之前讲过的例子。把之前的例子用函数实现,在应用程序中调用,使学生在学习的过程中把注意力放在函数的使用,而不是问题的解决上。课前,给出“输出不同规模图形”例子,让学生体会到函数的作用。课中通过“求圆柱体体积”“判断奇偶数”“使用格里高利公式求π 的近似值”“求素数”等例子进行讲授。重点是函数的定义、函数的返回值、函数的参数等内容。课后闯关练习“编写函数求表达式的值”“阶乘数列”“公约公倍数”“数值交换”等。学生通过这一模块的学习,一方面学到了函数的使用,另一方面可以对前期知识进行巩固。

2.2.4 数组

数组是编程中经常使用的数据结构,也是程序设计学习的重点。C 语言程序设计主要学习一维数组和二维数组的使用。课前提供“求一组数据最大值”的案例视频和源代码,学生在预习的过程中可以尝试着修改代码来求解最小值和平均值。课堂教学选用例子“顺序查找法”“求得最小值并实现交换(排序的步骤)”“投票统计”“输出矩阵”等,让学生体会使用数组的好处,理解数组的特点和使用规则。数组的使用是和循环分不开的,这一模块学习也将对循环语句的使用加深印象。课下实训练习主要有“排序问题”“二分查找”“删除最大值”“杨辉三角”等,对一维数组、二维数组进行学习巩固。

2.2.5 指针

指针是C 语言程序设计的难点,需要理解变量、内存单元与地址的关系。这一模块需要学生掌握指针概念、指针变量的定义和指针的基本操作。课前,给学生提供“密码开锁问题”的案例视频和源代码,学生在预习时理解指针的原理。课堂教学中,通过案例“角色互换”让学生理解使用指针的必要性,然后通过“求解日期”“冒泡排序”等案例讲授指针作为函数参数的应用,这里还会用到数组的案例。课后实训练习“用指针法输入12 个整数,然后按每行4 个数输出”“指针变量作为函数参数实现两变量交换值”“报数”,从而让学生掌握指针的使用。

2.2.6 结构

结构的定义和使用对于C 语言编程很重要。需要学生理解结构与数组的区别、使用结构的意义、结构的定义、结构的使用、结构指针、结构数组等内容。课前,提供给学生“求班级学生总分最高分”的案例视频和源代码。这一模块讲授内容以学生成绩管理为主线。课堂讲授时,给出不用结构的方法和使用结构的方法,先让学生理解结构的作用和必要性,然后给出对学生按成绩进行排序、对学生成绩进行修改等操作说明,让学生对结构进一步理解和掌握。课后实训是学生成绩管理系统的简单实现,能够让学生加强对结构的掌握,也能够让学生对整个课程进行总结和复习。最后一个题目也可以作为课程设计的内容让学生完成一个相对完整全面的案例。

基于模块化的教学过程线上线下相结合,理论与实训相结合,内容前后贯通,整个课程的教学贯穿着平时考核的各个环节。

3 线上线下混合式考核方式

本课程考核分为两个部分,形成性考核和终结性考核,其中形成性考核成绩占总成绩的60%,终结性考核成绩占总成绩的40%。形成性考核分为平时作业、阶段性测试、小组讨论、小组汇报四个部分,平时作业成绩占形成性成绩的30%,阶段性测试成绩占形成性成绩的30%,小组讨论成绩占形成性成绩的20%,小组汇报成绩占形成性成绩的20%。终结性考核试卷卷面100 分,学生最终得分为卷面分值×0.4+形成性考核分值×0.6。

终结性考核可以通过在线考试平台或者纸质试卷考试。平时作业根据课程内容,布置实训作业,由学生课后完成。根据学生完成作业的次数和质量评分。小组汇报通过教师布置题目,学生根据对题目内容的认识和理解,进行汇报讲解,根据学生分析汇报情况、完成度和质量评分。小组讨论通过学生分组共同学习后派选展示研讨观点,教师评分作为该小组成员得分。阶段性测试,即平时进行阶段性检测,考核成绩平均分即为阶段性检测成绩。

4 结束语

C 语言课程内容相对抽象,初学编程的学生往往觉得难度大。合理设计课前、课中、课后三个教学环节,理论内容和实训内容相结合,线上资源和线下教学相结合,同时设计合理的考核方式,可以有效地激发学生对课程的学习兴趣,从而提高课程的教学效果。

猜你喜欢
数组例子指针
JAVA稀疏矩阵算法
JAVA玩转数学之二维数组排序
《团圆之后》:“戏改”的“一个鲜明的例子”
初中英语课堂妙用“举例子”
为什么表的指针都按照顺时针方向转动
Excel数组公式在林业多条件求和中的应用
用通俗的例子打比方
缩宫素联合米索前列醇防治90例子宫收缩乏力性产后出血临床观察
寻找勾股数组的历程
基于改进Hough变换和BP网络的指针仪表识别