以思维能力培养为核心的“C51程序设计”课程改革①
2018-05-14周灵彬
[摘 要] 针对编程过程中不会想、不会写的问题,建立以思维能力培养为核心程序设计课程教学目标,在趣味任务中构建融合知识、工具、方法与技能训练的课程内容,以求解“百鸡百钱”为例,从科学方法论的角度阐述程序开发流程形式化方法,在融合理论仿真实践的教学模式下培养思、写、调、测的程序设计能力和规范意识、规范编程的习惯。
[关 键 词] 程序设计;思维能力;趣味任务 ;开发流程;理仿实;规范
[中图分类号] G712 [文献标志码] A [文章编号] 2096-0603(2018)06-0068-03
高校理、工科类的专业基本上都将“程序设计”课程作为培养学生基本信息素质的基础课程。20世纪70年代初问世的C语言,兼具高级语言的特性,具有层次清晰、模块化、接近自然语言和数学公式的形式,又有汇编语言可直接操纵硬件、访问内存等优点,还有良好的可移植性而成为程序设计首选语言。也是教育部各个课程建设指导委员会推荐的高校程序設计课程。高等职业教育作为高等教育的一种重要的组织形式,从出现以来一直都把C语言作为许多专业培养学生基础职业能力的平台课程。高职院校通过该门课程培养学生的程序逻辑思维的同时也培养高职学生解决实际问题等综合能力与素养。
一、程序设计类课程教学中存在的问题
(一)教学目标偏离课程本质
大部分程序设计课程的教学目标为:不但要注重C语言程序设计基本知识的学习,更要注重程序设计技能的培养,初步积累编程经验,打下良好的计算机应用基础。
显然,培养目标是掌握编程知识与技能。而毕业生从事编程的并不多,它与岗位应用脱离。从而导致学生认为该课无用产生抗拒。若抓住思维能力培养的本质,领会程序设计理念,体会过程化编程思想,掌握通过计算机解决问题的方法,程序设计课程对人人都有用,从而改变了学生思想认识,有效地增强了心理接纳度和学习的主动性。
(二)教学内容陈旧、枯燥
大多数教材是按编程语言知识结构来组织的,再辅以比较刻板、趣味性不强的程序样例,如练习输出格式:用*号输出字母C的图案、输出九九口诀;求水仙花数、求一定范围内的素数等。对高职生来说,数学知识性强又不实用的程序设计接受起来又难又无聊,主观学习意识与意愿大打折扣。
(三)教法、学法导致难教难学
程序设计语言语法规则多、难记忆,关键字、标识符、函数等往往混淆不清。教学过于注重语句语法,满脑子都是语句,离开老师就不会写程序、不会测试程序,根本原因就是没有掌握程序设计的思维方式与方法,学生像机器一样成为教师指导的被动执行者,丧失主体的自主认知,教学效果很一般。如何调动学生学习的积极性、唤醒学生的力量,成为教学成功的一个关键。
(四)忽略规范
程序中随意设置变量名称、不遵守层次明晰的缩进格式、怕麻烦不写注释,造成程序可读性差,影响调试、开发进度和交流。不规范的书写与企业的严格而全面的软件文档规范差距大,影响学生和企业对学校专业的满意度。
二、建立思维能力是程序设计课程本质的思想[1-2]
“C51程序设计”就是用C语言为51内核的微型计算机,也称为微控制器或单片机的智能控制核心设计、编写控制软件。程序设计的学习直接与智能控制类产品挂钩,其针对性、适应性更强。占理工科大多数的非软件专业98%的学生不会从事程序编写等软件开发工作,学生的收获似乎就只记得零星的几个语句关键字,如if、for、while等。所以编程技术、技巧上的能力不是最重要的,而其本质“逻辑思维”能力、对问题的分析方法的掌握应用,从而找到解决问题方法的能力则更为重要。方法与思维能力是可从学校“带的走”的能力,生活和工作中随时随地都要用到,是陪伴人的一生的可持续发展能力。故程序设计类课程的核心是培养思维能力,学习计算机语言知识、训练编程技能是实现逻辑思维能力培养的手段。好的程序员、软件开发者一定具备优良的逻辑思维能力。
三、趣味任务驱动,融合仿真重构内容[3-4]
从电子产品中提炼项目与任务,将知识、仿真技术与方法、技能训练、趣味性融入任务中,在完成任务的过程中理解、体会、内化为技能与能力。
设计实用、易学的项目任务有花样灯、键控灯、思维训练、小球计数、秒闪灯、测量正脉冲宽度、看谁反应快、键控PWM调光灯、可调时钟、多功能秒表、打地鼠游戏、单片机唱歌等,还将仿真技术应用融入其中,如应用Keil编程与编译、用Keil模拟调试程序、用Keil的串口监测数据、用仿真软件PROTEUS进行软硬件协同仿真调试、用串口助手实时监测数据跟踪系统运行等。项目任务中融入的语言知识包括C51的基本语法、语句&结构、数据及其类型、运算符、函数、数组、指针等;程序设计对象涵盖单片机I/O端口应用、中断、定时/计数器原理及应用、数码管静态&动态显示、LCD及点阵显示、键盘接口技术、A/D转换、D/A转换、串行通信应用等。
遵循学习规律和人的发展规律,以项目为导向,以软件开发过程为主线,整体内容组织由易到难,由浅入深,由单一到综合,循序渐进,可操作性强。每一个任务都以步步高式层次化内容及组织安排,在进阶设计环节有思路点拨,满足不同能力的学生个性化需求,以期能举一反三,触类旁通地自如驾驭编程任务。
四、求渔——掌握方法,学会学习[5-6]
曾有学生问“程序怎么写,你是怎么想到的”?他这是求捕鱼之法,而不是简单的“怎么写?”求答案!“求渔”!这也道出了程序设计教学的根本所在“通过形式化的软件开发流程训练如何思考如何编写”,即问题分析→数据抽象→算法设计→流程设计→语句选择→程序书写→调试、测试与判定→总结,解决学生 “怎么想?(思想方法)怎么写(编程落地)?”的疑问,重点放在思路、算法、编程构思和程序实现上。而不是直接给鱼,即“例程”!同时,努力建立全局意识,先整体后模块,通过算法设计、程序框架、程序流程等强调从整体上把控设计,而不是只记得零星的句式或语法那样只见树木,不见森林。所以此“渔”就是突出重点的软件开发流程。为此,教师特地设置强化逻辑思维训练任务,如歌星大赛计分、推理车号、谁是罪犯、百鸡百钱、数据排序等,即为培养掌握程序设计思想和方法的程序员,更重要的是对大多数学生训练思维解决实际问题,培养探索创新精神,收获带的走的科学的方法能力对每个人都非常有用。以下以著名的“百鸡百钱”问题求解来说明“渔”的方法与能力训练。
(一)“百鸡百钱”的任务目标与分析
中国古代数学家张丘建在他的《算经》中提出了著名的百钱买百鸡问题:鸡翁一,值钱五,鸡母一,值钱三,鸡雏三,值钱一,百钱买百鸡,问翁、母、雏各几何?
1.任务目标
通过该题求解学习分析一题多解的求解方法。理解变量取值范围的穷举、多个变量所有可能值的组合;学习将问题抽象为一系列数据的运算。数据通过变量承载,学习变量设置及其数据类型、初值设计。能正确表达显性的描述,更要洞察隐性的条件。注意外部函数的声明。灵活应用PROTEUS中虚拟终端Virtual Terminal或KEIL进行测试,并对结果进行测试。
2.任务分析
问题中有三个对象:鸡翁、鸡母和鸡雏。百鸡可表示为:鸡翁数+鸡母数+鸡雏数=100;百钱的限定条件可表示为:5*鸡翁数+3*鸡母数+鸡雏数/3=100。这个答案可能不唯一,三种对象的数量有多种组合可满足百鸡百钱的要求,所以此问题可归结为求这个不定方程的整数解。
(二)“百鸡百钱”的算法与流程
1.数据抽象为变量
问题是关于三个对象的数量组合,设三个变量cock,hen,chick,分别代表鸡翁、鸡母、鸡雏这三个对象。且都设置为无符号字符型(数值都在100以内,且是正数)。故百鸡百钱可表示为:
(1)5*cock+3*hen+chick/3=100;
(2)chick+cock+hen=100;
其中也隐含了多种组合的答案中三个对象的数量范围,若全买鸡翁最多买20只,全买鸡母最多可买33只,全买鸡雏可买300只,为方便类计多种结果,设置一变量Count表示解答累计,其值为正且≤255,故数据类型设置为无符号字符型。
2.算法设计——以循环结构遍历所有可能的组合
三种鸡的数量各是多少恰好能满足百鸡百钱?那就要在每种鸡的数量范围内一一组合再代入以上两个表达式中去测试,有多少种组合?应用循环结构在三个变量未知数的取值范围上穷举和组合的方法来覆盖可能得到的全部各组解。满足表达式的便是题解。算法如图1所示。
3.程序框架
先建立程序的整体架构,如图2所示。
4.程序流程构思
根据以上分析与准备,将程序框架细化为流程,如图3所示。再依流程选择合适的语句与结构有条不紊地写出程序。
(三)“百鸡百钱”程序编译、仿真调试、实物测试
1.编译、调试
写程序的目的是为了实现一定的功能,功能是否达到必须经过测试。否则只写不测无意义!源程序经Keil编译成功后,进入下一步仿真测试。如果异常就需要在仿真软件中跟踪调试、找到问题并解决。如果编译不成功可能是手误书写错误、语法或语言规则错误,一般可根据错误提示修改。编译成功就如写文章没错别字,而语句是否合理通畅、逻辑是否正确只有仿真运行测试才可知。所以调试的基本技能是必须掌握的。
2.仿真、测试、判断
用PROTEUS仿真软件进行测试,根据运行现象判断是否达到目标或解决问题。不能判断说明还没理解题目,从头重新开始。判斷结果是异常,那要回头去调试程序,找出问题修正后再测试,直到成功!该实例正确的结果是:
从串口输出4种答案:
1:Cock=0 Hen=25 Chick=75
2:Cock=4 Hen=18 Chick=78
3:Cock=8 Hen=11 Chick=81
4:Cock=12 Hen=4 Chick=84
对以上结果用公式(1)5*cock+3*hen+chick/3=100;(2)依算式:chick+cock+hen=100;进行验证。判断自己的程序设计是否正确。进行实物测试时,可监测串口助手的数据来判断是否成功。
(四)进阶设计与总结
用一元人民币兑换成1分、2分和5分硬币,共有多少种不同的兑换方法。
总结:“百鸡百钱”的算法可推广到穷遍所有可能的组合找到满足条件的组合即是答案,如推断N位数的密码,再如通过称重来判断1角、五角、1元三种面值的硬币数量等。
五、理、仿、实相融合探索式地构建知识与能力
程序设计是高强度的脑力劳动,实践性极强,不是听会看会的,而是手脑并用练会的。事实证明,实践是编程能力赖以生长的土壤,也是这门课化难为易的“金钥匙”。针对高职学生乐于形象思维学习特点,适合在做中学,应用世界最先进的单片机&嵌入式系统及电子电路仿真软件PROTEUS作为形象直观的仿真教学与仿真实践的平台,创建理论、仿真、实践相融合,教学做一体的教学模式,教师应用仿真技术讲解理论与方法,学生跟着进行程序的仿真设计与调试实践,在实践过程中构建自己的知识结构,在实践中探索其中有规律性的认识,将感性认识升华到理性的高度,理性的思考与理性的实践相结合,培养学生会想、会写、会调、会测试的综合能力。
六、在规范中训练职业素养[7]
规范的程序有清晰的层次、有注释有说明,可读性强,便于调试,有问题也容易发现,也方便移植。作风是训练出来的,敬业的职业素养就是通过上课听讲、做作业和上机编写程序等每一个环节来培养的,需要“从我做起,从现在做起”。学习时掌握以下几点:(1)使用TAB进行左缩进。(2)有合适的空行。(3)变量常量命名应统一、见名知意,数据类型尽可能简单,适当为变量分配内存。(4)尽可能详细的注释。
因为当时编程时可能灵感突现,过后就忘了。再拿起来连自己都看不懂了,所以必须对程序语句添加注释。记录思想,记录工作。一般注释内容有:(1)程序名称;(2)程序功能;(3)程序的思路和特点;(4)编程人员、时间、版本等;(5)结果、缺陷、改进思路等。
总之,程序设计能力是计算思维和技能化知识的综合体现。在理仿实融合的趣味任务驱动下通过科学形式化的软件开发方法、流程的编程训练,学生在学知识和长技能的同时获得经验和感悟,形成自己的思维方式,既提高了思维能力和编写程序解决实际问题的能力,也为可持续发展能力贡献重要力量。因会思才会学,也会成为一个有思想的人。
参考文献:
[1]梁碧珍.在程序设计教学中强化计算思维的研究与实践[J].百色学院学报,2012(11).
[2]武仁杰.计算思维与程序设计[J].河北北方学院学报, 2013(2).
[3]周灵彬.基于PROTEUS和Keil的C51程序设计项目教程:理论、仿真、实践相融合[M].电子工业出版社,2016.
[4]张靖武,周灵彬.单片机原理、应用与PROTEUS仿真:汇编+C51编程及其多模塊、混合编程(本科版)[M].电子工业出版社,2015.
[5]刘明军.C语言程序设计(研究型教学模式系列教材)[M].电子工业出版社,2010.
[6][美]肯尼斯·莫尔.课堂教学技巧[M].人民教育出版社,2010.
[7]柳光凯.程序设计教学培养高职学生素质探索[J].计算光盘软件与应用,2012(8).
Thinking Ability-Centered“C51 Programming”Teaching Reform
ZHOU Ling-bin
Abstract:Aiming at cant think and write in the programming, established teaching objectives of program design course with thinking ability training as the core, to build course content in the interesting tasks which integration knowledge, tools, methods and skills training, from the view of scientific methodology to described development process formalism method in the example of hundred chicken hundred money, to fuse theory simulation practice to develop the ability of thinking, writing,debugging and testing for program design and specifications consciousness,standardize the programming?habits. A person who could think so will learn,will also become a thinking man.
Key words:program designing;thinking ability;interesting tasks;development process;theory simulation and practice;specifications