第 6章 自定义函数的设计和使用
6.1 问题的提出
6.2 函数的定义
6.3 函数的调用
6.4 函数的嵌套调用
6.5 函数的递归调用
6.1 问题的提出我们曾经在第 1章的结构化程序设计问题中提出,解决复杂问题的方法应该采用,模块化的设计,思想,把一个庞大的应用程序分解成若干个程序模块,每一个程序模块实现一个特定的功能 。 在 C语言系统中,,模块化的设计,使用的是函数,
我们可以将每一个程序模块,编写出对应的函数,从而实现,模块化的设计,。
因此,我们可以说 C程序是由函数所构成的。但是不管程序中包含有多少个函数,程序中必须要有一个主函数 main(),
而且只能有一个主函数。程序的执行总是从主函数 main()开始,主函数再调用其他函数,其他函数之间也可以互相调用,但是其他函数不能调用主函数。
函数分为系统函数和用户自定义函数。
C语言系统已将一些常用的功能模块编写成函数,放在标准的函数库中提供给用户使用,这类函数属于系统函数,例如:
printf函数,scanf函数等,我们在前面已经大量使用了。除此之外,用户根据自己的需要而编写的函数我们称为用户自定义函数。这一章所介绍的就是有关用户自己定义函数的问题,包括函数的定义、函数的调用和函数的说明等问题。
6.2 函数的定义
6.2.1 函数的定义形式函数定义的形式为:
类型说明符 函数名 ( 类型名 形参 1,
类型名 形参 2,… )
{ 声明部分执行部分
}
我们前面编写完成各种功能的主函数
main(),就是这样一种形式,只不过根据实际情况没有包含函数名前的类型说明符和函数名后面圆括号中的形参 。 因此函数的定义我们不该陌生 。 只是有些问题需向读者说明 。
6.2.2 函数的返回值当函数运行结束后,若需要将函数运行的结果返回到原调用函数的地方,如何实现呢? 它是通过 return语句实现的 。
return语句的形式如下:
return表达式;或 return ( 表达式);
6.3 函数的调用
6.3.1 函数原型说明一般来说,调用函数时必须遵循,先说明,后调用,的原则 。 函数原型说明用来告诉编译系统被调用函数的函数值类型,
以及函数的参数情况 。
6.3.2 函数的调用函数调用的一般形式是:
函数名 ( 实参表 )
其中:实参表是由实际参数 ( 实际数据 ) 组成,多于一个实参时,用逗号分开,
它们的类型,个数和顺序同定义函数或说明函数时的形参表要一致 。 实参的形式既可以是变量,也可以是常量,也可以是表达式 。
6.4 函数的嵌套调用函数的嵌套调用是指在调用一个函数的过程中,被调用的函数又去调用另一个函数,这种方式就称为函数的嵌套调用 。
6.5 函数的递归调用
6.5.1 问题的提出在调用函数的过程中,出现直接或间接地调用,自己,本身函数,这就称为函数的递归调用 。 函数的递归调用有两种方式,一种称为直接递归调用,即:一个函数直接调用,自己,本身函数;另一种称为间接递归调用,即一个函数通过其他函数又再调用,自己,本身函数 。