函数的定义与调用是C语言编程的核心技能。东巴文(db-w.cn) 将带你深入理解函数的定义与调用,掌握函数编程的基础技能。
💡 东巴文观点:函数定义是创建功能,函数调用是使用功能,两者相辅相成。
东巴文语法:
返回类型 函数名(参数列表) {
// 函数体
return 返回值;
}
东巴文说明:
#include <stdio.h>
// 无参数无返回值
void printHello() {
printf("东巴文欢迎您!\n");
}
// 有参数无返回值
void printNumber(int num) {
printf("数字:%d\n", num);
}
// 无参数有返回值
int getNumber() {
return 42;
}
// 有参数有返回值
int add(int a, int b) {
return a + b;
}
int main() {
printf("=== 东巴文函数定义示例 ===\n\n");
// 调用无参数无返回值函数
printHello();
// 调用有参数无返回值函数
printNumber(10);
// 调用无参数有返回值函数
int num = getNumber();
printf("获取的数字:%d\n", num);
// 调用有参数有返回值函数
int sum = add(5, 3);
printf("5 + 3 = %d\n", sum);
return 0;
}
#include <stdio.h>
// 函数声明(原型)
int max(int a, int b);
int main() {
int result = max(10, 5);
printf("最大值:%d\n", result);
return 0;
}
// 函数定义
int max(int a, int b) {
// 函数体
if (a > b) {
return a; // 返回语句
} else {
return b;
}
}
东巴文说明:
东巴文说明:函数声明告诉编译器函数的存在,包括函数名、返回类型和参数列表。
返回类型 函数名(参数列表);
#include <stdio.h>
// 函数声明
int add(int a, int b);
void printMessage(void);
int main() {
int result = add(5, 3);
printf("结果:%d\n", result);
printMessage();
return 0;
}
// 函数定义
int add(int a, int b) {
return a + b;
}
void printMessage(void) {
printf("东巴文欢迎您!\n");
}
#include <stdio.h>
// 方法1:在文件开头声明
int func1(int a, int b);
int func2(int a, int b);
int main() {
printf("%d\n", func1(5, 3));
printf("%d\n", func2(5, 3));
return 0;
}
int func1(int a, int b) {
return a + b;
}
int func2(int a, int b) {
return a * b;
}
东巴文函数声明作用:
#include <stdio.h>
// 函数声明
int calculate(int a, int b, char op);
int main() {
printf("=== 东巴文函数声明作用 ===\n\n");
printf("5 + 3 = %d\n", calculate(5, 3, '+'));
printf("5 - 3 = %d\n", calculate(5, 3, '-'));
printf("5 * 3 = %d\n", calculate(5, 3, '*'));
printf("5 / 3 = %d\n", calculate(5, 3, '/'));
return 0;
}
// 函数定义
int calculate(int a, int b, char op) {
switch (op) {
case '+': return a + b;
case '-': return a - b;
case '*': return a * b;
case '/': return b != 0 ? a / b : 0;
default: return 0;
}
}
东巴文说明:函数调用是执行函数代码的过程。
函数名(实参列表);
#include <stdio.h>
int add(int a, int b) {
return a + b;
}
int main() {
printf("=== 东巴文函数调用示例 ===\n\n");
// 直接调用
printf("直接调用:%d\n", add(5, 3));
// 赋值调用
int result = add(10, 20);
printf("赋值调用:%d\n", result);
// 表达式中调用
int total = add(1, 2) + add(3, 4);
printf("表达式调用:%d\n", total);
// 嵌套调用
printf("嵌套调用:%d\n", add(add(1, 2), add(3, 4)));
return 0;
}
#include <stdio.h>
void printLine() {
printf("--------------------\n");
}
int add(int a, int b) {
printf("计算 %d + %d\n", a, b);
return a + b;
}
int main() {
printf("=== 东巴文函数调用过程 ===\n\n");
printLine();
int x = 5, y = 3;
printf("调用add函数前\n");
int result = add(x, y);
printf("调用add函数后\n");
printf("结果:%d\n", result);
printLine();
return 0;
}
东巴文执行流程:
main函数开始
↓
调用printLine函数
↓
执行printLine函数体
↓
返回main函数
↓
调用add函数
↓
执行add函数体
↓
返回结果到main函数
↓
main函数结束
#include <stdio.h>
// 函数声明
int square(int n);
void printResult(int result);
int main() {
printf("=== 东巴文函数调用方式 ===\n\n");
// 1. 函数语句
printResult(100);
// 2. 函数表达式
int result = square(5) + 10;
printf("表达式结果:%d\n", result);
// 3. 函数参数
printf("平方值:%d\n", square(5));
// 4. 嵌套调用
printf("嵌套调用:%d\n", square(square(2)));
return 0;
}
int square(int n) {
return n * n;
}
void printResult(int result) {
printf("结果:%d\n", result);
}
东巴文说明:嵌套调用是指在一个函数调用中使用另一个函数调用的结果。
#include <stdio.h>
int max(int a, int b) {
return a > b ? a : b;
}
int max3(int a, int b, int c) {
return max(max(a, b), c);
}
int max4(int a, int b, int c, int d) {
return max(max3(a, b, c), d);
}
int main() {
printf("=== 东巴文嵌套调用示例 ===\n\n");
printf("max(3, 5) = %d\n", max(3, 5));
printf("max3(3, 5, 7) = %d\n", max3(3, 5, 7));
printf("max4(3, 5, 7, 9) = %d\n", max4(3, 5, 7, 9));
return 0;
}
#include <stdio.h>
int add(int a, int b) {
printf("add(%d, %d)\n", a, b);
return a + b;
}
int multiply(int a, int b) {
printf("multiply(%d, %d)\n", a, b);
return a * b;
}
int main() {
printf("=== 东巴文嵌套调用执行过程 ===\n\n");
// 嵌套调用:add(add(1, 2), multiply(3, 4))
int result = add(add(1, 2), multiply(3, 4));
printf("最终结果:%d\n", result);
return 0;
}
东巴文执行顺序:
1. add(1, 2) → 3
2. multiply(3, 4) → 12
3. add(3, 12) → 15
东巴文说明:链式调用是指将多个函数调用连接在一起,前一个函数的返回值作为后一个函数的参数。
#include <stdio.h>
int add(int n) {
static int sum = 0;
sum += n;
return sum;
}
int main() {
printf("=== 东巴文链式调用示例 ===\n\n");
// 链式调用
int result = add(1) + add(2) + add(3);
printf("链式调用结果:%d\n", result);
return 0;
}
东巴文说明:递归调用是指函数直接或间接调用自身。
#include <stdio.h>
// 计算阶乘
long factorial(int n) {
if (n <= 1) {
return 1; // 基准情况
}
return n * factorial(n - 1); // 递归调用
}
// 计算斐波那契数列
long fibonacci(int n) {
if (n <= 1) {
return n; // 基准情况
}
return fibonacci(n - 1) + fibonacci(n - 2); // 递归调用
}
int main() {
printf("=== 东巴文递归调用示例 ===\n\n");
// 阶乘
printf("5! = %ld\n", factorial(5));
printf("10! = %ld\n", factorial(10));
// 斐波那契数列
printf("\n斐波那契数列前10项:\n");
for (int i = 0; i < 10; i++) {
printf("%ld ", fibonacci(i));
}
printf("\n");
return 0;
}
东巴文递归条件:
#include <stdio.h>
// ❌ 错误的递归:没有基准情况
void infiniteRecursion() {
printf("无限递归\n");
infiniteRecursion(); // 无限递归
}
// ✅ 正确的递归:有基准情况
void countdown(int n) {
if (n <= 0) { // 基准情况
printf("发射!\n");
return;
}
printf("%d\n", n);
countdown(n - 1); // 向基准情况靠近
}
int main() {
printf("=== 东巴文递归条件 ===\n\n");
countdown(5);
return 0;
}
#include <stdio.h>
// 函数声明
int add(int a, int b);
int subtract(int a, int b);
int multiply(int a, int b);
int divide(int a, int b);
int main() {
printf("5 + 3 = %d\n", add(5, 3));
printf("5 - 3 = %d\n", subtract(5, 3));
printf("5 * 3 = %d\n", multiply(5, 3));
printf("5 / 3 = %d\n", divide(5, 3));
return 0;
}
// 函数定义
int add(int a, int b) {
return a + b;
}
int subtract(int a, int b) {
return a - b;
}
int multiply(int a, int b) {
return a * b;
}
int divide(int a, int b) {
return b != 0 ? a / b : 0;
}
#include <stdio.h>
int divide(int a, int b, int *result) {
if (b == 0) {
return -1; // 错误:除数为0
}
if (result == NULL) {
return -2; // 错误:空指针
}
*result = a / b;
return 0; // 成功
}
int main() {
int result;
if (divide(10, 2, &result) == 0) {
printf("10 / 2 = %d\n", result);
} else {
printf("除法失败\n");
}
return 0;
}
// ❌ 过深的嵌套调用
int result = func1(func2(func3(func4(func5(x)))));
// ✅ 分步调用
int temp1 = func5(x);
int temp2 = func4(temp1);
int temp3 = func3(temp2);
int temp4 = func2(temp3);
int result = func1(temp4);
// ✅ 适合递归的场景
int factorial(int n) {
if (n <= 1) return 1;
return n * factorial(n - 1);
}
// ✅ 递归改循环(效率更高)
int factorial_iterative(int n) {
int result = 1;
for (int i = 2; i <= n; i++) {
result *= i;
}
return result;
}
完成本章学习后,请确认:
掌握函数的定义与调用后,你可以继续学习:
如果遇到问题,欢迎访问 东巴文(db-w.cn) 获取帮助!
东巴文(db-w.cn) - 让编程学习更简单
📦 东巴文函数定义与调用提示:函数定义与调用是函数编程的基础,掌握它们是编写模块化程序的关键。在 db-w.cn,我们会通过大量实例帮你掌握函数的定义与调用!