如何破解C语言难学的困局
2018-11-01巨同升
摘要:针对C语言语法难学的问题,宜采取分化处理的学习策略。一开始只学习常规的基础语法,更多的非常规语法应该在具备了一定的编程能力之后,在阅读程序、编写程序的实践中通过逐步积累的方式掌握。基本的编程能力要通过反复地阅读程序、调试程序和编写程序获得。而进一步的编程能力,可以通过面向项目的学习,在解决现实问题的过程中培养。
关键词:常规语法;编程能力;面向项目的学习
中图分类号:TP312 文献标识码:A 文章编号:1009-3044(2018)18-0150-02
1 引言
C语言作为一门专业型的语言,具有功能强大、运行效率高、实用性强等特点。但是若作为学习程序设计的入门语言,C语言却存在着诸多不足之处,比如C语言的语法过于灵活,C语言的指针功能过于强大等[1]。凡此种种,往往会给初学者造成诸多的困惑,甚至严重打击初学者学习程序设计的自信心。
C语言难学似乎是初学者的一个共识,那么C语言到底难在哪里,如何才能破解C语言难学的困局呢?其实,C语言学习的难点主要在于其语法。而造成C语言语法难学的主要因素包括以下几个方面。
1)C语言提供了多种功能独特的运算符,诸如自增(自减)运算符、复合赋值运算符、条件运算符、逗号运算符、位运算符等等。
2) C语言允许将赋值表达式、自增(自减)表达式嵌入到其他表达式中,导致了C语言语句的表达形式灵活多变。
3)C语言中指针的使用无处不在、功能异常强大。
4)C语言中大大扩展了逻辑运算量的类型。
5)C语言中花括号与分号的位置,若稍作变化,则往往会导致完全不同的含义。
以上特色一方面造就了C语言优异的性能,另一方面也给初学者埋设了诸多的困惑与陷阱。令人爱恨交加,欲罢不能。
下面从三个方面探寻正确的C语言学习之道。
2 如何学习C语言的语法
其实,只要采取了正确的学习策略,C语言语法难学的问题是可以解决的。
首先,需要明确语法在程序设计中的地位。学习C语言的最终目的是为了学会编写程序解决现实问题,因此编程能力的培养是学习的核心。而语法是编程的基础,是为编程服务的,因此语法的学习应当紧紧围绕编程这个核心,脱离了编程的语法是毫无意义的。
是不是说必须系统地、牢固地掌握了C语言的语法,才能学好编程呢?其实并非如此。对于程序设计来说,更重要的是确定编程的总体思路或者说是算法,而不是具体实现中的语法[2]。既往的经验表明,只需要掌握少量最常规的语法,就可以编写出解决一般问题的程序。至于有些非常规语法,即使是专业的程序员都极少用到,更别说是初学者了。
因此,在学习时不要过于看重语法知识的系统性与连贯性,而应当根据程序设计的需求,循序渐进地积累语法知识[3]。比如,C语言中的运算符与表达式特别丰富,若将这些内容集中到一章中学习,则既枯燥乏味,又难以深入理解;若根据语法与程序设计的内在联系,将这些内容分布到适当的章节中讲述,则既容易理解,又便于学以致用。比如,自增(自减)运算符和逗号运算符在学习循环结构之前就几乎不会用到,完全可以延后到循环程序部分再学习。
初学者应当优先学习那些既容易理解、又频繁使用的常规语法;而尽量避免研究那些既晦涩难懂、又极少使用的非常规语法。比如j=i++ + i++ +i++、a+=a-=a+a这样的表达式,在实际编程中几乎不可能出现,因此并无研究的必要。再比如,printf函数中各种格式说明符的详尽用法、整型数据的内存表示形式及相互转化、扩展的逻辑运算量及逻辑运算的短路、for语句的各种变式、通过指针引用二维数组的元素、行指针变量、指向函数的指针、链表等,这些内容初学者最好暂时不要深究。
当然,并不是说这些非常规语法就完全不做研究,而是要选择恰当的学习方式和时机。正确的学习方式是在编程实践中研究语法,包括在阅读其他人写好的程序时发现并掌握新的语法知识点,以及在自己编写程序、调试程序的过程中查阅并掌握需要用到的语法知识。这种学习方式具有更好的针对性,因而能够获得更好的学习效果。而正确的学习时机,则是在比较熟练地掌握了常规语法并能够编写一般难度的程序之后,再来研究这些非常规语法。采取这种策略相当于降低了知识之间的跨度,从而能够更好地理解和掌握知识。
3 如何培养基本的编程能力
编程能力的培养需要一个长期积累的过程。那么,如何才能逐步地积累编程的经验呢?
首先是要尽量多地阅读其他人写好的程序,能够看懂程序实现的功能,分析出每条语句的作用,即如何一步步实现程序功能的。
然后上机调试阅读过的程序,从最简单的程序入手,将程序代码一条一条地录入、编辑,然后编译、运行。在调试程序的过程中,能够发现在书面上静态分析程序时难以发现的问题,然后经过查阅资料、主动思考、改正错误的过程,即可获取新的知识和技能[4]。而这种收获是仅仅通过书面学习方式所不能得到的。因此,可以说不厌其烦地反复调试程序是学好程序设计的制胜法宝,这种说法一点都不为过。
在不断阅读已有程序的同时,还要经常地自己编写程序。从模仿已有的程序入手,尝试编写简单的程序。编写程序的过程最好在电脑上完成,一边编写、一边调试运行,然后根据调试中发现的问题及时地修正程序。在不断地改正错误的过程中,你的编程能力将会得到有效的提高[5]。
对于具有一定复杂度的程序,可以首先尝试实现其中的一部分功能,待现有的程序调试运行成功之后,再在此基础上扩展一部分功能,然后如此循环往复,直至最终获得功能完善的程序。
4 如何让编程水平更上一层楼
在具备了基本的编程能力之后,如何才能使得自己的编程水平更上一层楼呢?将程序设计应用于解决现实问题是提高编程能力的行之有效的方法,而面向项目的学习就是一种体现这种思路的卓有成效的培养学生综合分析问题、解决问题能力的教学模式[6]。
所谓项目,是指来源于现实中的、具有一定复杂度的问题,通常需要学生运用多方面的知识综合分析、统筹规划才能解决。
面向项目的学习,需要学生自行查阅资料,准备与项目相关的知识。通过这种方式所获得的知识是最牢固的、最有机的知识,更重要的是在这个过程中提高了学生自主学习的能力。来自现实中项目,往往是错综复杂的,在分析问题的过程中需要舍弃非本质的内容,提取出本质的核心问题,从而可以培养学生综合分析问题、统筹规划和解决复杂问题的能力。
参考文献 :
[1] K.N.King.C语言程序设计现代方法(第2版)[M].北京:人民郵电出版社,2010.
[2]巨同升.C语言程序设计——从入门到进阶[M].北京:人民邮电出版社,2011.
[3]余兆钗.C语言教学改革的探索与实践[J].襄阳职业技术学院学报,2018,17(2):60-62.
[4]王义元. 基于“做中学”的职业中学C语言“五步教学法”探索[J]. 信息与电脑 (理论版) ,2017(24):223-225.
[5]吴元斌. 提高C语言初学者编程能力的几点措施[J]. 现代计算机(专业版) 2015(1):13-15.
[6]丁丽.项目驱动式教学法在C语言教学中的应用[J].信息技术与信息化,2012(5):33-35.