APP下载

面向工程技术的C语言程序设计教学实践研究

2011-02-08马玉春汪文彬苏静

海南热带海洋学院学报 2011年5期
关键词:校验码C语言字节

马玉春,汪文彬,王 冬,苏静

(琼州学院海南省嵌入式系统重点实验室,海南三亚572022)

0 引言

C语言既有一般高级语言的特征,又具有低级语言的特征;既可用来编写系统软件,也可用来编写应用软件;《数据结构》和自动控制与通信工程等工科专业的相关课程中的算法,都可以采用 C语言进行描述。嵌入式系统中的单片机与DSP程序设计,采用C语言编写应用程序将比汇编语言可读性更强,且更易于维护。同时,《C语言程序设计》也是计算机等级考试中的重要科目。因此,《C语言程序设计》是计算机等相关工科专业的重要基础课程,学好该课程的基础知识,并能熟练使用C语言工具进行程序设计,不仅是诸多后续课程学习的需要,也是学生毕业后从事软件开发与应用的必备本领。

计算机程序设计语言的教学目标是让学生熟练使用该语言工具来设计程序,实现相应的算法。该类课程的教学不能仅仅使用传统的教学手段,例如通过黑板或PPT进行讲授,应加强实例演示,所设计的实例不但应该尽量简单,而且,还应有一定的工程背景或跟后续的课程有一定的关联,这样,通过该门课程的学习,学生不但学完了一门课程,而且,还为后续课程的学习打下了基础,为将来的就业积累了技术经验。本文是作者多年教学经验和多个大型工程项目经验的结晶,主要围绕课堂教学模式、编程风格的培养、实例教学安排、工程项目分解、后续课程铺垫等展开,最后展示了教学效果。

1 课堂教学模式

由于高校的大量扩招,大学教育已经从精英教育走向普及教育,生源质量也大大下降。自学一门计算机程序设计语言的最好方法是,一边看书,一边上机实践。同样,对于计算机语言的教学,应该从感性认识到理性认识,即从包括知识点的最简单的程序演示开始,通过看得见的结果,具体讲解每条语句的作用,整个程序的结构与输出结果之间的关系,在学生有了感性认识以后,再上升到理性认识,进一步讲解并总结知识点。这样可以兼顾理解能力比较一般的学生,达到“人人成才”的目标。

我们所采用的典型的课堂教学模式如图1所示,贯彻从简单到复杂,从感性认识到理性认识的教学方针。为了高效教学,采用笔记本进行实例演示,精心设计包含知识点的最简单的实例,通过结果并对照语句来讲解达到结果的方法。然后,切换到“知识讲授系统”,即支持电子白板的多媒体教学系统,对重点和要点继续讲解,必要时切换到“实例演示系统”。通过“实例演示系统”到“知识讲授系统”的多次反复,和适当的师生互动,使学生理解知识,掌握初步技能。但是,实践技能不能通过纯粹的课堂讲授获得,必须通过课后的实践(包括实验课)对实例进行模仿和改进,从而将知识转化为自己的技能。

2 编程风格培养

编程风格并不是程序员在编写程序的实践过程中所形成的个人的特色,相反,编程风格是编写程序所必须遵循的格式,这样可以使所编写的程序易于阅读和发现其中的错误,也有利于团队合作,因而,编程风格是通用的。

C语言程序的书写格式自由,一行内可以写几条语句,一条语句也可以写在多行上,每条语句必须以“;”作为语句的结束。复合语句要以一对“{}”括起来。任何一种程序设计语言,其典型的结构一般不外乎顺序结构、分支结构和循环结构。分支结构和循环结构中一般要用到复合语句,所谓的复合语句,主要是若干条语句放在一起,用“{}”括起来,相当于一条语句。

顺序结构的程序比较简单。分支结构和循环结构的程序,一般带有组合语句,或者条件较多,为了便于阅读,将一条语句写成多行,这时,就涉及到缩进。C语言中的语句是以“;”作为结束标志的,两条语句是否并列跟是否缩进没有任何关系。深刻认识“缩进”的作用并合理应用,可以使程序看起来“错落有致”。若干条简单语句实现了某一功能,或者以分支结构和循环结构为标志的组合语句结束,都要加上一个空行,这样可以使程序看起来“层次分明”。

实例1所示的程序片段是缩进和空行的应用,用来计算1到10的和。实例1(左)第1和第2行是一条完整的for循环语句,属于将一条语句写成多行(2行)的形式,并在该语句的最后1行加上了“;”作为语句结束的标志。实例1(左)第3行打印计算结果,这是一条完整的语句,这条语句与 for循环语句并列,因而,应该与第1行左对齐。实例1(右)使用了复合语句,for循环包括第3和第4行中的两条子句,因而,每执行一次循环,就打印一次中间结果,而实例1(左)仅打印一次最终结果。如果将实例1(左)理解为实例1(右),那就错了。实例1(右)1到5行是一个完整的for循环语句,应该在最后加上一个空行,这样就可使程序看起来“层次分明”了。

语句是否缩进并不影响到语句之间的并列关系,但是,并列的语句一定要左对齐(错落有致);完整意义的顺序语句组或复合语句结束,应该加一个空行(层次分明),只有做到“错落有致,层次分明”,才能实现“逻辑清楚,思路清晰”。

关于注释。注释主要用来解释代码的作用,对于函数的注释,一般将注释写在函数前。注释也有另外一种重要作用,即在程序调试过程中,对可能出错的语句进行暂时的屏蔽,关于注释的这一种应用,是大部分教材所没有提及的,而在编程实践中应用又很普遍。

此外,对于标识符的命名,应该尽量简单且有意义。例如,对于临时整型变量的命名,可以使用“nTmp”,这样一看即可知道,这是一个临时整型变量。在程序的调试过程中,为了观察中间结果,可以插入 printf语句,输出需要观察的数据,后面跟一条getchar语句。

4 实例教学安排

实例应该尽量简单通用,结合实际的工程项目,并且,在整个教学过程中具有连贯性,这样循序渐进,才有利于学生理解和模仿。在计算机监控系统中,为了保证数据传输的正确性,一般需要在通信协议中引入校验码,而异或(xor)校验码是最常用的校验码之一[1]。异或校验码的计算方法是,对于需要传输的一批字节,以初始值0依次与这些字节异或,所得结果附在所需要传输的数据之后。对方收到这些数据后,对所有字节计算其异或校验码,如果结果为0,即表示数据正确,就进行相应的处理,否则丢弃该数据包。

在简单程序设计中,可以在主程序中计算两个字节的异或校验码,然后打印计算结果。当涉及到数组时,可以在主程序中初始化字节数组,然后,利用循环计算这个数组的异或校验码。当涉及到指针和子程序时,可以编写计算字节数组异或校验码的子程序/函数,如实例2所示,只要在函数GetXorValue中给出所需要计算的数组的名字pData和数组的大小nSize,即可计算出所求的异或校验码。第3条语句初始化变量xorTarget,第4条语句利用for循环对字节数组逐个异或,最后返回结果 xorTarget即可。实例2所示的子程序虽然简单,但是,可以直接应用于工程项目,而且,综合了函数/子程序设计、循环、数组、指针以及数组和指针的灵活应用。同理,累加和校验码与循环冗余校验码的计算也可以采用相似的方法。

5 工程项目分解

第4节介绍了C语言程序设计中的逻辑操作xor及其应用,简单实用。对于枯燥的位操作,在课堂教学中的讲授难度较大,因为位操作似乎与实际联系较少。但是,位操作对于汇编语言的学习及硬件测试与控制却有广泛的用途。在一个字节中,可以用1表示开关闭合,用0表示开关打开,这样,一个字节就可以表示8个开关的状态。

测试某个开关是否闭合,可以采用 CheckByteBit函数,如实例3所示,第1个参数bData是需要处理的字节,第2个参数nBit表示测试哪一位。第6行通过左移位使得 bTmp的第 nBit位为1,第7行bData与bTmp执行“与”操作,根据“与”操作的特性,1和1相“与”得1,1和0相“与”得0的特性,如果 bData的第nBit位为1,则返回1,否则返回0.

同理,根据“或”操作的特性,1和任何数相“或”都得1,可以编写 SetByteBit函数,用来对给定字节数据中的某位置位而不影响其它位;根据0和任何数相“与”都得0的特性,可以设置 ResetByteBit函数,用来对给定字节数据中的某位复位而不影响其它位。通过这三个函数,即可成功地对一个字节中的某位进行测试、置位和复位,也就可以用来检测设备的开关状态、闭合开关或打开开关了,从而,为计算机监控工程项目的研发提供了基本技能。

6 后续课程铺垫

第4节的实例教学中,实现了在各种情况下对计算机监控通信协议中异或校验码的计算方法,同理,在计算机网络中,也有很多通信协议。其实,所谓的通信协议,只是规定了在何位置的字节具有什么含义,应该如何去处理,以及如何保证数据传输的可靠性(一般引入校验码)等。所有的通信协议几乎都有相同点,因而,通过第4节通信协议的附带学习,可以加深对计算机网络协议的理解。第5节的三个位操作函数,可以直接应用于工程项目,用于测试设备的状态和使设备运行或停止。

结构体和指针是C语言中的难点,也是应用于各种算法的重要基础。这里可以将结构体与迷宫算法联系起来,用结构体来描述迷宫算法中的路径,包括上、下、左、右,以及是否有通道,该路径是否走过等成员信息,这样可以提高学生的学习兴趣,同时为《数据结构》课程的学习做好必要的铺垫。

在结构体中引入数据域和指针域,便是结点的定义,可以将结点链接为链表,学习对链表中的结点进行检索、插入与删除操作。链表可以用于最短路径计算,并可以广泛应用于人工智能领域,对链表的操作,显然可以减轻《数据结构》的教学负担,并加强其教学效果,减轻学生对《数据结构》的恐惧心理。

7 其它相关工作

教学文件是教学工作的指南,教学过程只有紧紧围绕教学文件展开,才能保证教学秩序有条不紊[2]。教学大纲的制订要根据培养方案的要求、后续课程的需要和当前的就业热点,在此基础之上,修订实验大纲,教学与实验相互促进。授课计划要明确每一次课程所要讲授的内容、讲授方法,以及所使用的实例。

教学日志和教学随笔要记录教学过程中的重要环节和学生接受知识的过程,并对教学过程进行反省。在此过程中,我们贯彻“从学生中来,到学生中去”的原则,通过随机点名的方式抽取学生撰写课堂总结,总结内容包括学到了什么,教学过程中有哪些亮点,哪些地方需要改进,以此来检验教学效果,发扬优点,改进缺点,不断提高教学质量。

网络教学的配合。网络教学包括两方面的内容,其一是教师提供的内容,包括要点与重要例程及与学生的交互;其二是指导学生进行自主学习,遇到问题通过互联网寻找答案或与他人在网上合作探讨解决的方法,由此提高自己的自学能力和实践技能。

8 教学效果

由于在教学中采用了以上教学方法和教学手段,C语言程序设计的教学取得了良好的效果,在2010年举办的“国信蓝点杯”全国软件专业人才设计与开发大赛中,大一新生即取得了“C语言本科组三等奖”的优良成绩;2011年的开发大赛中,两位同学获得“C语言本科组海南赛区一等奖”的好成绩,成功取得全国大赛决赛资格。由于在教学过程中,所涉及的例程密切联系工程背景和后续课程的学习,而且,从感性认识到理性认识,学生觉得这种教学方法大大脱离了从知识点到实践操练的传统,讲解生动,使得听课轻松,又能学到不少课本上所没有的知识和经验。

9 结论

C语言既具有高级语言的特征,又具有低级语言的特性,适合硬件编程,对后续课程中的《汇编语言》是一个良好的支撑,而且,对于嵌入式系统程序设计,也完全可以借助 C语言进行。同时,C语言也是描述算法的重要工具,广泛应用于计算机相关专业的主要工科课程。因而,学好C语言对学生后续课程的学习以及就业都具有重要意义。本文结合作者多年从事项目研发的经验以及教学经验,采用高效的课堂教学模式,从感性认识到理性认识,强调良好的编程风格的培养,设计包含知识点的最简单的实例,并紧密联系工程项目和后续课程的学习。面向工程技术的C语言教学方法,可以有效激发学生的学习兴趣,对提高教学效果和教学质量起到了很好的作用。

[1]Ma YC,Liu JM.Simulation of Development Platform on Computer Monitor Systems[C].ICCSE 2008,2008.7.

[2]王琪,周彩根.《C语言程序设计》课程建设的研究与实践[J].中国成人教育,2007.6.

[3]余洁,王新刚,秦劲松.对提高“信号与系统”课程教学质量的探讨[J].教育与职业,2010.8.

[4]刘宏岩,郝东明,胡金凤等.试论高等学校的课程建设与教学改革[J].高教研究,2009.

猜你喜欢

校验码C语言字节
No.8 字节跳动将推出独立出口电商APP
基于Visual Studio Code的C语言程序设计实践教学探索
No.10 “字节跳动手机”要来了?
基于C语言的计算机软件编程
简谈MC7字节码
高职高专院校C语言程序设计教学改革探索
基于Excel实现书号校验码的验证
基于FPGA的循环冗余校验码设计
身份证号码中的数学
论子函数在C语言数据格式输出中的应用