Total.415
March 2018(A
)
The Science Education Article Collects
总第415期2018年3月(上)
摘
要
C 语言是目前大多数高校开设的第一门计算机语
言类课程。本文探讨“C 语言程序设计”课程教学过程中存在的一些问题,明确了一些模糊概念和问题,从而更好地服务教学,为学生学习编程语言打下良好的基本功。关键词
C 语言
教学
误区
Teaching Misunderstandings on "C Language Program 原ming"//Zhang Xiaoling,Wu Zuojun,Liu Xiaojun
Abstract C language is the first programming course in most u-niversities and colleges.In this paper,the problems on teaching "C Language Programming"were proposed;some confusing ar-guments were clarified for the purpose of enhancing teaching lev-el and helping students lay a solid foundation for computer lan-guage learning.
Key words C Language;teaching;misunderstandings
C 语言作为面向过程的结构化程序设计语言,是很多年来较流行的高级程序设计语言。大部分高校选择C 语言作为理工科专业的入门程序设计语言。作者长期从事“C 语言程序设计”(后简称“C ”)的基础教学工作,通过反复教学摸索和听评课等,发现任课教师在教学内容和方法上存在部分教学误区、忽略之处以及学生在学习中出现很多问题与困惑。对此,本文提出一些针对性的建议和说明。
1书写“算法”——
—重要且必要计算机科学家沃斯用“算法+数据结构=程序”指明任何程序设计的核心工作都是“两步走”:设计算法和数据结构。看似简单的一句话,却从繁复的表象中抽离出事物的本质。设计一个程序,其中一个主要要素即算法,所有程序员都深刻明白算法有多重要,有教材指出:算法是程序的灵魂,这一观点毋庸置疑。为突出算法在编程中的重要地位,一些教材单独列出一章介绍算法,但在实际教学过程中作者发现,大多数教师匆匆略讲此部分,后续章节中有否反复向学生呈现完整的算法和强调编程之前书写算法的重要和必要性呢?学生在学习过程中有没有养成先写算法再写代
码的习惯呢?不设计算法而直接写程序的不良习惯会否对学生深入学习或学习其他语言产生不良影响呢?
李开复曾指出很多人对学习计算机就是“学各种编程语言,或者认为,学习最新的语言、技术、标准就是最好的铺路方法”之类的错误认识,他提到“算法是计算机科学领域最重要的基石之一,却受到了国内一些程序员的冷落”,又指出:“编程语言虽然该学,但是学习计算机算法和理论更重要,因为计算机语言和开发平台日新月异,但万变不离其宗的是那些算法和理论。”
算法在《C 》教材中虽然篇幅很小,但其在编程中的“灵魂地位”不能忽略。建议教师在讲解每一个编程例题时(不管题目有多简单)首先写算法,根据写好的算法分析并使用C 语句实现,同时要求学生完成编程作业时,第一步必须书面呈现算法过程,加强算法的学习。尤其是非计算机专业,未开设关于算法学习的专门课程,需要教师在教学过程中更多融入和强调算法的介绍与指导。
2数据结构与数据类型——
—两个概念编程的另一项重要工作是确定数据结构。部分教师在教学中常把“数据结构”和“数据类型”混为一谈,学生听得云里雾里。数据结构是用来反映一个数据的内部构成,即一个数据由哪些成分、以什么方式构成,呈现什么结构。C 语言中的数组即是一种数据结构。另外,不同的计算机语言允许定义和使用的数据结构不同。如C 语言提供了“结构体”数据结构,而FORTRAN 没有。总之,数据结构是数据的组织或存在形式。
数据类型是指有相同数据结构的同一类数据的值和操作的集合。高级语言中,数据类型用来说明一个数据在数据分类中的归属,限定数据的变化范围。
因此,数据结构和数据类型并非一个概念。为区分二者,教师在“C ”课程中可借鉴原子和分子的比喻来帮助学生理解:把int 、char 、float 、double 等数据类型看作原子,它们是元素种类的不同,只涉及自身的不同,比如两种原子内的质子中子数不同,是一种内在属性。把数组、结构体、共用
“C 语言程序设计”教学误区探讨
张晓玲
吴作君
刘晓军
(中国石油大学胜利学院机械与控制工程学院
山东·东营
257061)
中图分类号:G642文献标识码:A
DOI :10.16871/jki.kjwha.2018.03.032
基金项目:山东省本科高校教改项目(项目编号:C2016M076)、中国石油大学胜利学院重点教改项目(项目编号:JG201703)、中国石油大学胜
利学院高等教育研究项目(项目编号:GJY201709)。作者简介:张晓玲(1982—),女,硕士,讲师,研究方向为工业过程建模、工业过程故障检测与诊断。
71
教改教法
体、链表等数据结构看成分子,它们描述的是数据间的关系,恰如分子描述了原子的组合方式。由此比喻总结出:数据类型是一种属性,数据结构是一种关系,由这些数据类型可构造出不同的数据结构。
3“说明”和“定义”——
—不是一回事
学习“C”时,“说明”和“定义”的使用始终存在着混淆,尤其是学生作为初学者,时而听到老师提到“定义一个变量/函数”,时而听到老师讲“说明一个变量/函数”,会产生一种错觉,以为说明一个变量/函数和定义一个变量/函数指的是同一件事。教师有必要向学生表述清楚它们之间的差别,对初学者尤为重要。
“说明”一个变量表示向编译程序描述变量类型,不为变量分配对应的存储空间;“定义”一个变量不仅确定变量类型,还要为变量分配空间。教师可通过程序举例1向学生澄清二者区别。
程序举例1:
struct date{int month;int day;int year;}/*说明一个结构体类型,未定义任何struct date类型的变量*/
void main()
{extern G;/*是说明,不是定义。说明G是一个已定义的外部全局变量*/
struct date birth;/*定义变量birth是struct date类型*/
…}
float G;/*是定义,定义G为单精度外部变量*/
注意,变量的定义在程序中只出现一次,而说明可以多次出现在需要的地方。例如用extern对全局变量进行说明,在一个文件中先定义变量,在其他用到这些全局变量的文件中用extern说明,说明这些变量已在其他编译单位中定义,通知编译程序不必再为它们开辟存储单元。
同样,函数的说明与定义也有本质区别。函数定义是定义函数本身,包括函数首部和函数体,它是一个独立模块。函数说明是函数的原型说明,把函数名、函数参数的个数和类型等信息通知编译系统,以便遇到函数调用时编译系统能正确识别函数并检查调用是否合法。
4do-while语句!=直到型循环
程序语言中的循环分两类:
“当型”和“直到型”循环。当型循环过程:当条件成立时执行循环体语句,执行完后,再判断条件是否成立,如此循环下去,直到条件不成立脱离循环。直到型循环:先执行循环体语句,后判断条件,若条件不成立再执行循环体,如此反复,直到条件成立结束循环。
毋庸置疑,C语言中while和for语句属当型循环,do-while语句因其操作过程是先执行循环体、后判断条件,很多教师和学生认为它是直到型结构。实际上,C语言并未提供直到型循环。如下程序举例2,do-while语句过程是先执行循环体语句s=s+i;i++;再判断条件i<=100是否成立,若成立,继续反复执行循环体,直到条件不成立退出循环,该循环对应的算法流程与直到型循环的不同是:条件成立时执行循环体。
程序举例2:
s=0;i=1;
do{s=s+i;i++;}while(i<=100);
因此,do-while是先执行循环体、后判断条件的一类当型循环(因为当条件满足时才执行循环体),与直到型截然不同。有教材将do-while语句描述为“实现直到型循环结构的控制”,此说法不当。而Pascal中的repeat-until语句才是真正的直到型循环。上例中的do-while语句可用repeat-until改写,代码为:
s:=0;i:=1;
repeat s:=s+i;i:=i+1;until i>100
此例中,只有i>100为真时循环结束,这才是真正的直到型循环,即条件不成立时继续循环,直到条件成立结束循环。所以,C语言中的do-while与Pascal语言的re-peat-until语句结构相似,都是先执行循环体、后判断条件,区别是do-while条件成立时执行循环体,repeat-un-til条件不成立时执行循环体,条件i>100与do-while的条件i<=100相反,且直到条件成立循环完毕,符合直到型循环思想。
因此,不能简单地将所有“先作、后判”的循环结构都认作直到型循环,容易误导学生将条件弄反,导致错误的出现。
5结语
C语言是很多编程人员和大部分高校学生学习的入门语言,如果初学者能对C语言有一个全面系统的认识,掌握结构化程序设计语言的精髓,打下良好基础,为今后深入学习和快速掌握其他编程语言大有裨益。本文针对“C”课程教学过程中存在的问题提出几点建议,希望能帮助教师不断完善教学内容,最终让学生受益。
参考文献
[1]谭浩强.C程序设计[M].第四版.北京:清华大学出版社,2010.
数据结构与算法c++版 pdf[2]李开复.算法的力量[J].程序员,2006(4):43-46.
[3]贾蓓,姜薇,镇明敏.C语言编程实战宝典[M].北京:清华大学
出版社,2015.
[4]占跃华.C语言程序设计[M].第2版.北京:北京邮电大学出版
社,2011.
编辑李金枝
72
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论