当前位置:首页 期刊杂志

程序设计课程中学生良好编程习惯的培养研究

时间:2024-05-04

于莉莉 苏晓光 李晶

摘要:针对普通高校程序设计课程中学生的良好编程习惯和兴趣培养,提出了从规范性和优化算法提高效率角度转变教学思路,让学生认识到程序复杂度和语法规范的重要性,从而提高学生计算思维能力,为后续课程提供更好的支撑。

关键词:程序设计;规范性;程序复杂度;算法优化

中图分类号:TP311 文献标识码:A 文章编号:1009-3044(2018)17-0188-02

1 引言

随着人工智能的兴起,培养既有特定工程背景,又有程序设计、计算思维能力的人才,已逐渐成为各应用领域的普遍需要。因此,程序设计类课程作为普通高校大一各个专业开设的通识课程显得尤为重要,通过该课程的不同程度地提高学生的程序设计能力,运用计算思维理念及程序设计方法来解决生活和专业中实际问题,课程受众广泛。

程序设计类课程教学中,很多教师往往注重程序的正确性,往往忽视了程序的规范性和质量。我们的教学目标不但要培养学生的编程思想和能力,更要注重规范学生良好的编程习惯,编写出高质量的代码。

2 程序的规范性

规范的程序编写可以增加可读性,同时也便于错误的查找和改进。教师在教学的初期就要严格规范学生的编程习惯,让程序设计优化思想贯穿整個学习过程,对今后的工作和学习是

2.1 命名的规范

让学生建立良好的命名规范,不是符合命名规则的名字语法编译通过即可,而是要见名思议,我么编写的程序最终是要给别人看的,所以慎用单字符的变量名,最好用英文单词和连字符结合的方式,增加程序的可读性。

2.2 运算符的规范

C语言以简洁、灵活而著称,但是不能一味地追求代码的简洁而忽视程序的可读性及安全性,特别是自加和自减运算符的合理使用。很多C语言考试试题追求难度,在自加、自减上大做文章,让学生认为C语言的学习重点在于语法的细节,同时大量的语法细节束缚了学生的手脚,困在其中慢慢对C语言失去兴趣。我们的教学目的是利用C语言解决生活和专业中的实际问题,提高学生解决问题的能力,所以在教学中不能舍本逐末。

其中sum=i+++i+++i++语句涉及++和+的结合性及优先级别的问题,我们就应该规范学生的编程习惯,尽量避免此类可读性差的语句,可以添加括号的方法提高可读性,即sum=(i++)+(i++)+(i++)。但是上面语句在确定优先级别的情况下,不同的编译系统得出的结果也不同。所以不要拿这些题目来测试学生对C语言自增运算符的理解程度,让学生慎用自增运算符来达到简化程序的目的。特别是对于刚接触C语言的学生,对编译器不是很了解的情况下,一旦运行时出错很难定位错误的原因而浪费大量的时间,也不利于建立学生的编程自信。

2.3 规范程序模块化设计思想

一般的教材结构通常函数是在顺序、选择、循环三大结构和数组之后的章节,但是很多软件测试平台都采用的是模块化代码进行测试评分的,如果按照传统的教材顺序讲授,学生很难在初期培养模块化设计思想和良好的编程习惯,而且对于编程平台的运用也有理解障碍。所以,建议课程开始就渗透模块化设计思想和函数概念,模块化编程理念贯彻整个教学和实践始终。先从无参数传递的函数调用再到有参数的函数设计,由浅入深循序渐进。随着学习内容的深入,可以设计相对复杂的实验项目,分配小组协作完成,不同的小组负责不同的模块,最后统一整合。学生工程实践能力和团队协作精神都得到了很大的提升。

3 注重算法和程序的优化思想教学

求解同一个问题的算法可能有多种,进行算法设计的优劣往往在一定程度上体现出设计者的计算机应用能力,所以,我们要学会如何对一个算法进行分析并进行优化[1,2]。一个算法不一定能说它是最优的,我们所说的最优算法是指在某一种衡量标准下,优于解决该问题的所有可能的算法。一般地,解决某个问题的最优算法是指在时间复杂度的基础上的最优性,时间复杂度是指算法执行的时间长短,通过把算法的核心操作执行的次数作为算法的时间度量[3]。

3.1 冒泡排序法的改进

冒泡排序算法是经典的排序算法,C语言中利用循环嵌套来实现N个数的升(降)序排序。N个数要进行N-1趟比较,第i趟中要进行N-i次两两比较,如果不符合排序规律还要进行交换。可是我们发现,如果给定的排序数列本身就符合排序标准了,如果进行N-i趟比较无疑是做无用功。通过设计标记变量(flag)的方法,若有交换flag=1,没有交换则flag=0。通过flag的值来确定上一轮是否排序成功,提前退出循环结束排序。改进的冒泡排序算法的程序段如下:

基本的算法的描述是教学的重点,但是如果仅仅让学生掌握了算法的基本思想和熟悉代码是不健全的,更需要树立算法优化思想,发现算法设计的不足并寻找改进措施,从而提高学生算法设计能力。

3.2 百钱买百鸡的优化算法

“百钱买百鸡问题”是计算机程序设计中的经典算法例题,中国古代数学家张丘建在他的《算经》中提出了著名的:鸡翁一,值钱五,鸡母一,值钱三,鸡雏三,值钱一,百钱买百鸡,问翁、母、雏各几何?我们通常采用穷举法来实现。我们设公鸡数为cock,母鸡数为hen,小鸡数为chicken。那么学生最容易理解的算法就是利用三重循环,公鸡从1至100,母鸡从1至100,小鸡从1至100,来逐一测试每一种方案的可能。这种算法重复执行循环体的次数为100*100*100(106),时间复杂度非常之高。

让学生思考如何优化算法,即排除不合理不可能的方案。学生会发现100文钱,最多能买20只公鸡,最多能买33只母鸡,如果都买小鸡由于受只数的限制也只能买100只且钱有剩余,三重循环只需对公鸡和母鸡可能的枚举范围进行修改。即公鸡的取值范围1~19,因为当公鸡为20时,100文钱正好买20只鸡与题意不符。同理,母鸡的取值范围为1~33,小鸡的价格是1/3文,那么小鸡的只数就一定是3的倍数才合理。这样三重循环的范围缩小为1~19,1~33,1~33。循环执行次数为19*33*33=20691次,通过分析大大降低了算法的复杂度。

我们分析发现,算法的复杂度的决定因素是循环的执行次数,那么是否可以从简化循环的重度来降低算法的复杂度呢?答案是肯定的。可以通过题目中隐含的条件,当公鸡和母鸡只数确定的情况下(循环执行次数为19*33),小鸡的只数即为100-cock-hen ,同理也可以变化为母鸡和小鸡确定(循环执行次数为33*33)或公鸡和小鸡只数确定(循环执行次数为19*33)。这样三重循环可以简化为二重循环,其中最优的算法是第一种公鸡和母鸡只数确定的方案,循环执行次数为19*33=627,算法复杂度大大降低。

循环次数为4次,正好是最终的4种方案。

从上面最初的算法语句的执行频率为106到最后的4,可以看出算法的优化对时间复杂度的影响可见一斑。所以要引导学生不断优化算法,不能只局限于算法的正确性,更要注重算法的效率。

4 结语

计算机程序设计课程是普通高校的通识课程,该课程旨在提高学生分析问题和解决问题的能力,我们在教学中要培养学生良好的编程习惯,在讲授知识的同时更要注重计算思维能力的培养,让学生开阔思维、不断的优化算法,培养编程自信和兴趣,为课程的开展打下良好的基础。

免责声明

我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自各大过期杂志,内容仅供学习参考,不准确地方联系删除处理!