范昊,束德勤,郭忠浩,杨传栋
(山东农业大学 信息科学与工程学院,山东 泰安)
很多高等院校都在开展电子信息类、通讯类等相关专业的人才培养。这类人才培养的目的是为社会培养能够在工业企业机电控制、工业自动化控制、检测与自动化仪器仪表、信息采集和处理等领域从事各方面工作的具有创新精神的复合型工程技术人才[1];能在电子及相关领域中开展研究、设计、制造、运营及在国民经济各个领域和国防工业中开展研发、应用通信技术与高科技设备的工程技术人才;能够在教育、研究院所、事业和政府管理等部门,从事电子集成系统开发和集成应用以及教学和管理等工作,并且可以解决复杂工程问题的应用型人才,以推动社会经济的发展。随着大数据、物联网等技术的发展与应用,现代电子类专业的的学生,除了需要掌握传统的数电模电、电路原理等传统课程之外,还需要掌握数据获取、处理的基本原理和一般方法。学生们必须具备有设计、开发、处理数字信息及模拟信息的基本能力[2]。所有这些都离不开计算机技术的开发与应用。因此计算机技术,特别是程序设计类课程,如C/C++语言,Python等程序设计语言类课程目前已经成为电子类专业学生必须开设的重要课程[3,4]。
但目前在电子信息领域,高校开设C/C++语言课程中尚存在一些问题。造成电子类人才虽然具备了一定的电子集成电路的设计能力,但面对大量数据处理时,无从下手,培养的人才质量还不能完全胜任企业的要求[5,6]。其实主要原因是,很多学生掌握了电子类的专业技术,却不会C/C++语言设计技术,或者说不知道如何把电子专业技术和计算机(特别是C/C++语言)编程技术结合起来。很多高校在开设C/C++语言课程时都制定详细的授课计划和课程体系。但很多的课程在实际的教学过程中并未达到很好的教学效果,学生基础知识不扎实,或者即便原理掌握清楚了,但在解决实际问题过程中往往不知如何下手,无的放矢。作为一门联系自动控制理论、系统设计、课程设计和毕业设计等教学环节的程序设计语言类课程,对电子类专业的C/C++语言的教学,应该有所侧重。C/C++课程的目的是指导学生掌握解决控制系统分析与设计的一种有效的计算机辅助设计手段,提高学生实践能力和综合解决问题的能力。这门课程的应用涉及很多领域的知识,讲授内容非常丰富,为了在有限的课时内能够快速让学生入门,在理论教学与上机实验两个方面,教学方法和内容都要有所侧重[7,8]。作者从C/C++教学内容安排和教学方法等进行了多方面的探索和研究工作。
众所周知,C/C++程序设计语言课程的主要内容包括:基本数据类型与表达式、结构化程序设计的基本控制语句、函数的定义与调用机制、数组和结构体以及类与对象、输入输出流等主要内容。对电子类专业的本科生,在讲授课程时,为了保持他们知识的完整性和系统性,课程的教学主线要保持教学内容完备性但要有特色。在教学内容上,首先讲授教会学生C/C++语言的编辑环境、编译方法、头文件的使用等,让学生对C/C++程序设计语言有个直观了解,然后逐步讲授变量、语句、函数等内容,最后等学生把语言的基本结构和设计技巧掌握了再重点加入电子类专业使用的输入输出控制、计算机串口控制、winsock控件等内容。总之,在课堂实际授课中要主线明确,内容清晰,重点突出,结合电子类专业的特点理论与实践并重,在课程教学过程中对课堂讲授内容进行一定整合。
首先在实际课堂教学过程中制定了一条课堂讲授教学内容主线的主线,它考虑了课程教学内容的完整性、加强学生实践动手能力以及电子类专业教学的特色性等几个方面。教学内容主要包括基础篇、核心内容篇和高级应用篇等几个主要体系。图1就是作者在实际教学过程中总结的电子类专业C/C++课堂讲授教学内容主线结构。
图1 课堂讲授教学内容主线
课堂讲授教学内容主线涵盖了C/C++程序设计语言的主要内容,同时又在数据的二进制表示、输入输出控制、位运算、程序预处理、文件等方面的教学上针对了电子类专业的特色重点讲授。在基本篇教学中,使得学生在学习过程中能条理掌握C/C++课程的基本内容。核心内容教学中学生能掌握程序设计的基本思路,对大量数据的处理,程序设计的基本结构,程序设计的模块化和复杂输入输出有所掌握。高级篇教学中,特别针对了电子类专业学生将来在实际工程控制中常常遇到的问题进行了重点的教学安排。如与计算机连接的设备没有开启或是设备故障时用的程序预处理功能、处理单片机PLC可编程控制器时遇到的大量二进制转换和位运算问题等等。这样的课程安排使得电子类专业的学生可以掌握完整的C/C++程序设计语言的课程内容,使得学生的知识体系条而全面,而且在教学中特别针对了电子类专业在实际工程设计中遇到的问题做了全面重点讲授,使得学生在实际学习中突出了专业特色。通过这样的教学安排,电子类专业的学生学习完C/C++程序设计后,在面对自己专业中的实际工程问题时会感觉到有的放矢、学以致用。
C/C++程序设计语言的学习,在课堂讲授中必须有实验例题的涉及,否则学生会感觉非常抽象,难以理解所学内容。当然,要会编程必须先学会学习C/C++程序的一些基本知识。比如C语言程序结构、数据类型、变量和常量的概念、输入输出函数等,传统教学方法通常是先用4个甚至更多课时集中讲解,但这些内容琐碎繁杂,单独记忆并不容易,往往是这些内容讲完了,同学们好奇心和热情也消耗完了。为此,从第一堂课开始就采用案例教学法,事先根据教学内容选择和设计好例题。这类例题的设计和选取除了传统的“Hello world”程序之外,作者精心制作和设计了部分带有电子类专业特色的讲授案例。如:表1和图2的二极管流水灯的C/C++语言控制小程序的实验设计。
表1 C/C++控制程序
图2 二极管流水灯的C/C++语言控制
目前电子类专业的学生都会有单片机和PLC控制器等硬件相关的课程,这些课程经常使用到C/C++对硬件进行编程控制。这个实例对于计算机专业的学生理解起来似乎有一点困难,除非该学生单片机等课程比较熟练,但对电子专业的学生来说,由于他们有较好的51系列单片机基础和硬件知识,反而加深了他们对程序的理解。通过这样一个简单的例题设计不仅使得同学对程序设计语言有较好的理解,并且将程序设计语言的知识和单片机硬件知识有机结合在一起,使得同学知道如何用语言控制硬件设备。
由于C/C++语言课程里面难免要涉及一些较复杂的算法,程序中涉及到的算法讲授是比较比较枯燥的,学生需要动脑筋理解。教师卖力而反复的讲解,反而会使得学生不愿意去深入理解。如果教师将算法的思路和执行过程,涉及硬件的话需要理解控制过程,在黑板上画出来,是能加深学生对程序的理解。显然,一些控制过程或是执行过程非常复杂的算法,教师在黑板上画图,浪费了课堂时间减少了课堂的容量,教学效果也未必会好。如果可以采用多媒体动画教学方式,复杂程序的执行和控制过程以容易理解的方式展现出来,不仅能吸引学生,同时也加强了学生对程序的理解。课件的动画形式,可以对程序设计语言的内容形象描绘,优秀的动画制作效果能激发学生的学习兴趣,调动学生学习的积极性。当复杂程序的设计、执行、控制过程用优美形象的动画展现出来后,教师在授课时再配以深刻的讲解和引导效果会更好。
对语言类课程的学习没有实际的上机动手编程是不可能掌握好的。特别是电子类专业的学生,他们设计的C/C++程序往往需要对硬件控制。因此,打破传统教材的实验设计,增设输入输出、硬件控制等,对电子类专业学生来说实用的实验是对该专业学生教学中必要的工作。下面将以一个实验实例作为教学案例来说明如何设计这一类实验。
实验教学案例:
1.实验要求
利用流式套接字编写一个简单的文件传输程序。要求:(1)服务器程序和客户程序均为控制台应用程序;(2)服务器程序是文件的发送方,服务器程序启动后要求从键盘输入要发送的文件的存放位置及文件名,然后等待客户端下载该文件;(3)客户程序是文件的接收方,客户程序启动后要求输入服务器的IP地址及所使用的TCP端口号,然后与服务器建立连接并下载服务器提供的文件,文件保存在C:盘根目录下。
2.实验设计
图3 流式套接字的实验设计
传输一个文件需要传输两部分内容:一是文件的名字,二是文件的内容,收发双方必须约定何时发送文件名以及何时发送文件内容。一般的做法是发送方先发送文件名给接收方,接收方收到文件名后以输出方式(ios:out)打开文件,然后通知发送方“可以发送文件内容了”,发送方收到允许发送文件内容的通知后,就开始从文件中读取文件内容并发送给接收方。该交互过程如图3所示,其中发送方已事先打开要发送的文件,并且收发双方约定用字符串“OK”表示接收方允许发送方发送文件内容的通知。
3.实现技术
服务器端和客户端程序都需要用到文件操作,C++中有MFC的文件操作,但在控制台应用程序中通常应使用C语言文件操作语句。C/C++中的文件处理功能是由输入文件流ifstream和输出文件流ofstream提供的,这两个流在头文件fstream中定义。C/C++中的文件操作过程应包括以下3个步骤。①在程序中包含头文件fstream #include “fstream”②定义文件流变量ifstream inFile定义输入文件流对象;ofstream outFile定义输出文件流对象③打开文 件 inFile.open( filename, inmode); outFile.open(filename, outmode);inFile和outFile是定义的流对象,filename是要打开的文件名,可以包含文件路径,inmode和outmode则是打开或建立文件的方式,该参数有默认值。
可以看到,经过上述几个步骤可以在完成在多台计算机上实现一个简单的文件传输。这个实验涉及到文件的输入输出、IP地址的设置、TCP端口号的配置、文件的格式、二进制的表示等等。所有这些C/C++的这操作,对电子类专业的学生来说都是在以后工程实践中经常遇到的问题。经过这样一个简单的实验,不仅让学生练习了许多重要的编程问题,而且让学生感到非常实用,再遇到类似的问题时,他们可以驾轻就熟、游刃有余。也达到了我们经常强调来的“利用所学知识解决实际问题”,避免了教学内容和实践的脱节。
目前很多高校的程序设计语言类的课程考评方式一般是平时成绩占30%,期末考试占70%,当然,不同学校和专业比例也许会适当调整,但大都是这样一个模式。平时成绩一般是考勤、课堂问答的情况来决定的,并不能完全反映学生平时学习掌握情况。
对课程考核方式教学改革,我们是这样来做的。首先是降低期末考试成绩在总评成绩中的比例,最多占总成绩的一半,我们建议是占40%,平时成绩则占60%。其次是改变平时成绩的构成,大幅降低考勤所占的比例,建议考勤成绩只要占总成绩的5%就可以了,平时的作业占总成绩的15%,其余的40%则为随堂测验成绩。之所以要增加随堂测验,主要是因为通过随堂测验的答题情况可以使每个同学发现自己在学习上的不足之处,使他们能及时调整学习态度和学习方式,及时查缺补漏不至于落下太多,同时也能使教师及时了解学生的学习情况,及时调整教学进度优化教学方法,帮助同学更加扎实地掌握所学知识,提高学生的程序的设计开发能力。
随堂测验成绩在总成绩中的占比较高,可以促使同学提高对平时测验的重视程度,使他们平时就会将更多的精力投入到学习之中。根据课程的教学内容,随堂测验的次数也不必太多,一般2到3次就可以达到目标。具体课程考核方式的成绩构成,分为考试成绩和平时成绩,具体设置如下:
1、课程考试方式为结课后考试:闭卷。
2、成绩构成:70%考试成绩+40%平时成绩。
3、成绩评分标准与考核过程。
课程考试评分标准(随考卷单独制定)
平时成绩评定标准与过程为:
(1)考勤:满分5分,根据课堂点名记录考核,旷课1次扣1分,全勤为50分,最低为0分。其中无故缺勤三次以上者,取消本门课程的考试资格。
(2)课堂笔记:满分5分,根据课堂记录情况,由任课教师评分。
(3)课堂讨论/测验:满分20分,本课程进行4次讨论/测验,每次5分。
(4)作业:满分10分,本课程共5次作业。每次作业满分2分,得分根据作业情况考核。
我们精心进行了教学内容的总体安排,加强了课堂教授例题的选取和设计,考虑了课程教学内容的完整性、加强学生实践动手能力以及电子类专业教学的特色性等几个方面。考评环节增加了课堂随机回答问题和课堂测试与讨论的环节。教学过程中,学生能在课堂上积极主动地进行思考和回答问题,调动了学生的学习热情和学习的积极性。很多学生不仅能利用所学的知识、例题去解决自己遇到的实际问题,而且对于自己不懂不会的问题还能去主动查阅相关的资料,对文献有一定的总结和自我学习能力。总之,经过我们的教学改革和实践,有效提高了学生学习的主动性,使得学生基础知识牢固,所学知识专业特色突出,多数学生能利用C/C++这门程序设计语言解决自己遇到的专业问题,到达了良好的教学效果。