C程序设计课程案例教学内容研究与实践

2023-05-30 06:36杨琦张晓月韩鑫
高教学刊 2023年12期
关键词:搜索算法案例教学程序设计

杨琦 张晓月 韩鑫

摘  要:针对传统C语言课程案例教学内容不足的问题,分析开设C程序设计课程案例教学的重要意义,提出以实验为基础、以项目为导向的程序设计案例教学方案,并结合教学案例说明程序设计的案例教学效果。

关键词:程序设计;案例教学;EasyX库;A*算法;搜索算法

中图分类号:G642        文献标志码:A          文章编号:2096-000X(2023)12-0112-04

Abstract: In view of the shortcomings of traditional C programming teaching, this paper analyzes the significance of setting up C programming case teaching, and puts forward a experimental-based and project-oriented teaching scheme of C programming. Combined with the teaching cases, the teaching effect of programming is illustrated.

Keywords: programming; case teaching; EasyX; A* algorithm; search algorithm

C程序设计是计算机专业和一些非计算机专业(如数学、数理基科班等院系与专业)的重要基础。随着互联网技术和信息技术的发展,C程序设计对计算机应用的设计和实践工作起到非常重要的作用。C语言程序设计则是程序设计者的入门语言。C语言不仅可以帮助其学习其他的计算机语言,如JAVA语言、Python语言等,还能设计高级的应用软件,硬件对C语言的能力要求更高。目前很多高校都将C语言作为程序设計入门课程,但C语言标准中不包括有关图形界面等高级编程技术的内容,这在很大程度上限制了学生利用C编程解决问题的能力,使学生在学习完该课程之后,仅能编写控制台窗口的命令行程序。

EasyX是针对C/C++的图形库,可以帮助C语言初学者快速学习图形和游戏编程。比如,可以用VC+EasyX快速地用几何图形画一个迷宫背景,或者一个可以上下移动的小人,可以编写五子棋、捉放曹和飞行棋等小游戏,可以练习图形学的各种算法,等等。EasyX库与OpenGL相比,其学习成本低得多,非常适合本次的游戏开发。

一  设计C程序设计案例教学的意义

对于大学一年级的学生而言,在学习C语言基础之后,进一步利用C语言进行游戏开发,可以弥补C语言学习的短板,认知软件项目开发需要知识、技术和技能,并深刻理解数据结构与寻路算法在程序开发中的应用。

(一)  增加C语言教学内容

在C#、VB.NET和Java等语言中,图形界面设计都是编程的重要组成部分。将图形界面和图形图像两方面的编程技术统称为图形化编程。而一般的C语言程序设计课程中却不包含这部分内容,不能不说这是一种遗憾。本课程使用C语言和EasyX库相结合来完成游戏中动画的制作、图像的处理,弥补了C语言无图形化编程的遗憾。

(二)  认知软件项目开发需要知识、技术和技能

软件开发流程是软件设计思想和方法的一般过程。软件开发流程具体的实施步骤如下:先对软件进行需求分析,了解所要开发的软件的具体功能;然后对概要进行设计,如系统的基本处理流程等;其次,对算法、数据结构等进行详细的设计;再次,程序员对上述所描述的需求和设计进行编程实现,并对程序进行调试,以便最大地满足顾客的需求;最后还需要对软件进行维护、升级处理与报废处理。通过本课程迷宫游戏项目的训练,可使学生对软件开发有更深刻的理解。

(三)  数据结构与寻路算法在程序开发中的应用

本次课程要开发的游戏可以由玩家直接操作,也含有AI模块。AI模块中用得最多的是寻路算法,而本次游戏AI设计的基础就是高效找到最短路径。而AI的开发中寻路算法必不可少,本次项目主要利用A*搜索算法来搜索最短路径,这一算法在游戏AI的开发中被广泛应用,是一种常用的启发式算法,掌握此方法有助于今后的学习与开发。

二  优化C程序设计案例教学的方案

C语言程序设计课程案例教学主要讲授利用C语言进行迷宫游戏开发,学生需要具有一定的C语言基础。如果学生已经具备了较好的C语言基础,那么可以在后续课程中直接讲解与游戏开发相关的知识点,如背景的绘制、图像的显示、定时器、背景音乐的添加和A*搜索算法等内容。由于C语言的基础知识和游戏开发的知识点较多,若放入一门课程中,会使任务难以完成。本课程的案例教学方案是通过优化教学内容、加强实践训练和改善考核方法3个方面来提高学生软件开发的能力。

(一)  程序设计案例教学课程的时间安排

案例教学每期实训10天,共2周的时间,周六周日正常休息。每天的作息时间为上午8:30—11:30,下午1:00—4:00,每天共6个小时。

(二)  制定合适的教学内容

C程序设计案例教学课程给定一个迷宫游戏,该问题涉及矩阵和最短路径的寻路算法,学生以基础内容为模板,在此基础上灵活创新。该方案既锻炼学生的基本能力,又培养学生的创新思维能力。整个实践过程寓教于乐,学生学习兴趣很高。

由于C语言游戏开发所涉及的教学内容很多,在一门课程中很难完成全部教学内容的讲解工作,为此可以将C语言游戏开发分为两个部分。一部分是核心教学,包括利用EasyX库进行图形界面设计编程、图像显示、定时器编程、背景音乐添加编程和A*搜索算法设计;另一部分是灵活设置内容,包括C语言的数组、函数、指针和结构体及其他最短路径寻径算法的基本知识。基础内容是教学核心内容,是必选的教学内容;灵活内容是可选的模块,根据学生编程能力、专业需求等差异,选择适当的模块作为教学内容。在教学核心内容中,应重点讲解以下两方面的内容。

1  EasyX库

EasyX是针对C/C++的图形库,对于C语言的初学者而言,EasyX上手速度快,并且能在图形和游戏方面进行编程。例如,俄罗斯方块、迷宫等小游戏就可以利用VC+EasyX进行编写,通过编写这些游戏程序,也可以对图形中的相关算法进行练习。

本次游戏开发以VS2019为编译环境,相应的EasyX库为“EasyX库2019冬至版”,如果编译环境为VS2015以上版本,则需要下载其他版本。EasyX库的安装可以选择安装文件自动安装,若自动安装失败,则需要手动配置。

2  A*搜索算法

本次课程的重点在于利用C语言和EasyX库开发迷宫游戏,寻路算法必不可少,该游戏开发主要用到的是A*搜索算法。A*搜索算法是一种静态路网中求解最短路径最有效的直接搜索方法,能够解决很多搜索类的问题。该算法对距离的估算和实际距离值很接近,搜索速度也很快。该算法的公式表示为f(n)=g(n)+h(n),式中:f(n)指从初始节点经过n个节点到达目标节点的代价距离;g(n)指从初始节点到节点n的实际距离;h(n)指从节点n到目标节点的最佳路径的估计距离。

(三)  强化实验和工程训练

C语言作为一门程序设计课程不仅需要纯理论教学,也需要足够的上机练习。如果想达到更好的教学效果,需要将实践环节分成3个层次,即基础实验、项目重建和修改及最终考核。其中,基础实验是C语言课程学习的基本内容,需要在课程本身的实验学时内完成。这些实验涉及背景的绘制、图像显示、键盘的响应、定时器、添加背景音乐和A*搜索算法编程实现。

项目重建和修改是让学生基于教师的原程序,修改或扩展部分功能,增加一些新功能。学生需要独自完成项目的重建,这项实验难度偏中等。通过教师在课堂上讲解实验之后学生独自实现,并采用实验课答疑的方式完成疑难解答,通过这种模式的教学,学生可以熟悉整个小型软件开发过程,包括最初的模块设计、代码编写及代码的调试。

最终考核是以实战训练为主的实践环节,模仿实践软件开发过程,一般由3~4人一组,完成一个小型软件项目。本次C程序设计案例教学课程的最终考核是按小组设计完成一个迷宫游戏。每个小组可进行独特地创新,使迷宫游戏具有独特性。最终由每个小组选派代表进行PPT的讲解,展示本小组的作品成果,展示方式可以进行现场演示游戏或者录制视频。

(四)  改进课程考核方法

最终提交的游戏项目功能完整,项目演示无错误,代码书写规范。游戏必须完成模板给定的基本功能,此外还需要有自己的创新,例如添加新的关卡,不同的背景图、人物图和游戏方式等,最终考核成绩将根据基本功能的完成度与程序中的创新点给出。每一位学生的成绩将根据其完成的工作结合小组项目成绩给出。

程序设计课程的考核方式是平時成绩和最后考核的加权平均,其中平时成绩占30%,最后考核占70%。平时成绩包括日志书写、随堂作业和出勤率,这些考查主要用于督促学生的日常学习。

学生的最终评分是以小组为单位完成的,组长最终以PPT的形式向所有师生报告。每个小组的成绩由学生的网络成绩和教师的打分成绩综合评价,教师根据小组成员的表现和每个小组成员的背靠背贡献率,得到每个学生的实践成绩。在网络系统的帮助下,学生的评分过程可以很快完成。

综上所述,本课程的教学目的是培养学生基本的游戏开发能力,培养学生的创造性思维能力,提高学生的学习兴趣。这一目标应反映在评价的所有阶段。

三  C程序设计案例教学的效果

为了进一步完善人才培养体系,深化教学和课程体系改革,提高人才培养质量,加强实践教育,促进教育国际化进程,学校决定实施暑期C程序设计案例教学课程计划。该计划从2013年开始,对西安交通大学建立现代大学教学管理体系具有重大而深远的意义。经过八年的实践,取得了较好的教学成果,改革所带来的教学质量提升总体上可归纳为以下3点。

(一)  提高学生编写代码的能力

传统的C语言教学存在重视语法教学,计算思维和编程能力培养不到位、实验教学缺乏完善的步骤和量化指标、考核方式单一及学生的实验作业敷衍了事,甚至存在抄袭等一些问题。这些弊端使学生对C语言的学习兴趣不足,只懂语法,实践能力差。通过C程序设计案例教学的课程,既可以巩固C语言的基础知识,提高学生的编程能力,又可以培养学生的创新思维能力,提高学习兴趣。

(二)  加强学生软件模块化设计及算法设计能力

传统的C语言教学中的上机题目都是基于具体章节所设计的,对各章节知识点融合的上机题目少之又少;而且学生上机的题目代码量较少,对编程能力的提高促进作用较小。通过C程序设计的案例教学课程,让学生做迷宫游戏开发的项目,可以让学生灵活应用C语言的数组、函数、指针和结构等知识,对C语言语法有更深的理解,学生更容易写出结构模块化、流程合理的应用程序,编写的程序产生的错误也更少。通过对迷宫游戏的制作,对相关的算法如A*搜索算法也有了进一步的了解。

(三)  培养学生对C语言编程技术的兴趣

目前,学生接触到的计算机系统软件或应用软件大多具有美观、易用的用户界面,用C语言设计的程序界面单调,操作繁琐。比较二者,学生会有心理上的差距,对C语言不乐观。另一方面,掌握和应用C语言语法规则也是学生学习的主要障碍,当程序出错时,甚至要从整个程序中找出错误。在这种情况下,如果教师仍然采用传统的方式组织教学内容和教学,盲目地解释语法,不给出生动有趣的例子,学生将不可避免地失去对C语言学习的兴趣和信心。而C程序设计案例教学课程很好地解决了这一问题,通过制作迷宫小游戏这一贴近生活化的问题,老师有针对性地进行指导,以此提升学生对编程的兴趣。

根据对学生兴趣提升的调查结果,C程序设计案例教学课程提升了学生对编程的兴趣,配合EasyX库很容易制作出迷宫游戏漂亮的界面,插入好听的音乐,从而增强了学生的成就感。

四  课程实验结果及分析

通过该课程的学习,学生都能较好地完成自己的案例,开发出自己的游戏,部分学生在学习的基础上进行创新,制作出了很优秀的作品。下面以一组学生的实验作品为例来展示学生的学习情况。学生完成的项目是迷宫游戏。在实训课程中,学生将以团队的形式进行开发,开发过程模拟真实的开发环境,包括项目背景、需求分析、概要设计、详细设计、代码编写及软件测试。整个软件开发的流程全部进行一遍,每个学生都将参与到软件开发的过程中,有助于学生掌握项目分析的基本能力和具体的开发技术,培养团队开发能力。

有一组学生将游戏设置为三种模式:休闲模式、剧情模式和极限模式,以便给玩家带来更好的游戏体验。1)休闲模式难度较低,迷宫构成简单,大小也较小,适合玩家在空闲时休闲娱乐,游戏界面如图1所示。2)剧情模式难度中等,并且有故事情节,游戏开始之前,玩家还能选择自己喜欢的角色。玩家在游戏过程中,一步步去探索未知领域,少许的神秘感与紧张感更能引发玩家兴趣。3)极限模式,难度极高,迷宫图案错综复杂,面积更大,有自动寻路功能,还设有倒计时功能,每走一步还会加速时间流逝,这样严苛的条件,极具挑战性,带给高玩挑战极限的乐趣。自动寻路A*搜索算法示意图如图2所示。

这些作品都是学习了10天的非计算机专业的学生制作出的游戏。学生从一开始对编程感到畏惧,到后来在课下积极编程,显著提升了学生对程序设计的兴趣。这种教学方式为将来给非计算机专业的学生讲解程序设计提供了优秀的借鉴。

五  结束语

针对传统C语言教学中不包含图形界面等高级编程内容,仅能编写控制台窗口的命令行程序和学生利用C语言编程能力的训练不足等问题,开设C程序设计案例教学课程无疑是最好的选择。学生可通过对本次课程的实践,提高编写程序的能力、对软件的整体开发过程有一定的把握,并了解相关搜索算法,提高学生对编写程序的兴趣。目前已有1 800多名学生参加了这个课程实验,整体反映良好,学生对C程序设计课程的教学内容有较高的热情。

“案例讲解+案例改进+学生创作”的教学模式取得了非常大的成功,将游戏案例开发流程贯穿课程始终,可以有效提高学生的软件开发能力,解决传统C程序设计教学内容不足的问题,培养了学生创新创业能力。

参考文献:

[1] 乔亚男.基于积极注意力管理思想的在线环境教学设计[J].高教学刊,2021,7(28):106-108,113.

[2] 陳龙,崔舒宁,房琛琛.基于项目驱动的开放实验教学研究——以“Photoshop入门到提高”课程为例[J].工业和信息化教育,2020(5):43-47.

[3] 仇国巍,赵英良,卫颜俊,等.非计算机专业Qt程序设计教学探索与实践[J].计算机教育,2019(3):52-54.

[4] 杨琦.“VC++程序设计”课程教学内容研究与实践[J].计算机教育,2007(24):65-66.

[5] 乔亚男,程向前,谢涛.国内外大学计算机学科竞赛培训模式研究[J].高教学刊,2016(16):7-8,10.

[6] 刘建明,赵子岩,季翔.物联网技术在电力输配电系统中的研究与应用[J].物联网学报,2018,2(1):88-102.

[7] 高洪皓,刘安康,邹启明,等.面向软硬件融合的Arduino机械控制小车课程实践研究[J].计算机教育,2019(1):76-79.

[8] 杨振堃,胡春燕.基于Arduino的智能专业实践教学设计[J].计算机教育,2015(18):95-98.

[9] 王阳萍,李玉龙,王文润,等.基于Arduino的虚拟现实交互系统实验案例设计[J].计算机教育,2018(4):16-19.

[10] 王刚,李颖,徐谦.面向无人驾驶应用的人工智能创新实验设计[J].计算机教育,2019(2):15-18.

[11] 嵩天,黄天羽.Python语言程序设计教学案例新思维[J].计算机教育,2017(12):11-14,19.

[12] 杨焱超,饶文碧,石兵,等.基于企业级实验教学的Java混合教学模式与教学内容改革[J].计算机教育,2021(6):167-170.

[13] 赵鲁杭,霍朝霞,邹玲,等.基于教学大纲的线上实验教学资源体系建设、教学实践及思考[J].实验技术与管理,2021,38(6):226-229.

[14] 教育部高等学校大学计算机课程教学指导委员会.大学计算机基础课程教学基本要求[M].北京:高等教育出版社,2017.

[15] 乔亚男,李波,谢涛.基于电子教具的大学计算机基础混合式教学研究[J].工业和信息化教育,2016(11):32-36.

基金项目:2020年教育部第一批产学合作协同育人项目“基于云端财务数据分析实验基地建设”(202002159042);2019年教育部第一批产学合作协同育人项目“校企融合计算机专业创新人才培养模式研究与探索”(201901263025)

第一作者简介:杨琦(1968-),男,汉族,陕西三原人,硕士,高级工程师。研究方向为图像处理,人工智能,信息系统。

猜你喜欢
搜索算法案例教学程序设计
改进的和声搜索算法求解凸二次规划及线性规划
基于Visual Studio Code的C语言程序设计实践教学探索
从细节入手,谈PLC程序设计技巧
高职高专院校C语言程序设计教学改革探索
案例教学在机械创新设计课程中的应用
马克思主义基本原理概论课案例教学的几点思考
EXCEL在《投入产出法》案例教学中的应用
《运筹学》教学模式探讨
基于汽车接力的潮流转移快速搜索算法
PLC梯形图程序设计技巧及应用