APP下载

高校非计算机专业C语言课程教学改革初探

2019-05-22周燕艳海深

电脑知识与技术 2019年6期
关键词:非计算机专业C语言改革

周燕艳 海深

摘要:从C语言课程和非计算机专业学生的特点出发,分析了目前该课程在教学过程中存在的一些现状及需要解决的问题;并针对如何培养学生的学习能力、提高学生的学习兴趣、发挥学生的创造性等问题,作者从教学及实践方法上有针对性进行教学改革实践,收到了比较明显的教学效果。

关键词:非计算机专业;C语言;改革

中图分类号:G64 文献标识码:A 文章编号:1009-3044(2019)06-0114-03

A Probe into the Teaching Reform of C Language Course for Non-computer Majors in Colleges and Universities

ZHOU Yan-yuan, HAI Shen

(School of Mathematics and Computer Science, Tongling University, Tongling 244000, China)

Abstract: Starting from the characteristics of C language course and non-computer majors, this paper analyses the current situation and problems that need to be solved in the course of teaching, and aiming at how to cultivate students' learning ability, improve students' interest in learning and bring students' creativity into full play, the author aims at teaching and practical methods. Sex teaching reform practice, has received a more obvious teaching effect.

Key words: Non-Computer Major; C Language; Reform

C语言程序设计课程是计算机及其相关专业的专业基础课,在许多高校一般作为大学生的第一门计算机编程语言课程学习。在计算机专业课程学习中,多是作为数据结构、算法分析与设计等其他专业核心课程的先导课。因而有着非常重要意义的一门课程。同时,C语言课程在许多学校又是作为非计算机专业的一门仅有的程序设计语言课程来安排,学习简单的编程知识,对于提高非计算机专业学生的计算思维能力、利用计算机解决实际问题的能力也有着重要的作用。

可是,因为毕竟教学的对象为非计算机专业的学生,在具体的授课和实践过程中,针对非计算机专业的C语言课程和计算机专业学生还是有着不同的着力点和考虑。

1 非计算机专业C语言课程教学的现状

对于很多高校的非计算机专业来说,C语言程序设计课程主要是作为理工科的一门计算机课开设,大体安排在大一的第二学期,把该课程作为第一学期计算机文化基础课程的延续。但是C语言课程和计算机基础课程的内容联系不强。如果在上大学前没有学习过编程知识而学习C语言,对于许多学生来说,特别是开始阶段,相关知识点的学习还是存在着较大的难度。

另外,程序设计语言的课程中,实践又是一个重要的环节,有一定理论的基础,再通过相应的实践才更进一步理解和掌握理论,而实践环节恰恰也是非计算机专业学生薄弱的一环。所以从实践上来说,又影响了学生学习的效果。

如何提高C语言程序设计课程的理论教学效果和学生的编程水平,是每个授课教师需要必须面对的问题。

2 课程实施过程中的教学改革措施

2.1理论教学方面

计算机程序设计课程首先要解决的问题就是用计算机的方法解决问题,其实就是计算思维问题。由于思维惯性,在C语言课程的开始阶段,如何尽早接受这一点就决定了学习效果的好坏。有时必须要对教学内容进行补充和调整,采用类比或其他更容易接受的讲解方式以利于学生的学习。

在教学活动过程中针对一个个的知识点,进行了如下的解释和说明。

1)数据类型

C语言中提供了多种数据类型,仅仅表示纯粹数这一对象的就有int,float,double等多种类型,还有unsigned、signed和short和long的分别,学生刚开始就难以接受,同样的数为什么还区分这么多种类,既然double类型表示数的范围那么大,为什么不就是用这一种类型就简便多了?

为此,首先要解释不同数据类型表示的意义,其次,需要对数据的二进制表示中无符号、有符号,有符号数据的原码、反码和补码的表示,内存中数据存储方式,定点、浮点数的表示,不同数据类型数据转换等一系列的知识点进行讲解。并辅以适当的例子。

如short int型数-1是一个有符号整数,补码表示的,在内存中其实就是16位二进制1,如果把它赋给一个无符号的unsiged short int变量,还是16位二进制1,可是,由于是无符号数,则就是十进制数65535(=216-1),如果把它赋给一个long long型的变量,由于long long型为有符号数,符号位进行扩展,则该变量的内容为64位1,还是-1,同样如果把它赋值给unsiged long long型的變量,其值就是18446744073709551615(=264-1)。而无符号短整型unsigned short int数65535,转换成二进制数也是16位二进制1,如果把它赋给一个long long型的变量,该值还是65535,原因在于对无符号数扩展时就是加0,与有符号数扩展不同。通过对这些知识点的说明和操作演示,相关数据类型的区别和转换机制就比较清晰。

2)常量和变量

在C语言中,常量是指其值不会发生也不能发生改变的量,常量不占用系统的内存,所以其值不会改变。而变量则是其值可以改变的量,在系統中需要分配空间给它。如下列语句:

int a=4;

对于该语句的理解是,定义一个整形变量,变量名为a,同时给该变量赋值4,所以此时如果对a访问,其值为4。这里,学生常见的困惑有两个:一是a的值就是此时赋值的值,如果不赋值,其值的大小是不确定的;二是对赋值号的理解,赋值其实是一个运算,把右边的值赋给左边的变量,容易把赋值符号当作等号,好像也是对的,a的值此时就是等于4。但是当后面如果对变量a的值进行重新赋其他值后,a的值就不等于4了,这时等号的理解就无法成立。

在教学过程中,对变量的说明,就把变量当作房间,不同数据类型的变量就对应于面积大小不一的房间,而变量的值就类比于房间中存放的物品,给变量赋值就是调换物品。

3)函数

对于一个较大的问题,通常把它分成若干个较小的问题来解决。在C语言设计中,也采用类似的方法,把较大的程序分为若干个较小的程序模块,而每个模块用来完成一个特定的功能,一个模块就可以定义一个函数,定义好的函数可以被多次的调用。理解函数的作用对于理解结构化程序设计方法有直接的关系。

C语言中有系统自带的函数,用户也可以自己定义功能函数。以max()函数为例,只要提供给它符合要求的参数,通过它的运算,就可以得出若干个数据中最大的那个数。一个函数就是一个加工厂,有的工厂是别人建的,自己也可以建设所需要的加工厂。对于一个豆腐加工厂来说,提供给它符合要求的大豆,它就可以加工出你所需要的豆腐,这儿,大豆等原料就类似于实际参数,而豆腐就是加工厂的输出值。把豆腐加工厂建好后,以后在任何需要豆腐的时候,就不需要自己来一步步制作豆腐,直接把大豆送到豆腐加工厂就可以了。各种功能不同的工厂的存在,就可以让社会这个复杂系统协调运转。

4)指针

指针是C语言的重要数据类型,也是C语言的精华。灵活的使用指针,可以动态分配内存,方便使用字符串,还可以使程序简洁和高效。但是,指针又是C语言中的难点,特别对于初学者来说,很难理解和用好指针。

要理解指针,必须要搞清楚,C语言中哪些对象需要占用内存,也即它们都有地址这一属性,如变量、数组、函数等等。变量和数组有地址属性好理解,而函数有地址的属性,需要对“程序存储”这一思想进行介绍,在内存中不但存放着大量的数据,还存放了代码,而一个个函数作为模块存放在内存中,函数名就是各个模块的起始地址。

在理解一级指针的基础上,引入多级指针,一般仅仅学习到二级指针为止,这样也降低了对指针理解的难度。由于学习对象为非计算机专业学生,适当的调整知识点的难度也是适宜的。

5)结构体

实际中,一个对象通常有多个属性,往往需要一组不同数据类型的数据进行综合性的描述,在使用时,把这些不同类型的组合当作一个整体对待。结构体就是解决这一问题的手段。它可以把系统提供的基本类型和先前已经定义的数据类型合在一起使用,逻辑上又存在一定的内在关系。

简单数据类型和结构体类型非常类似于生物学上的单细胞和多细胞之间的关系。单细胞生物是由一个细胞组成一个个体,其生命活动由单个细胞器承担,而多细胞生物是由多个单细胞组成的个体,其中不同形态的细胞组成不同的器官组织,他们共同完成个体的生命活动。生命从单细胞过渡到多细胞体也是生命进化的体现,类似地,通过结构体,极大地丰富了C语言对数据的描述能力,也是对现实问题的数据描述能力提升的必然发展。

6)文件

文件,是指存放在外存上的数据的集合,是存在逻辑上关联的数据的结合,当然,系统把设备也当成文件对待。C语言中,对文件的访问不是直接的,而是通过缓存机制来实现,程序访问文件时,首先要把文件在缓冲区中打开,程序就可以对之进行访问,访问结束,如果文件在此过程中进行了修改,再把缓冲区中的文件输出到外存中,进行更新。

为了便于学生的理解,在讲解时把外存当作图书馆,而文件就是图书馆中的藏书,用户需要看书必须要到图书馆把所需要的书借到自己面前,类似于把文件存放到本地的缓存,阅读时对图书进行批注(注:假定现实允许)等修改,最后又还回图书馆。

同样,在学习其他C语言知识点的时候,如何把抽象的理论通过比喻、类比甚至表演等多种形式展现,极大地降低知识点的难度,也激发学生学习的兴趣。

2.2实践教学方面

C语言课程是一门实践性极强的课程,在课时安排上,实验占据了大量的课时。对于非计算机专业学生来说,上机实验也是一个不容易克服的困难。具体的难点在以下几个方面:

1)难以用计算机的思维解决具体问题。

2)代码输入不仔细,容易丢三落四。

3)当系统编译时出现多处错误而束手无策。

4)编译成功却运行结果不正确。

应该说,上面的问题对于编程初学者来说都会遇到,但是,非计算机专业学生可能解决起来更困难些。在实践中,针对出现的问题,从以下几点进行尝试解决。

1)学习使用画流程图的方法来模仿计算机的思维方式解决具体问题。流程图可以让解决问题的思路十分清晰,也是学习计算思维的一个有效途径。刚开始画图力求细致,后期熟练时可以把流程图画得粗一点。

2)学习编程有利于学生养成严谨的习惯。当由于自己的大意而使得代码编译无法通过时,此时尽量鼓励学生自己来发现问题,一方面读懂系统提示的问题描述,另一方面则是训练耐心寻找问题的解决方法,可以尝试包括通过网络等多种手段来解决。这也是编程者必经的阶段。

3)编译成功而结果错误的情况需要老师的帮助,因为此类情况主要是解决方案中逻辑上出现了错误。需要老师和学生一道分析,尤其是对流程图进行详细地查找,找出解决方案。

上机实验刚开始,还是以学习成熟的代码为主,后期多尝试自己动手。通过这些环节的实施,学生真正掌握了如何编程,收效还是比较明显。

在这门课程接近结束的时候,以4-6人为一组,布置一个大一点的作业,其中一个同学为队长,把每个人任务进行分工,进行一个简单系统的实现。通过这个作业的实施,培养同学之间的合作精神和团队意识,也是对该门课程很好的总结。

2.3多媒体等其他教学手段的适当运用

多媒体作为教学手段的意义已经为大家所共识。可以借助于图片、视频或动画等手段把C语言抽象的理论以十分具体形象的方式展现出来,同时也极大地节约了时间。

在介绍冒泡排序算法时,多个数据随机地存放在一个个方格中,随着每一条语句的执行,以动画的形式数据进行移动,非常直观、形象,比纯粹地进行解释的方法效果好很多。

在通过第三个变量实现两个变量交换的时候,让甲、乙、丙三个同学在讲台上,甲手里放着一盒白色粉笔,乙手持一盒彩色粉笔,在借助于丙同学的情况下实现了甲、乙而人粉笔的交换,演示内容并不复杂,但是对于帮助学生理解借助第三个变量实现两个变量数据的交换这一本质可以起到事半功倍的作用。

3 结束语

C语言程序设计是一门重要的计算机课程,也是一种提升计算思维能力的课程。它是以C语言为工具,解决具体的问题。可是由于非计算机专业相对计算机专业有着相对的不足,在学习过程中存在具体的困难。怎样让学生更好地接受相关知识,提高学生的学习兴趣,需要从多个角度入手。在掌握好基础知识的基础上,由理论到实践,再由实践到理论,相互影响,相互促进,才可以更好地达到最终的学习目标。为培养出既具备扎实理论基础,又具有较好的实践能力的新型人才,必须积极进行教学改革,学习和掌握多种教学手段,在教学实践中不断提高自己的业务素质,使教学水平、教学质量跃上一个新的台阶。

参考文献:

[1] 郑璐璐. “C语言程序设计”课程改革的几点措施[J]. 科教文汇,2018(441):57-58.

[2] 刘满君. 《C 语言程序设计》课程考核方式改革初探[J]. 福建电脑,2018(11):181.

[3] 彭秀萍. C语言程序设计课程教学改革探讨[J]. 电脑知识与技术,2018,14(26):94-96.

[4] 申炳昕. C语言程序设计实验教学方法与考核模式的改革探讨[J]. 电脑知识与技术,2018,14(30):102-104.

[5] 叶振. 本科院校数学专业《C语言程序设计》课程教学探讨[J]. 福建电腦,2018(10):172-173.

[6] 郭芳. 高校非计算机专业C语言课程教学的改革研究[J].湖南工程学院学报,2018,28(3):110-112

[7] 聂轰. 错误案例教学法在 C 语言教学中的应用[J]. 现代信息科技, 2018,2(10):90-91

【通联编辑:王力】

猜你喜欢

非计算机专业C语言改革
基于Visual Studio Code的C语言程序设计实践教学探索
改革之路
基于C语言的计算机软件编程
改革备忘
非计算机专业计算机基础教学的总结与思考
高校非计算机专业计算机网络基础教学改革探究
高职高专院校C语言程序设计教学改革探索
程序设计课程中计算思维和应用能力培养问题研究
改革创新(二)
非计算机专业VF课程教学内容与方法探究