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

作者: 杨琦 张晓月 韩鑫

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

摘  要:针对传统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程序设计案例教学课程很好地解决了这一问题,通过制作迷宫小游戏这一贴近生活化的问题,老师有针对性地进行指导,以此提升学生对编程的兴趣。

经典小说推荐

杂志订阅