“C语言程序设计”与计算机相关课程的融合教学与实践

时间:2022-09-30 09:06:15

“C语言程序设计”与计算机相关课程的融合教学与实践

摘要:从计算机专业课程体系角度出发,结合高校高级程序设计语言的现状和本校计算机与通信工程学院“卓越工程师计划”的实施,以及在本校计算机与通信工程学院和软件学院对本课程体系结构进行的改革创新,提出C语言与计算机相关课程的融合教学和融合实践理念。经过4年的检验与论证,新的融合教学和融合实践两个环节都取得非常好的效果,加强计算机各课程之间的联系,对培养学生的自学与综合能力有积极作用。

关键词:C语言;课程体系;融合教学;融合实践;卓越工程师计划;ACM/ICPC

C语言程序设计既是高等学校一门重要的公共基础课程,也是计算机专业的一门专业基础课。由于逻辑性和实践性强,使该课程的教学和实践存在一些误区,主要表现如下。

1) 学生不清楚本专业的特点。多数高校将本课程安排在大一的第一学期,由于对于本专业的课程体系了解不够,导致新生对各专业特点混淆不清,有的学生去报考计算机等级考试,结果有的还不如非计算机专业的学生,致使一些学生学习消沉。我们通过和学生谈心,得知不只是大一有这种现象,大二的学生甚至也存在这种心理[1]。

2) 学生学习本课程目的不明确,兴趣不高。在教学中,有不少学生问,既然C#和Java是现在的主流编程语言,为什么还要让我们学习C语言?所以我们在第一堂课介绍计算机语言发展时,将C语言和其他语言作比较,强调C语言是当前程序员共同的语言,它使程序员互相沟通,比流行语言都更接近机器。C语言更适合解决某些小型程序的编程,在编写底层的设备驱动程序和内嵌应用程序时,往往是更好的选择。有了C的基础,在需要时进一步学习其他语言,也是很容易过渡的。当然,第一堂课上,我们把重点放在培养学生的兴趣上,所以会用1个学时去展示历年实训的优秀作品,这些作品都是完整的系统,除了包涵基础知识,还有高级技术。我们向学生灌输学习这门课程的境界:Beginner―Advanced―Professional。

3) 任课教师对课程的定位、理解和把握不够。老师只有有一桶水,才能教给学生一碗水,教得了学生不等于教得好学生,学生的评教正说明了此问题。

通过实践,我们对计算机专业本课程教师的要求是:“复合型”的教师――既要精通这门课程,还要有3年以上实际项目开发经验,并且非常熟悉计算机其他学科的知识,而“教师的成功在于培养出值得自己崇拜的人[2]”。

因此,我们对本课程的定位是,以程序设计为中心,掌握语法,了解算法,重在算法的实现――编程。算法是灵魂,语法是基础,编程是中心。处理好三者的关系,直接决定了教学的成败。

算法尽管重要,但本课程不是算法设计课程,不可能过多地介绍算法,更不是在研究算法。我们要在学生学习编程的过程中,介绍相关的典型算法,引导学生面对问题去思考如何构造算法,编写程序的过程本身就是设计算法的过程。

为此,我们对本课程体系进行了改革,并将本课程与计算机其他学科进行了融合教学与实践,取得了非常好的效果。

1课程体系的改革

1) 修改教学环节。

我们把原计划一学期的教学时间调整为一学年。第一学期进行C语言程序设计基础的教学,第二学期进行C语言程序设计的进阶教学,在学年末进行该门课的实训,接着的暑假进行校外实习。根据不同专业,我们还开了小学期,在小学期里有连续12周的实验环节。

2) 修订培养计划和大纲,改革考核方式。

我们把本课程的教学改革与本学院的“卓越工程师计划”相结合,组织教师外出考察、研讨,然后重新修订了培养计划、教学大纲、实验大纲、实训大纲、实纲。相应地,考核方式也作了调整:基础教学由笔试转向机试,试题难度高于非计算机专业的等级考试,每次考试的题库都将重新命题和审阅。进阶教学由考试转向完成3 000行以上大作业形式的考查,实训由过去的全班一个模拟题目转向提供多个实际验收签定过的项目,进行C版本的再次开发,实习由过去的只是到实习基地参观调整为直接进企业拜师跟班学习。

3) 丰富配套的教学资源。

我校组织编写了《C语言程序设计基础及进阶教程》,被评为“十一五”部级规划教材,已于2010年由清华大学出版社出版发行。我们还配套编印了上机实验的实践教程(将在今年教材的第二版时一并出版),以及实训时的实训教材和实习的实习教程,并建设了精品课程在线学习平台,供师生讨论和交流。制作了与教材配套的课件与教案,供教学参考。

我们专门搭建了学校ACM/ICPC在线测评平台,并组建了容纳120人的竞赛专用机房,成立了ACM/ICPC竞赛班。2008年起,河南省计算机学会主办一年一次的河南省大学生程序设计竞赛,我们每年都组队参加,在过去的三届竞赛上,共获得4枚金奖、2枚银奖、1枚铜奖。2009年参加亚洲区赛现场赛获得优秀奖。2010年参加第35届亚洲区赛,通过预赛,获得天津赛区、杭州赛区和成都赛区的决赛资格,并在成都赛区获得1枚铜牌,排名第59名,是河南省该项赛事最好成绩,为学校争得了荣誉。在学校内部,我们从2009年开始每年组织两次全校程序设计竞赛,至今已经主办了四次校级竞赛。

4) 转变教学理念。

我们提出了C语言与计算机相关课程的融合教学与实践的教学理念。

5) 采用新的教学方法。

在课堂教学中,我们使用任务驱动、课堂讨论、3W1H教学法、现场编程教学法、课堂陷阱教学法、任务分解教学法、任务贯穿教学法、分散集中教学法、两段教学法、实训优秀作品展示激励法、融合教学法等多种教学法,在课外使用网上在线讨论与答疑、竞赛辅导拨高法、课题组观摩讨论法。我们打破大学考试试卷不评讲的一贯做法,在第二学期的进阶课程第一堂课评讲上学期期末试卷[3]。

(1)3W1H教学法。即:What――解决什么问题,Why――通过实际生活例子引入为什么要解决这个问题,Where――在什么条件下能够解决,How――如何运用学到的方法、技术来解决问题。

(2) 现场编程教学法。在讲授有代码编写的理论课时,当一个理论知识介绍完后,教师出一个难易程度适当且有代表性的题目,让学生随堂写代码,并抽学生到黑板上写,或者抽几份学生作业当场点评。

(3) 课堂陷阱教学法。在期中检查座谈会上,有的老教师说学生很难发现自己程序的错误,而课堂上即使是老师手下的一个笔误,学生也能发现并喊错了。我们正是可以利用学生这种“容许自己范错,不许老师失误”的习惯,对于学生书写代码时容易出错,或者上机碰到的共性问题,我们在课堂上演示时设下陷阱,故意把代码写错,有的学生当时就能发现,而有的学生在编译时才发现有错,我们用自己的错误来吸引学生注意力,加深学生的印象。

(4) 课题组观摩讨论法。我们组织本课题组教师每两周进行一次教学观摩讨论,取长补短,相互学习,推广好的教学方法。

(5) 实训优秀作品展示激励法。我们在第一学期基础课程的第一堂课上展示往届的优秀实训作品,让学生觉得既好奇又深奥,极大地激励了学生的兴趣。临到毕业,大部分学生还能对这堂课记忆犹新。

2与计算机相关课程的融合教学

通过近5年的实践与总结,我们认为如果把C语言程序设计与计算机相关课程进行融合教学,必将促进学生对该门课程的理解,同时凝聚专业特色,促进其他课程的学习,对于学生的自学与综合能力的培养都有积极的作用。

1) 与数据结构融合。

在讲到C语言中的基本数据类型与构造类型时,围绕数据结构的一条主线――四种结构两种存储,联系数据结构中的数据类型,在抽象数据类型ADT中只定义了基本操作,复杂的操作是通过基本操作实现的。在抽象数据类型中定义的操作与C语言中的各种类型的运算,比如取余运算符“%”,在C语言中仅限整数。在讲到查找与排序时,对照数据结构中的查找与排序,介绍一些经典和效率高的算法。在讲到递归函数调用时,用数据结构中的递归调用时栈的进栈出栈变化过程讲解。在讲到scanf函数和其他读取字符函数时,将内存与键盘输入缓冲区结合,使学生更容易理解数据的输入格式。

2) 与操作系统融合。

在讲到变量的数据类型及变量的存储类型时,结合操作系统的内存结构,讲解内存区域分为6个不同的部分来存储不同的数据,使学生了解内存组织的有序性。特殊地,寄存器变量不占内存,而字符串常量存放在符号常量区,通过讲解内存结构,学生就明白静态变量为什么第一次使用时会初始化,以后再使用时用的是上一次的值。在讲解数组的连续存储、链表的动态存储时,结合内存就会理解得更透彻些,甚至可补充内存中堆与栈使用的知识[4]。

3) 与计算机组成原理融合。

入学时,教师介绍计算机发展,一般都会讲到冯•诺依曼原理,那么为什么要学习语言呢?还得从计算机组成原理来讲,从电脑城装配电脑介绍起,首先运用BIOS程序,然后再启动操作系统,最后再运行用户的应用程序。而BIOS程序、操作系统和应用软件都是用语言开发出来的软件,之前都曾经有过C语言版本,BIOS现在还是C语言编写的,而操作系统的一些内核也还有C语言的许多代码。因为大一第一学期的计算机科学导论与本课程是同步开设,学生对计算机的了解还是有限的。同样地,在讲到C语言的三种进制数、位运算、指针时,与计算机的字长、补码运算、指令加以对照,就容易理解些。

4) 与面向对象语言融合。

掌握好一门语言,可以自学其他语言。做到这点不容易,因为大学专业课的特点是学一门结一门,没有哪所大学或哪个专业开设了所有语言,所以在语言课之间融合对照学习,会收到非常好的效果。比如讲到结构体时,与面向对象中的类对照,将结构体变量与对象对照,就比较好理解数据类型和类不占内存,对象与变量占内存了。讲到函数时,与方法对照,讲到函数参数时,补充面向对象中引用的使用,对将来学习面向对象语言和数据结构非常有益。

5) 与数据库原理融合。

程序所需数据从哪儿来?运行结果保存到哪儿去?在讲到文件操作时,将C语言中用到的文件与数据库中数据文件作比较,再联系结构体成员与数据库中的字段、记录,使学生对程序的理解更完整一些。

6) 与编译原理融合。

在演示程序开发过程、多文件的操作、编译预处理时,均可以联系编译原理中编译器的词法/语法分析,教师可以演示单步编译,鼓励学生思考编译的过程。

7) 与高等数学、线性代数、概率论、离散数学、数值分析、运筹学等融合。

如果能将学习C语言与离散数学中的集合论、代数系统、图论结合,再解决高等数学、线性代数、概率统计、几何、数值分析和运筹学中的数学问题,能够极大提高学生的兴趣,也巩固了所学的知识。

8) 与网络融合。

使用C语言可以开发C/S结构的客户端与服务器端程序,在实训和实习时可以分层次进行一些高级的练习,比如C/S结构的网络编程。再提出一些问题,比如如何实现抓图和打印等,培养学生的自学习惯。

9) 与软件工程融合。

结合专业特点,讲解软件开发不仅仅是写代码,还是一个模型的开发过程,对于学生将来毕业做好毕业设计与写好毕业论文有指导意义。特别是软件工程和软件测试专业更是需要了解。

其实,我们在讲授C语言程序设计时,几乎可以和所有计算机专业课程联系起来,比如选修课算法分析与设计,还可以和ACM/ICPC结合,通过ACM/ICPC竞赛的题目寻找合适的教学切入点,有时也可以引入离散数学中的逻辑推理知识,或者构造一种教学情境,让大家感兴趣,能被吸引住,使学生一步步跟着往前走,比如抽几名学生排队讲排序算法。

也可以和非计算机专业课程联系起来,比如计算机英语。同样地,在教学过程中,融合一些新的技术,比如物联网、CPS计划等,学生会更感兴趣。如何融合比较教学,既能深入浅出地完成教学任务又不拖延学时,需要把握好这个度。

3与计算机其他课程的融合实践环节

除了做到融合教学外,在实践环节上如何融合也至关重要。

1) 搭建ACM/ICPC校内在线测评平台。

我们采取竞赛辅导拔高法,成立竞赛班,采取“讲-帮-带”的方式,建立了郑州轻工业学院在线测评平台,如图1所示。丰富了题库,组织校内选拔赛,教师带队参加竞赛。

自2009年开始,我们每年举办两次全校性质的大学生程序设计竞赛:12月举办新生程序设计竞赛(个人赛)、5月举办一次全校程序设计竞赛(组队赛)。均有IT公司赞助,并有开幕式和颁奖仪式,极大地提高了学生的编程热情。

参加ACM/ICPC竞赛,有助于培养学生的抽象思维、逻辑思维、心理素质、团队合作和协同能力[5]。

2) 与考研结合。

我们从大一第一学期就让学生思考自己将来的出路:工作或考研。如果工作就必须学好知识,重视实践,提高动手能力。

3) 与操作系统、C++融合实训。

在后续的操作系统和C++的实训时,安排我们C语言程序设计课题组的教师参与实训,使得C语言程序设计课程的学习更加长期有效。

4) 把等级考试当做门槛。

我们把全国和河南省历年计算机等级考试的题目穿插到平时的教学中,让学生把握每个知识点。

5) 介绍学生参加教师的项目。

我们在授课的同时,也有心培养一些勤于思考用心的学生,介绍他们参与到教师的应急系统、嵌入式、GIS、网络等实际项目开发中,引导学生自学C++和Java、JSP等工具,让他们从实践中得到锻炼,积累经验。

6) 跨学科实训并总结。

在第二学期期末的实训环节,我们让学生分组去做一些稍微大一点的题目。比如C语言语法分析模拟器、BIOS模拟器、科学型计算器、TC模拟器、Windows小游戏、信息系统等。在实训结束后,我们安排优秀实训作品展示总结会,也是对一学年课程学习的总结。有很多外专业的学生自愿来参加。通过展示交流,学生看到了别人的成绩,也看到了自己的差距。

4结语

通过对C语言程序设计存在问题进行思考和分析,我们结合学校实际,提出了C语言程序设计与计算机相关课程的融合教学与实践。经过4年的教学与实践检验,取得了较好的教学效果,对C语言程序设计,以及其他程序设计语言的教学都有一定的指导意义。

参考文献:

[1] 李玉梅.“C语言程序设计”课程的“教、学、做”一体化的探索与实践[J]. 科技创新导报,2010(28):164.

[2] 朱立华,俞琼. C语言教材建设的研究与实践[J]. 计算机教育,2009(13):150-153.

[3] 徐小青,李晓东.“高级语言程序设计”课程教学改革与实践[J]. 计算机教育,2009(13):46-48.

[4] 王祥瑞. C语言中的内存泄漏分析[J]. 长春大学学报,2009(6):27-29.

[5] 武建华. 基于ACM模式的数据结构实践教学改革与探索[J]. 计算机教育,2009(13):114-116.

Integrated Teaching and Practice of C Language Program Design and Other Subjects of Computer

YAN Hongyan1, JIN Baohua1, ZHANG Xiaojuan2, XU Hongxia3

(1. School of Computer and Communication Engineering, Zhengzhou University of Light Industry, Zhengzhou 450002, China; 2. Department of Foreign Language, Zhengzhou Tourism College, Zhengzhou 450009, China; 3. Art Design Department, Jiyuan Vocational and Technical College, Jiyuan 454650, China)

Abstract: In this paper, from the point of the computer course system, combined with the current status of high programming language in the colleges, implementation of the plan of excellent engineer in the school of computer and communication engineering, and the reform and innovation of the subject system of C language program in the school of computer and communication engineering and software engineering college, the philosophy of integrated teaching and practice of the C language program design and other subjects of computer is put forward. After four years’ practice, the new integrated teaching and practice have made very good results, and promoted the connection between the various subjects. Furthermore, it will have a positive on the students’ self-learning and extensive ability.

Key words: C language; subject system; integrated teaching; syncretic practice; plan of excellent engineer; ACM/ICPC

上一篇:大学计算机基础课程教学方法与体会 下一篇:软件工程环境下的C程序设计课程教学