徐晓
[摘 要]二本院校计算机专业学生普遍感觉C语言难学,学习效果差,不能为后续语言学习奠定基础。本文从数据类型角度分析这种状况产生的原因,提出C语言的数据类型存在的缺陷,其中字符串部分尤其突出,并提出相关解决方案,旨在为相关研究提供借鉴。
[关键词]C语言;字符串缺陷;二本院校
doi:10.3969/j.issn.1673 - 0194.2019.10.088
[中圖分类号]TP312 [文献标识码]A [文章编号]1673-0194(2019)10-0-02
1 二本院校计算机专业选择C语言作为入门语言的原因
大学计算机专业编程教学的入门语言多年来一直以C语言为主,不过近年来一些学校开始选择Java或Python作为入门语言。但是对于二本院校计算机专业来说,大多数还是选择C语言作为入门语言,原因如下。第一,如果选择Python作为入门语言,虽然入门容易,也很容易学会,但是二本计算机专业学生毕业后很多还是从事前端、后端、客户端等方面的开发工作,其主要语言是Java、C#、Javascript、php等,其基础语法都是基于C语言的语法,而Python的语法则与这些语言完全不同。同时,二本学生的学习能力和应用能力不如一本学生,学习Python后转到Java、C#等语言的难度大。第二,如果选择Java语言作为入门语言,虽然可以一步到位,但是零编程基础的二本学生一开始就要接触大量编程知识,学习难度很大。
2 C语言数据类型的缺陷
2.1 数据类型应具备最低要求
在软件编程过程中,最长的数据类型有两大类:①数值类型,包括整数与浮点数,用于表示多少或大小,如工资、价格、产量等;②字符串类型,用于表示是什么内容,如姓名、品牌、部门、地点等。其中,字符串在数据库中出现的频率甚至超过了数值类型。虽然在C#、Java等语言中没有把字符串作为最基本的类型,但是都提供了string类,让开发者把字符串作为基本类型。对于一个有经验的程序员来说,在编程时认为以下两个语句都很基础,通常并不区分其中哪个更加基础。
int num=10;
string name="phone";
由此可见,一门语言至少要提供数值类型和字符串类型,才能构建完整的数据类型。但是C语言只提供数值类型,没有提供字符串类型。
2.2 C语言的数据类型缺陷及影响
仔细研究C语言中的各种数据类型可以发现,C语言在数据类型方面存在很多问题,几乎所有的数据类型都是数值类型。例如:char与int可以通用;没有逻辑类型,逻辑值用0和1表示;没有字符串类型,存放字符串需要用数组,而数组名本质上是指针,而指针就是地址,实际也是一个长整型数。教师可以在教学中给学生强调char和int的不同,但是从标准C提供的库函数编译系统并没有严格区分char和int。例如下面的库函数无论是形参还是返回值均应该是char类型,但在标准C中都声明为int类型。
int toupper(int ch)
这样会导致学生在编写函数时很难正确理解和使用数据类型,也给教师讲解函数编写带来困难。例如编写一个返回字符的函数和返回整数的函数时,学生用如下形式都是行得通的。
int fun(....){......}
另外,变量在赋值时应该赋同一类型的值,这是基本编程训练中被反复强调的知识点,但是在标准C中,明显不一致的语句却能畅通无阻运行,导致学生对知识点产生困惑。C语言这种数据类型的设计最初是为了让C语言具备最大的灵活性,充分发挥C语言作为中级语言的特长。但是这种数据类型的单一性和灵活性对二本学生学习编程带来了很大的问题。
(1)无法培养学生数据类型的意识。作为编程人员,看到一个变量会很自然地去想其属于什么类型。C语言这种类型的单一性使学生很难培养对类型的敏感性,尤其是在编写函数以及后续语言中的类时,对数据类型的感觉显得尤其重要。
(2)编程教学及练习题目单一,题型大多局限于数论或数值分析问题,如素数问题、位数问题、圆周率问题等,类似一门数值分析的课程,而目前的应用软件大多数是数据处理功能,在这种情况下,学习C语言很难为学生开发后续软件奠定良好的基础。
3 C语言中字符串存在的问题
数据类型应该包括数值和字符串两大类,但C语言几乎所有类型都归结为数值类型。C语言没有专门的字符串类型,字符串是通过数组来存放,这样的处理方式对二本学生来说存在诸多问题。
3.1 C语言与后续语言关于字符串的差异性
以目前常用的Java和C#为例,与C语言进行关于字符串的用法对比,结果如表1所示。
从上述比较可以看出,Java、C#等语言关于字符串的用法与C语言完全不同。换句话说,学习了C语言中的字符串方面的知识在后续语言中几乎用不上。二本院校的学生学习能力稍弱,没有必要花大力气去学习后面几乎用不上的字符串的
知识。
3.2 学习C语言字符串难度大
二本学生普遍感觉C语言中的字符串难学。因为C语言没有字符串类型,而是使用数组存放字符串,在编程时需要考虑存储问题。例如,下面两个语句前面的是正确的,后面的是错误的。
char x[5]="ok"; //正确
char y[5]="hello" //错误,数组存放不下字符串
此外,学生常常搞不清楚将上述语句中的x理解为数组还是理解为字符串,在概念上的困惑会直接影响编程。
3.3 学习指针的难度大
二本学生普遍感觉指针难学。由于C语言用数组存放字符串,而数组名其实是指针,当字符串作为函数参数时通常要写成指针形式。这样一来,学生为了学习C语言的字符串,需要先搞明白数组和指针,这样就抬高了学生使用字符串的门槛。尤其是难学的指针拦在字符串的前面,导致二本学生觉得指针难学,不能完全掌握并应用自如。
4 学习C语言字符串数的简单描述
(1)C语言数据类型单一,各种类型几乎都归结为数值类型,急需一种完全不同的类型(如字符串類型)来培养学生对数据类型的感觉。
(2)C语言提供的字符串处理是通过数组、指针来实现,对学生难度大,而且指针本身也是数值,不仅没有起到丰富数据类型的作用,而且还十分难学。
虽然学生学习C语言比较困难、学习效果差,但是目前尚未看到二本院校从上述角度去解决问题,更多只是针对学生情况修改教学方案,但实际上,基于标准C的语法框架限制,这种修改没有多少可以变动的空间,往往是降低难度的同时降低了对学生的要求。对于一本学生而言,较强的自学能力和学习自主性能够弥补C语言的缺陷;但是对于二本院校学生,这些缺陷却能让学生在学习过程中不知不觉地把主要精力陷入C语言语法知识中,疲于概念理解,不能掌握基本编程能力。一般而言,二本学生的及格率并不是很低,但这不表示学生已经奠定了编程基础,只是教师降低了课程要求。换句话说,教师对此现状没有制定相应对策,导致教师教得痛苦、学生学得痛苦,难以培养学生对专业的兴趣。
5 结 语
对于二本学生来说,C语言在数据类型尤其是字符串上存在缺陷,导致二本学生学习C语言的效果不佳。因此,学校应弥补这个缺陷,让学生理解C语言,为后续课程的学习奠定扎实的基础。
主要参考文献
[1]王宇哲.C语言与Java对比下的优点[J].电子世界,2018(2).
[2]马乾颉.程序设计语言C与Java之探讨[J].信息技术,2010(10).
[3]车万翔,苏小红,袁永峰,等.计算机专业高级语言程序设计课程改革探索[J].计算机教育,2014(13).
[4]胡国柱.基础课程C语言与Java语言的优劣漫谈[J].福建电脑,2011(11).
[5]蒋晓明,徐启振.用C语言字符串实现多位整数的高精度计算[J].福建电脑,2004(6).
[6]申定保.C语言考试中的语法结构和算法分析[J].电脑知识与技术,2004(2).
[7]周建儒.C语言与C++语言几点差异的应用实例分析[J].河北软件职业技术学院学报,2016(1).
[8]白春霞,张维宝.基于C语言中字符串长度计算问题的探讨[J].电脑知识与技术,2010(29).
[9]倪瑞晓.C语言编程技术的分析研究[J].计算机技术与发展,2009(12).
[10]张盼盼.C语言之如何判断回文串[J].现代计算机,2016(31).
[11]雷金,彭秋生.浅谈C语言字符串格式化[J].湖南生态科学学报,2012(1).