应用型高校C++程序设计课程的教学改革与实践

作者: 罗京涛 葛怡晴 张艳丽

应用型高校C++程序设计课程的教学改革与实践0

摘要:C++程序设计作为计算机专业的核心课程,已开设近20年。然而,随着时代的发展,现行教学模式面临教材陈旧、实践不足、应试导向及教学方法单一等问题,削弱了学生的编程技能。为应对这些挑战,文章提出了一系列综合改革措施,包括课前预习与课后训练、延长课时与实践结合、项目驱动教学、自主练习与奖励机制、多渠道交流及考核方式改革。这些措施旨在提升学生的实践能力、激发学习兴趣,并全面评估学习成效,从而培养其逻辑思维和编程能力。

关键词:C++程序设计;教学改革;实践教学;项目驱动;在线练习平台;评估方式

中图分类号:G642 文献标识码:A

文章编号:1009-3044(2025)01-0149-03 开放科学(资源服务) 标识码(OSID) :

0 引言

C++是一种功能强大的编程语言,是全球最受欢迎且易于学习的语言之一。C++面向对象程序设计(以下简称C++程序设计) 早已被我国众多大学引入,现已成为计算机专业的必修基础课程,甚至一些非计算机专业的学生也选择学习该课程。该课程的前导课程是C语言程序设计,C语言是一种面向过程的编程语言。从C语言到C++的过渡,标志着学生从面向过程思维向面向对象思维的跨越[1]。尽管各高校在课时安排上有所不同,但C++程序设计的教学内容大体相似,具体内容见表1,这些内容构成了学生深入编程世界的基石。

C++作为一种功能强大的编程语言,在软件开发、游戏设计、系统编程等领域得到了广泛的应用。然而,传统的教学方法往往过于理论化,忽视了实践环节,这导致学生在实际操作中遇到困难。因此,改革C++程序设计的教学模式变得迫在眉睫。尽管如此,开设C++程序设计这门课程的目的并不是要求学生将来必须从事C++相关的工作,而是旨在培养学生逻辑思维能力和代码编写能力。在学习这门课程之前,几乎所有的学生都尚未完全脱离高中的知识体系,他们对计算机的认识还停留在较为浅层的操作阶段,对未来的学习方向感到迷茫。这门课程可以通过最基础的内容,作为高中知识与大学知识之间的桥梁。

1 当前课程教学存在的问题

1.1 教学资源陈旧

编程语言更新迅速,C++亦然。当前,许多大学使用的教材多为多年以前出版,部分教材自课程开设以来未曾更换。这些教材教授的语法已显陈旧,部分特性在现行编译器上无法通过。此外,大多数计算机实验室仍使用1998 年推出的Microsoft Visual C++ 6.0(VC6.0) 编译器,无法支持C++自1998年以来引入的新特性。尽管有些学生通过其他途径了解了新特性,但在VC6.0上无法编译,增加了学习的困惑。

许多企业现在对于实习生的培训非常头疼,因为他们在大学中学习的知识远远达不到企业的要求[2]。尽管一些大学生的基础知识非常扎实,但他们所掌握的许多知识实际上已经是IT企业所淘汰的过时内容。例如,C++程序设计这门课程,由于教学资源长期未更新,自然成为其中的一个典型例子

1.2 侧重理论教学,实践较少

C++程序设计课程具有较强的实践性,因此需要充足的实训时间。然而,现行课程主要采用理论教学,实践教学学时严重不足,学生上机实践机会有限。这导致学生的实践能力得不到充分锻炼,编程时常出现眼高手低、不敢下手及创新性低等问题[3]。理论教学通常在教室内进行,教师在讲台上讲授知识并演示程序。冗长的课时中,教师大量地灌输理论知识,但过量的理论和缺乏实践机会使学生对编程失去兴趣,认为编程枯燥乏味,缺乏成就感。上机实验课通常安排在理论课之后,由于时间间隔较长,许多学生已忘记理论内容。此外,上机实验课时间较短且任务明确,如果在任何环节出现知识漏洞,学生可能无法完成任务,导致编写代码能力无法有效提升。

1.3 以应试为目的的教学

C++程序设计应是一门实践性非常强的课程,但在大学课程设置中与其他课程无显著区别。课程评分中,理论考试仍占主导,超过平时成绩和实践成绩的总和[4]。应试教育模式仅培养学生应对考试的能力,无法提供深入理解,严重限制了综合能力的发展。此外,应试教育使学生过分关注细节,忽视实践技能和创新精神的培养。最终,这种教育方式导致学生对学习持被动态度,缺乏兴趣,不利于长期学习发展。到学期末,尽管大多数学生通过了课程,甚至有人获得满分,但能够编写出可运行代码的学生却寥寥无几。

有些学生常靠死记硬背应对考试,临时抱佛脚现象普遍。他们平时学习投入不足,却能通过考前突击,靠老师划重点取得不错分数。但这种短期记忆在实际应用中常显不足,如解决中等难度题目或解释代码时,能应对者较少。这既是应试教育弊端,也让人质疑学生的学习能力和知识深度。真正的学习应重理解和运用,非应付考试。

1.4 教学方法枯燥无味

传统教学方法往往侧重语法知识点的灌输。这种方式因内容枯燥、难以理解,导致学生学习兴趣普遍不高[5]。此外,教学方法与实际应用脱节,使学生在学习过程中感到困惑和厌倦。课堂上,学生兴趣低迷,注意力不集中,积极性不足。单调的听讲和机械练习难以让学生真正投入,缺乏互动和实践抑制了好奇心和探索精神。这导致学生仅能表面理解知识,无法内化为能力。长期如此,学生可能对学习产生消极情绪,影响学习效果和未来发展。

2 结合练习系统的改革措施

2.1 课前最新资料预习与课后精准训练

课前预习是确保学生紧跟教师授课节奏的关键环节。通过预习,学生能够提前熟悉课程内容,掌握知识要点,明确学习方向,并在此过程中发现自身不足,以便在课堂上进行针对性提问。鉴于IT行业的快速迭代,作为核心基础课程的C++程序设计内容更新迅速。因此,教师每次授课前须深入查阅资料,确保预习资料反映最新知识动态,并及时发送给学生。此外,教师应设置与预习内容紧密相关的预习题,通过学生解答情况反馈,精准掌握预习效果,从而适时调整课程计划。课后,教师需在学习通等平台上传本节课的录制视频,帮助学生弥补上课时遗漏的内容并进行课下复习。高校可自主研发在线教学辅助平台,如河北工程大学信息与电气工程学院计算机科学与技术系的Exercise to Exam (E2E)平台。该平台包括学生、教师和管理员三个系统(见图1) 。教师可在E2E 平台上布置与当堂课程相关的练习题,并设定作业提交截止时间。若超时提交一天,将扣除2分,以鼓励学生及时巩固所学知识。此外,练习表现优异的学生可获得加分奖励和小礼品,以激发学习动力。

2.2 延长课时,放缓节奏,边讲边练,强化实践

C++程序设计课程内容丰富,但课时紧张始终是学生面临的一大挑战。在传统教学模式下,教师为完成教学进度,常采用填鸭式教学方法,导致学生难以完全吸收和理解知识。一旦遇到问题,学生往往难以找到解决办法,影响后续学习。例如,类与对象是课程中的基础且核心概念,而多态性是面向对象编程中更高级的特性。这两个概念通常被认为是学生难以掌握的难点,易造成混淆。为解决这些问题,建议允许学生在课堂上使用电脑,增加课时,放慢教学节奏,并以幽默且高效的方式吸引学生注意力,确保其专注于课堂。在讲解每个知识点后,应立即安排练习时间,帮助学生及时消化所学知识,并解答其疑问。

2.3 项目驱动教学,深化理解,以赛促练

当前《C++程序设计》教材中的编程练习多集中在数值计算,难度较低,无法充分锻炼学生的编程技能。因此,建议教师在每个章节末设计小型项目,将所学知识点串联起来。例如,实现一个图书管理系统或教务管理系统的部分功能,代码量控制在数百行以内。期末考核应以大型项目为主,覆盖所有课程知识点,通过项目实践加深学生对C++程序设计的理解。例如,学生通过项目实践,直观感受数组与链表在访问速度上的差异,深入理解数据结构的选择及其应用场景。采用项目驱动教学方法不仅提升学生的编程能力,还能激发其学习兴趣,减少被动学习。同时,定期举办C++程序设计算法竞赛,将参赛表现纳入平时成绩,提高学生参与竞赛的积极性,激发其探索能力,并为大学生竞赛提供知识储备和支持。

2.4 自主练习与奖励机制结合

针对学生进度两极分化的问题,教师应充分利用在线练习平台,如E2E和Programming Teaching Assis⁃tant(PTA) ,为每节课精心设计练习题,并将其与平时成绩相结合。学生通过提交代码,能够获得即时反馈,包括输出错误和运行时错误,帮助其自我修正。教师可以通过后台监控学生的练习情况,并根据需要及时调整教学计划。此外,应建立自主练习奖励机制,给予积极参与练习并表现出色的学生分数奖励,以激发学习积极性,缩小班级内部差距

2.5 开设多渠道交流,促进知识共享

C++程序设计的学习过程受益于积极的交流与讨论。教师应建立多种交流渠道,如班级微信群、QQ群和学习通平台,鼓励学生分享学习经验、心得及提出疑问。通过这种互动,学生能够相互借鉴学习方法,实现知识互补,迅速解决学习中的难题。教师亦应定期参与讨论,为学生解答疑惑,指导其深入思考,营造积极向上的学习环境。此外,组织线上或线下的学习小组,通过团队合作完成项目,进一步提升学生的编程技能和团队协作能力。

2.6 考核方式的改变

为了全面和客观地评估学生的学习成效,除了传统的笔试和编程测试外,引入了课堂测验、项目作业、E2E平台课下作业及在线编程竞赛等多种评价方式。这些方式旨在全面考查学生的理论知识、编程技能、团队合作及问题解决能力。考核重视学生在学习过程中的表现,包括课堂参与度、预习任务完成情况及课后练习提交质量,并将这些因素纳入最终成绩评定。各部分占比分布见图2。

3 改革措施实施

3.1 课前准备工作

教师在授课前应深入研究并掌握“面向对象编程”相关知识点的最新进展。例如,若C++标准新增了智能指针的扩展应用或范围for循环在特定情境下的性能提升,教师应主动搜集相关资料,并将这些新特性整合到预习资料中,提前提供给学生。随后,教师应布置预习任务,通过设计一系列预习题目(包括选择题、编程题、主观题和流程图题) 评估学生的预习成效。预习题目可能包括“掌握智能指针以管理动态内存”和“运用范围for循环遍历容器”等编程题。如果通过预习题反馈发现,学生在“智能指针的恰当使用”方面表现良好,但在“范围for循环的边界条件处理”方面正确率较低,且错误集中在迭代变量的作用域管理上,教师则需调整教学方案,增加对这些知识点的课堂讲解时间,并安排更多实践练习以加深理解。

3.2 授课

在课堂上,教师应重点阐释学生预习时反馈的不足之处,并针对常见错误设计专门练习。当讲解可能造成学生困惑的知识点,如“多态性中虚函数的工作机制”或“拷贝构造函数与赋值运算符重载的差异”时,教师应安排时间让学生亲自编写代码进行实践。例如,通过构建一个简单的类继承结构,学生可以观察虚函数在不同对象间的调用行为,直观理解多态性的实现原理。这种方法有效防止学生在概念不清晰的情况下继续学习后续内容,确保每一步学习都坚实可靠。此外,教师应在课堂上录制课程视频,并上传至学习通班级资料库,作为学生的视频学习和复习资源。同时,每周可在E2E平台安排40分钟的闭卷小测验,包括选择题和编程题(见图3) ,并按照期末考试标准进行监考,以检验学生的学习情况。对于在此阶段学习中遇到困难的学生,教师可在课堂上给予特别关注,有助于实现广泛的教育目标和培养策略。

3.3 课后练习与辅导

课后,教师应设计练习题,以加深学生对知识点的理解与应用,并要求学生提交解题思路的流程图,以评估其掌握情况。表现优秀的学生将获得额外的分数奖励。此外,教师应设定讨论时段,鼓励学生分享解题思路和面临的挑战。在讨论中,教师将引导并激励学生,对于活跃且贡献突出的学生,也将给予分数奖励,以激发其参与热情和团队精神。

4 结束语

在C++教学过程中,不能像对待其他传统课程那样,仅侧重理论知识的灌输。应从学生兴趣出发,将动手实践作为主要教学方式,理论教学作为辅助。C++程序设计作为计算机专业的核心课程,其目的不仅是教会学生编写C++代码,更重要的是引导学生进入新的学习领域,为后续学习及职业生涯打下坚实基础。这些教学改革不仅能激发学生的学习兴趣和主动性,还为其未来职业发展奠定基础。教育工作者需持续关注行业发展趋势,灵活调整教学方法,以适应技术环境的快速变化。只有这样,才能培养出符合时代需求的高素质计算机专业人才,为信息技术的发展作出贡献。

参考文献:

[1] 贾金芳.C++程序设计课程实验教学改革与探索[J].电脑知识与技术,2024,20(8):146-148,164.

[2] 佘利彬.信息化背景下计算机教育的改革与创新[J].知识文库,2020(10):131,133.

[3] 孙倩,张广梅.C++程序设计教学改革实践[J].教育现代化,2020,7(56):88-90,122.

[4] 蒋正锋.应用型高校C语言程序设计课程教学改革研究[J]. 教育教学论坛,2020(41):167-168.

[5] 刘其永.基于启发式的C++程序设计教学改革实践探析[J]. 电脑知识与技术,2024,20(23):161-162,170.

【通联编辑:王 力】

基金项目:河北省高等教育教学改革研究与实践项目(2021GJJG245) ,项目名称:一流本科专业建设背景下产教融合实践教学机制研究与实践

上一篇 点击页面呼出菜单 下一篇