### 计算机 C语言 讲师 第8章 函数与变量的存储类别
#### §8.1 函数的引入
在本节中,我们主要介绍函数的基本概念及其在C语言程序设计中的重要性。
##### 8.1.1 C程序的总体结构
在解决复杂的编程问题时,通常会采用模块化的方法将问题分解成一系列更小、更简单的子问题。这些子问题可以通过编写相应的子程序来解决。在C语言中,子程序是由函数来表示和实现的。一个典型的C程序结构如下所示:
```plaintext
主程序
子程序1
子程序2
...
子程序n
```
这种结构可以进一步细化为:
```plaintext
main()
fun1( )
fun2( )
...
funn( )
```
模块化编程具有以下优势:
- **简化复杂度**:通过将大问题分解为小问题,可以使程序更容易理解和维护。
- **代码重用**:独立的程序模块可以在不同的程序中重复使用。
- **并行开发**:不同的开发者可以同时开发不同的函数,提高开发效率。
##### 8.1.2 函数的类别
函数可以分为两类:库函数和用户自定义函数。
- **库函数**:这些函数是系统提供的预编译函数,用户可以直接使用而无需重新定义。使用库函数时需要注意其功能、原型以及所需的头文件。
- **用户自定义函数**:这类函数由用户根据实际需求编写,需要先定义后使用。定义自定义函数包括三个基本步骤:定义、声明和调用。
#### §8.2 函数的定义、调用和声明
##### 8.2.1 函数的定义
函数的定义指定了函数的类型、名称、参数列表以及函数体。函数定义的一般格式如下:
```c
类型名 函数名(形式参数表列)
{
说明部分
执行部分
}
```
例如,下面是一个求两个双精度数之和的函数定义示例:
```c
double add(double x, double y)
{
double z;
z = x + y;
return(z);
}
```
在这个例子中,`add` 是一个函数名,`double` 表示返回类型,`double x, double y` 是形式参数列表,`z = x + y` 是执行部分,`return(z)` 用于返回计算结果。
##### 8.2.2 函数的调用
函数的调用是指在程序的其他部分中使用已定义好的函数。调用时需要提供实际参数,这些参数会被传递给函数的形式参数。例如,在上面的例子中,调用 `add` 函数的方式如下:
```c
double result = add(3.14, 2.71);
```
这里,`3.14` 和 `2.71` 是实际参数,它们将被传递给 `add` 函数的形式参数 `x` 和 `y`。
##### 8.2.3 函数声明
函数声明告诉编译器函数的存在及其类型,以便在调用前进行检查。声明通常出现在程序的开头,一般形式如下:
```c
类型名 函数名(类型名 形参1, 类型名 形参2, ...);
```
例如,对于前面定义的 `add` 函数,其声明可以写为:
```c
double add(double, double);
```
这样,编译器就可以确保在调用 `add` 函数时提供了正确的参数类型和数量。
#### §8.3 函数调用中的数据传递方式
函数调用中常见的数据传递方式有两种:传值和传引用。
- **传值**:在函数调用时,实参的值被复制给形参,函数内部对形参的操作不会影响到实参的值。
- **传引用**:这种方式允许函数直接操作实参,通常通过指针实现。
#### §8.4 函数的嵌套调用和递归调用
##### 函数的嵌套调用
在一个函数的执行过程中调用另一个函数,这被称为嵌套调用。嵌套调用是C语言中非常常见的现象,可以实现复杂的逻辑处理。
##### 递归调用
递归调用是指函数直接或间接地调用自身。递归调用必须有一个明确的终止条件,以防止无限循环。
#### §8.5 函数应用程序设计举例
在这一节中,我们会看到如何使用函数来解决实际问题。通过具体的案例分析,读者可以更好地理解函数的应用场景和设计思路。
#### §8.6 局部变量和全局变量
##### 局部变量
局部变量是在函数内部定义的变量,其作用域仅限于该函数内部。这意味着每次调用函数时都会创建一个新的局部变量副本。
##### 全局变量
全局变量在整个程序的任何地方都可以访问。尽管使用方便,但过度依赖全局变量可能会导致程序难以维护。
#### §8.7 动态存储变量与静态存储变量
##### 动态存储变量
动态存储变量是在运行时动态分配内存的变量,通常使用栈或堆空间。
##### 静态存储变量
静态存储变量的生命周期与程序相同,即使在函数调用结束之后仍然存在。
#### §8.8 内部函数和外部函数
##### 内部函数
内部函数也称为静态函数,只能在其定义的文件内部访问。
##### 外部函数
外部函数可以在多个文件之间共享,通常通过链接的方式实现。
通过以上内容的学习,我们可以深入理解C语言中函数的概念、用途以及不同类型的变量。这对于编写高效、可靠的程序至关重要。