Debug演示教学法在C程序设计教学中的应用

来源 :计算机时代 | 被引量 : 0次 | 上传用户:pptcowboy
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
  摘  要: 针对实际教学中初学C程序设计理解困难、调试能力弱的问题,提出Debug演示教学法,在课堂教学中反复应用,可以做到透彻的讲解,使学生更易理解核心概念,提升调试能力。
  关键词: C程序设计; Debug; 演示; 教学法
  中图分类号:G642          文献标志码:A     文章编号:1006-8228(2019)05-74-03
  Abstract: Aiming at the problems of difficult understanding and weak debugging ability that C programming beginners are faced with, this paper puts forward the Debug demonstration teaching method. Repeatedly using it in classroom teaching can achieve understandable explanations, making students easier to grasp the core concepts and improve debugging ability.
  Key words: C programming; Debug; demonstration; teaching method
  0 引言
  C语言是主流的编程语言,即使是近十年,C语言也一直处于TIOBE编程语言排行榜TOP2的位置。C语言在程序设计语言中的地位就像是钢琴在乐器中的地位,是程序设计语言之王,很多高级语言都有C语言的影子。目前,绝大部分工学专业选择C语言作为编程类通识课程选修课,计算机类、电子类专业选择C语言作为专业基础课程[1],力求培养学生良好的程序分析、编写、调试能力,为后续课程的学习打下良好的基础。
  但是,在实际教学中,教学效果往往并不理想,主要表现为学生基本知识和技能掌握不牢,灵活应用的能力较差。笔者认为主要原因在于没有深入理解核心概念,教学中没能重视Debug调试工具的演示和剖析其重要作用,大部分教材也没有“调试技巧”章节。犯错、排错是学习程序设计的必由之路,调试程序是教学的重要组成部分,应该贯穿于C程序设计教学的始终[2]。反复应用Debug演示教学法,可以有效解决上述问题,明显改善教学效果。
  1 Debug演示教学法
  1.1 基本含义
  学习C程序设计,先要分析问题,编写源程序,然后在集成编程环境(IDE)中编辑、编译、生成、运行。在通过编译、生成阶段后,Debug调试往往是纠正程序逻辑错误的必要步骤。用Debug就可以进行动态调试,深入分析程序流程执行情况和关键变量的值变化情况。以Visual C++为例,Debug的主要功能有单步进入(F11)、单步跳过(F10)等。
  Debug演示教学法即教师借助Debug调试工具把典型的程序例子简单明了地演示给学生,通过观察流程执行情况和关键变量的值,揭示程序设计概念、原理的本质,帮助学生加深对概念、原理的理解。
  1.2 作用和价值
  用Debug演示教学法,能让学生清清楚楚的看到代码执行的全过程,每一步的执行效果,变量值如何变化的,都明明白白[3]。不停留在表面的代码上,而是让学生透彻理解核心概念,这样才能让学生灵活运用基础知识和基本技能进行编程。
  用Debug演示教学法,不但可以增强学生的感性认识,正确理解概念,还可以充分调动学生的学习积极性,提高学生学习兴趣,活跃课堂气氛,有利于学生观察、分析、调试能力的培养。
  2 用Debug演示教学法讲解C语言的几个核心概念
  2.1 三种基本结构
  顺序、分支和循环三种基本结构是任何一门程序设计语言的基础。虽然画流程图、写伪代码、读程序都是常用的讲解程序流程的具体方法,但是它们都不如Debug调试程序来得直接、深入、透彻。要让初学者真正的理解程序流程,最好在流程图讲解之后再演示一下程序执行的全过程,用单步跳过(F10)执行,学生一看就能明白程序是如何一步一步执行的,再多加练习,就能理解程序的执行过程了。
  例如,编程实现,输入一个年份,判断是否闰年。如图1所示,在程序编辑、编译、生成、执行都完成后,再用单步跳过(F10)执行,代码窗口中,黄色箭头指示的就是当前代码行,此时,变量year的值已经通过scanf()函数输入,是2000。&year是year的地址,值是0x0019ff3c。接着,按F10,程序执行当前行,也就是if语句,判断,是闰年,可以看到,黄箭头指向下一行待执行的代码,运行结果及时输出到控制台。
  类似的,对于for循环,重点演示循环控制变量是如何变化的,对于while循环,则重点演示循环条件是如何变化的,这样就可以做到一目了然。
  2.2 数组
  数组是C语言的一个难点。数组就是,用同一个数组变量名字,引用批量的同类型数据,不同的数组元素用数组变量名字加不同的下标来引用。很多学生对组数的基本概念和基本操作理解不透,主要原因就是不理解数组中各元素在内存中是连续分配的。
  冒泡排序是数组应用的典型例子,用Debug演示,不但可以把排序的过程看明白,还可以把数组元素的变化看明白。如图2所示,数组f未赋值之前,每一個数组元素的值都是未确定的,只有数组f的地址是确定的:0x0019ff08。值-858993460只是Debug模式下编译器对未初始化的变量赋的缺省值。接下来,按F10,执行了int f[]={2,1,9,10,17,6,7,5,12,4};这一行,数组的各元素值如图3所示。显然,每一个数组元素分量都是按顺序排列的,用同一个名字f,不同的下标0,1,2,3,…来引用。   2.3 函数与递归
  函数也是C语言的难点。如:调用函数时,程序流程是如何跳转的;调用函数时,实际参数是如何传递给形式参数的;为什么数组作为参数就是传地址呢。
  如图4、图5所示,借助Debug,可以看到,在main()函数中,当程序执行到BubbleSort(f);按F11,程序流程跳转到函数BubbleSort(int a[])里执行。实际参数f和形式参数a,值都是0x0019ff14。这是一个地址,是数组f的地址,这样,就很好理解。实际参数f传递给形式参数a的,就是这个地址。因此,在函数BubbleSort里任何对数组a的修改就意味着是对数组f的修改,对a[i]的改变就是对f[i]的改变。这样,就实现了本来无序的数组元素,进入函数BubbleSort后,经过排序后,变成了有序的数组元素,而这个结果是“带出”到函数BubbleSort之外了,数据的传递“感觉上”是双向的,实际上还是单向的,只是不同的是传递的是地址。不像普通的传值参数,是单向的,传值的形式参数也只是一个局部变量而已,你要想返回值,必须用return來返回。这样,学生就容易理解并区分两种参数传递方式的基本原理。
  递归是函数定义和调用的一种特例[4]。用Debug演示,通过逐语句的执行,可以观察到递归调用的全过程。另外,用Call Stack工具也可以清晰地显示出各个函数之间的调用顺序。
  除了上述核心概念外,指针是最难理解的。应用Debug,也可以很好的理解指针就是地址。
  3 应用Debug演示教学法需注意的几个问题
  ⑴ 用实际的、有趣的例子,循序渐进,不断迭代,用不同的知识技能不断改写程序。学生既通过不断获得小小的成就感来增强自信,培养兴趣,又通过不断解决难度加大的问题来提升编程能力。
  ⑵ 演示要不紧不慢,严谨细致,讲解要切中要害。
  ⑶ 单个演示时间不宜太长,太冗长的演示会让学生的注意力明显下降。但是,演示的目的是让学生看明白,必要时可以重复演示。一定要给学生留够时间练习强化。
  ⑷ 可用设置断点(Breakpoint)、Memory、Wactch等多种技巧和工具来观察关键变量的值[5]。也可在程序中适当的地方插入printf函数来输出关键变量的动态值。
  ⑸ 注意在演示教学中培养学生良好的编码习惯,良好的编码习惯才能锻炼出优秀的程序设计能力[6]。
  ⑹ 如果作为专业基础课,要注意适当的结合计算机的基本原理和编译程序的基本原理来讲解。
  4 结束语
  本文在提出Debug演示教学法的含义、作用和价值的基础上,阐述了具体应用它来讲解C程序设计核心概念的教学实践要点,最后对需注意的问题进行了总结。Debug演示教学法能让讲解更加生动直观,让初学者更易理解,分析、调试的能力明显提升。不言而喻,Debug演示教学法还可以推广到Java、Python等其他程序设计语言的教学中。
  参考文献(References):
  [1] 闯跃龙.C语言、VB还是 Python?—谈高校非计算机专业学生编程入门课程选择[J].计算机教育,2018.7:32-34
  [2] 陈圣磊,刘林源.调试技术在C语言程序设计教学中的作用探讨[J].电脑知识与技术,2015.11(24):80-82
  [3] 岳俊梅.单步运行调试技术在C++语言教学中的重要性研究[J].计算机教育,2008.4:91-93
  [4] 郑晓健.C语言程序设计(第2版)[M].清华大学出版社,2017.
  [5] 王洋.浅谈调试技术在非计算机专业的C语言程序设计教学中的应用[J].教育教学论坛,2016.10(42):177-178
  [6] 文艾,陈卫卫.高效程序设计的七个习惯[J].计算机教育,2017.4:41-42
其他文献
摘 要: 构建完善的教学质量保障体系,加强教学质量管理,是保证高职院校人才培养质量最为关键的主题。文章试图从“以人为本”的角度,探讨教学质量监控与评价制度中存在的现实问题,尝试和探索在操作层面解决问题的途径与手段,以进一步健全和完善教学质量传统单一的保障体系,提高高校教学质量。  关键词: 教学质量; 以人为本; 监控; 评价  中图分类号:G648.2 文献标志码:A 文章编号:100
摘 要: 随着地震勘探精度不断提高,野外勘探数据量逐年增大,GeoEast系统中运行的项目数据量呈PB级增长。Oracle服务器负载过重导致假死和死机、监听服务异常给GeoEast项目的正常运行带来了重重困难。针对上述问题,从GeoEast数据库调优技术的研究入手,分析造成Oracle负载重的各项因素,以及对不同场景下监听状态的判断等,归纳出一些数据库调优技术和方法,以作参考。  关键词: Geo
摘 要: 国内景区在遇到节假日大客流冲击时,需要及时提供实时客流数据给政府和景区管理部门,并满足大量游客实时访问网站系统相关旅游服务的要求。部署在云平台上的智慧景区平台通过快速启动大量Docker容器,实时调度服务资源,水平扩展相应的应用服务,达到迅速扩容、提高系统访问性能的目的,满足大量游客实时访问的需求。文章分析了微服务架构的技术特点,并研究其在智慧景区中的实际应用。  关键词: 智慧景区;
摘 要: 以IEEE802.11协议教学为例,阐述了计算机网络原理教学过程中如何使用Wireshark协议分析软件,让学生直观地理解网络协议原理。简略地介绍了IEEE802.11协议,以及无线链路层帧的基本捕获方法。在分析帧结构的基础上,展示了AP信标帧、用户认证和关联过程的相关链路层帧的组成。通过观察主机和AP热点之间的数据交换过程,帮助学生学习AP热点发现、认证和关联的基本原理。实践表明,在课
摘 要: 为适应经济全球化,提高教学质量和国际竞争能力,介绍高校开展双语教学的现状和发展趋势。从计算机网络课程双语教学的教学目标和定位出发,结合近五年的教学实践,分析该课程双语教学中存在的问题,提出了个人的思考和见解。认为良好的师资队伍,学生的学习兴趣和正确认知以及灵活的混合式教学方法是解决问题的关键所在。  关键词: 计算机网络; 双语教学; 教学实践; 教学质量; 混合式教学模式  中图分类号
摘 要: 高校课堂是进行社会主义核心价值观教育的重要阵地,其中公共课受众面广,在促进学生健康成长、深化教学改革等方面起着重要、独特的作用。文章以计算机基础课程为例,从加强教师综合素质、深入挖掘教学内容、优化教学方法、运用新的教育技术和改善学习环境等方面,探讨了将社会主义核心价值观融入公共课教学的具体实施办法及应注意的问题。  关键词: 社会主义核心价值观; 公共课; 计算机基础; 教学内容  中图
摘 要: VB这门以英语作为编程语言,其中又渗透数学思想的课程,对中职学生来说,有一定难度。文章探究基于移动端的线上、线下相结合的混合式教学方法。通过”线上”自主探索”、“线下”与老师面对面的交流,激发学生的学习欲望,提高VB课程教学的有效性。  关键词: 混合式教学; 面对面教授; 线上; 线下  中图分类号:G712 文献标志码:A 文章编号:1006-8228(2019)02-80