C语言函数教学方法研究
2017-06-01范青刚蔡艳宁王丽王忠陈菁
范青刚 蔡艳宁 王丽 王忠 陈菁
摘要:针对C语言中函数的重要性及我校学生在学习过程中对函数的掌握情况,总结出一套实用的c语言函数教学方法。首先通过生活中常见的例子介绍函数的概念,并以此来阐述函数编程思想,然后重点讲解函数的定义方法——要素提取法、函数的调用方法及虚实结合的过程,并通过实例强化学生函数设计的方法,最后对函数的設计方法进行总结。实践证明,该方法在教学中取得良好的效果,也培养了学生函数设计的编程思想。
关键词:教学方法;函数;要素提取法;虚实结合
中图分类号:G424 文献标识码:A 文章编号:1009-3044(2017)08-0161-02
1序言
《C程序设计基础》是我校工科非计算机专业的一门必修课程,目的是使学生掌握程序设计的基本方法,并形成正确的程序设计思想,培养学生用计算机解决本专业问题的能力,为后续课程的学习打下良好的基础。
但在教学过程中发现,学生在学习函数这部分的知识时非常吃力,很多学生对此掌握的并不好,不能灵活的运用函数进行程序设计,主要的原因是所用教学方法效果较差。针对此问题,笔者在深入研究C语言函数教学方法的基础上,通过详细分析教学过程中学生的表现,并积极与学生沟通,总结出适合我校学生的函数教学方法,首先通过生活中常见的例子介绍函数的概念,并精心设计函数的引入问题,以此来阐述函数编程思想,然后重点讲解函数的定义和调用方法,并通过实例强化学生函数设计的方法,最后对函数的设计方法进行总结。
2函数思想的引入
数学中的函数与C语言中的函数有什么区别?数学中的函数侧重于自变量和因变量之间的映射关系,而C语言中的函数主要侧重于功能的实现。
以计算13!为例,通常的计算方法是13×12×……×4×3×2×1=6227020800,但也会发现计算量非常大。熟悉计算器的学生也知道,计算器上有一个“n!”按钮,我们只需按“13”,再按“n!”,就可以得到结果6227020800。两种计算方法中笔者更喜欢后者,因为计算器中“n!”按钮可以协助完成阶乘计算,换言之,“n!”按钮可以完成计算阶乘的功能,与c语言中函数的概念非常接近,因此“n!”按钮就是将求阶乘的函数封装起来了,我们甚至可以说计算器就是将若干个函数封装起来的一个设备。所以通过计算器来理解C语言中函数的概念就比较容易了。有了函数,就可以多次使用它,就如同有了“n!”,不仅可以计算13!,也可以15!,17!等等。C语言中的函数就是功能独立的一段代码,能够避免重复代码,降低出错率,提高程序的可读性。函数机制的出现,也使多人共同开发大规模的程序成为可能。
进而引导学生回顾教学中以前学过的主函数和C语言中的一些常见的库函数(如sqrt()),总结这些函数的共同点,标识符后面都有一个括号,并以一到两个子函数为例,讲解、编译、运行,帮助学生更好地认识函数。
在学生对函数有了基本的认识之后,给学生说明并非所有的函数都是现成的,有很多是需要用户自定义编写的——用户自定义函数。在教学中,笔者认为函数的分类最重要的标准就是函数的使用方式,根据函数的使用方式可以将函数分为数值计算函数(有返回值,类型不是void)和任务执行函数(无返回值,类型为void),数值计算函数因为有结果,使用时一般当做表达式的一部分或者函数参数,任务执行函数由于没有结果,使用时一般独立成一条语句。
3函数的定义和调用
3.1采用要素提取法完成函数定义
C语言函数设计主要围绕函数类型,函数名,函数形式参数,函数返回值四个要素展开。
对于函数要素的教学部分,重点讲解函数的定义与调用。函数定义的一般形式为:
类型说明符函数名(形式参数表)
{声明部分;
语句部分;
return(返回值);}
对函数定义部分还需要掌握的是:(1)类型标识符:函数返回值类型,即结果类型。(2)函数名:合法标识符是函数的唯一标识。(3)形式参数表:由类型和变量名组成。(4)return(返回值):返回结果。
函数定义中的四个要素的提取方法可以参照用计算器求13!来说明,(1)类型说明符。13!的结果是6227020800,类型说明符就是根据结果的类型来确定,为int。(2)函数名。函数名是函数的唯一标识,在用计算器求13!的过程中,函数名就相当于“n!”按钮,这里用factorial来表示。(3)形式参数表。当计算13!时,形式参数表就是用来接收13的,假如求17!,那形式参数表就用来接收17,这里可以得出参数数量为一个,类型为int,因此用int x来定义形式参数。(4)返回值。13!的结果是6227020800,返回值就是6227020800。
以求阶乘为例,定义函数:
intfactorial(int x)
{int s=1,i;
for(i=1;i<=x;i++)
{s=s*i;}
return s;}
3.2函数调用及虚实结合的过程
由上述函数定义可以看出,函数定义并没有具体的结果,原因在于x的值未定,就如同在计算器上只按下“n!”没有任何意义一样。因此,函数的定义只是实现了函数的功能,而最终的目的在于使用函数,即函数的调用。
在函数的调用过程中,还需要重点讲解实际参数和形式参数的区别,以及整个虚实结合的过程。在使用函数时后面括号中是具体的值,即实际参数。函数定义中括号中的参数是形式参数,没有具体的值。在发生函数调用的时候,形式参数用来接收实际参数的值。如:
voidmain()
{int a=13,c;
c=factorial(a);
printf(“%d的阶乘为:%d/n”,a,c);}
实际参数是a,有确定的值为13,形式参数为x,用来接收a的值。参数传递过程如图2所示:
在函数定义和调用中需要重点强调的地方:
1)函数名是函数的唯一标识。2)函数必须先定义后使用。3)如果函数为非void类型,函数中必须有return语句。4)普通变量传递时为单向传递,即由实际参数传向形式参数。
4总结
笔者首先以现实生活中的常见实例引出函数的概念,然后给出要素提取法来实现函数的定义,最后重点讲解函数的调用方法和参数传递的过程,并以一个实例贯穿始终,便于学生理解和记忆,强化了学生的函数设计思想。实践证明,该教学方法取得了良好的教学效果,提高了学生编程能力。