C 语言中的函数声明和定义
您可以通过以下方式创建并调用函数:
代码语言:c复制// 创建一个函数
void myFunction() {
printf("我刚被执行了!");
}
int main() {
myFunction(); // 调用函数
return 0;
}
一个函数包括两个部分:
- 声明:函数名称、返回类型和参数(如果有)
- 定义:函数体(要执行的代码)
void myFunction() { // 声明
// 函数体 (定义)
}
为了优化代码,建议将函数的声明和定义分开。
您经常会看到 C 程序在 main() 之前有函数声明,在 main() 之后有函数定义。这将使代码更整齐,更易于阅读:
代码语言:c复制// 函数声明
void myFunction();
// 主方法
int main() {
myFunction(); // 调用函数
return 0;
}
// 函数定义
void myFunction() {
printf("我刚被执行了!");
}
另一个例子:
如果我们使用上一章关于函数参数和返回值的示例:
代码语言:c复制int myFunction(int x, int y) {
return x y;
}
int main() {
int result = myFunction(5, 3);
printf("Result is = %d", result);
return 0;
}
// 输出 8 (5 3)
相反,最好写成这样:
代码语言:c复制// 函数声明
int myFunction(int, int);
// 主方法
int main() {
int result = myFunction(5, 3); // 调用函数
printf("Result is = %d", result);
return 0;
}
// 函数定义
int myFunction(int x, int y) {
return x y;
}
这是一种很好的实践,因为它可以使代码更易于阅读和理解。它还允许您在其他文件或模块中使用函数声明,而无需包含整个函数定义。
C 语言中的递归
递归是指使函数调用自身的技巧。这种技术提供了一种将复杂问题分解为更易于解决的简单问题的途径。
递归可能有点难懂。弄清楚它如何工作的最佳方法是进行试验。
递归示例
将两个数字相加很容易,但将一系列数字相加就比较复杂了。在以下示例中,递归用于通过将问题分解为将两个数字相加的简单任务来将一系列数字相加:
代码语言:c复制int sum(int k);
int main() {
int result = sum(10);
printf("%d", result);
return 0;
}
int sum(int k) {
if (k > 0) {
return k sum(k - 1);
} else {
return 0;
}
}
示例解释
当调用 sum() 函数时,它将参数 k 添加到所有小于 k 的数字的和中并返回结果。当 k 变成 0 时,函数只返回 0。程序运行时,会遵循以下步骤:
- 10 sum(9)
- 10 (9 sum(8))
- 10 (9 (8 sum(7)))
- ...
- 10 9 8 7 6 5 4 3 2 1 sum(0)
- 10 9 8 7 6 5 4 3 2 1 0
由于函数在 k 为 0 时不调用自身,因此程序在此停止并返回结果。
开发人员应该非常小心地使用递归,因为它很容易写出永远不会终止的函数,或者会使用过多的内存或处理器资源的函数。然而,当正确编写时,递归可以成为一种非常高效和数学上优雅的编程方法。
C 语言中的数学函数
C 语言中还提供了一系列数学函数,允许您对数字进行数学运算。
要使用它们,您必须在程序中包含 math.h 头文件:
代码语言:c复制#include <math.h>
平方根
要找到某个数字的平方根,请使用 sqrt() 函数:
代码语言:c复制printf("%f", sqrt(16));
四舍五入
ceil() 函数将数字向上舍入到最接近的整数,floor() 函数将数字向下舍入到最接近的整数,并返回结果:
代码语言:c复制printf("%f", ceil(1.4));
printf("%f", floor(1.4));
幂次
pow() 函数返回 x 的 y 次方 (xy) 的值:
代码语言:c复制printf("%f", pow(4, 3));
其他数学函数
以下表格列出了 <math.h> 库中其他常用的数学函数:
函数 | 描述 |
---|---|
abs(x) | 返回 x 的绝对值 |
acos(x) | 返回 x 的反正弦 |
asin(x) | 返回 x 的反正切 |
atan(x) | 返回 x 的反正切 |
cbrt(x) | 返回 x 的立方根 |
cos(x) | 返回 x 的余弦 |
exp(x) | 返回 Ex 的值 |
sin(x) | 返回 x 的正弦 (x 以弧度为单位) |
tan(x) | 返回某个角度的正切 |