APP下载

C语言函数的教学方法探析

2019-12-16巨同升

电脑知识与技术 2019年30期
关键词:主调程序段C语言

巨同升

摘要:采用传统的“解释法”讲解c语言函数的编写方法,不利于学习者的理解和掌握。采用“分解法”和“改写法”,则可以比较好地解决传统方法的不足,收到良好的教学效果。

关键词:解释法;分解法改写法

中图分类号:G642 文献标识码:A

文章编号:1009-3044(2019)30-0110-03

1概述

在c语言中函数是程序的基本构成要素,是编程时频繁使用的程序单位,其重要性是不言而喻的。但是从教学效果方面来看,多数学生对于函数的理解掌握并不理想。有的学生虽然能够用单独的main函数完成程序,但是要分解为几个函数,就会感觉无从下手。

这其中有C语言自身特点的客观原因,比如C语言的函数同时包含了大多数编程语言中子程序和函数这两种程序单位的功能,在一定程度上提高了编写函数的难度。另一方面也有来自教材和教学方法方面的原因。综观绝大多数C语言程序设计教材,在讲述如何定义一个函数时,往往都是采用“解释法”。也就是直接将函数写出来,然后再做分析解释。至于这个函数是如何写出来的、为什么这么写,则鲜有分析说明。从而给学习者造成一种神秘、无章可循的感觉。

从讲授者的角度,或许觉得这样编写函数是理所当然的,无需更多的解释,或者只可意会,不可言传。其实如何定义一个函数也是有其内在规律的,甚至可以像数学公式那样一步一步地推导出来。这就要求讲授者能够发现并归纳出其中的内在规律并传授给学生。学生一旦有了编写函数的依据,再来编写函数也就不再感觉神秘、无章可循了。

下面就来介绍两种行之有效的编写函数的方法:分解法和改写法。

2分解法

所谓分解法,就是首先将整个程序的功能用一个独立main函数实现,然后再将这个main函数分解为主调函数和被调函数。

为了便于理解,我们将无参函数和有参函数的定义和调用的方法分开来介绍。

2.1无参函数的定义和调用

例1.编写程序,打印出如下图形。

首先,我们编写一个只有main函数的程序来实现上述功能。

我们发现,在这个程序中打印三角形的程序段重复了两次,但是也不方便将这两段合并为一个新的循环。因此,为了提高编程效率,避免重复,在本程序中可以将打印三角形的程序段单独拿出来,定义为一个函数,然后在主函数中调用它。

如何写出打印三角形的函数呢?只需要用对应的程序段,添加上return语句作为函数体,然后再添加函数头就可以了。

此处的printstar是自定义函数的名字。函数名之前的void是函数的类型,void也称为空值类型,表示该函数没有返回值。当函数体中的return之后直接跟分号时,函数类型就应该定义为void类型。return语句的功能,是返回到主调函数中继续执行。

由于这个函数运行时,不需要从主调函数中传递数据,因此它是一个无参函数,也就是函数名之后有一对空括号。

一旦定义好了用户函数,就可以像调用库函数那样调用它了。因为前面已经定义好了打印一个三角形的被调函数,故可以在主函数中直接调用它。由于函数printstar没有返回值,因此不能在表达式中调用它;而只能在函数调用之后添加分号,使其成为一条语句,即printstar()。

在该程序中,求阶乘的程序段重复了三次,但是观察这三段程序,发现并不能简单地将它们合并为一个新的循环。

为了提高编程效率,避免重复,在该程序中可以将求k的阶乘的程序段单独拿出来,定义为一个被调函数,然后在主函数中调用它。

根据在例1中获得的经验,构造被调函数的方法是以相应的程序段添加return语句作为函数体,然后再添加函數头即可。按照这个方法,可以得到如下被调函数。

当我们运行该程序时可以发现,主函数中变量k的值并不能传递给被调函数中的变量k,被调函数中变量p的值也不能传递给主函数中的变量p。这是因为凡是在函数内部定义的变量都是局部变量,而局部变量只有在定义它的函数中才是有效的。因此,这两个函数中的变量k是两个相互独立、互不相关的变量;变量p也一样。

那么,如何才能实现主调函数与被调函数之间的数据传递呢?为了解决这个问题,在C语言中提供了参数传递和返回值的机制。

一方面,将被调函数中用于接受数据的变量的定义,移到函数首部的括号中,称为被调函数的形式参数(形参)。这种函数运行时,将通过形参从主调函数中传递数据,故称为有参函数。

另一方面,将被调函数中用来向主调函数传递数据的变量(或表达式)置于return之后,称为被调函数的返回值。

函数名前边的类型说明符,称为函数的类型,通常与return之后变量(或表达式)的类型相一致。

一旦定义好了求阶乘的被调函数,就可以像调用库函数那样来调用它了。因此,我们很容易编写出调用该函数求组合值的主函数。

3改写法

除了采用上面的分解法编写函数之外,也可以采用改写法。所谓改写法,就是首先编写一个能够实现被调函数基本功能的main函数,然后再将这个main函数改写为被调函数。

例3.已知一个圆环的内外半径,要求编写一个求圆面积的被调函数,然后调用该函数求出圆环的面积。

然后再将上述主函数改写为被调函数。改写的方法就是将原程序中需要输入的变量改为形参,将原程序中需要输出的变量(或表达式)改为函数的返回值。从而得到如下被调函数。

猜你喜欢

主调程序段C语言
基于WinCC的物料小车控制系统设计与仿真
化肥行业绿色低碳发展成主调
基于Visual Studio Code的C语言程序设计实践教学探索
数控系统手轮回退功能的研究与实现*
基于NC程序段的提高数控加工监控阈值与信号同步的方法*
基于C语言的计算机软件编程
高职高专院校C语言程序设计教学改革探索
论子函数在C语言数据格式输出中的应用
如何处理Java程序中的错误