C语言之函数 “打怪升级” :从基础到实战

在C语言中,函数就像一个个功能独立的“工具”,把复杂的程序拆分成多个小函数,既能让代码更清晰,又方便重复使用。今天我们就从最基础的函数概念讲起,一步步学会如何定义、调用函数,最后通过实战案例巩固所学知识。


一、函数是什么?为什么需要函数?

函数的本质


函数是一段实现特定功能的代码块,可以被多次调用。比如计算两个数的和、打印一行文字,这些重复使用的功能都适合写成函数。

举个生活例子 


做蛋糕时,“搅拌面粉”“打发奶油”“烘烤”这三个步骤就像三个函数。每次做蛋糕不需要重新发明这些步骤,直接调用即可。编程也是如此:把常用功能写成函数,既能减少重复代码,又方便后续修改维护。

函数的优势


1. 代码复用:写一次函数,多处调用,避免重复劳动。
2. 模块化设计:把复杂程序拆分成小功能,逻辑更清晰。
3. 便于维护:单个函数出问题,只需修改这部分,不影响整体。
4. 多人协作:不同开发者可以负责不同函数,高效配合。


二、函数的基础用法

1. 函数的定义:怎么创建一个函数?

函数定义的格式如下:

返回值类型 函数名(参数列表)

{
    // 函数体:实现功能的代码
    return 结果; // 如果返回值类型不是void,必须有return
}
  • 返回值类型:函数执行完返回的数据类型(如intfloat),如果不返回任何值,用void
  • 函数名:遵循标识符规则(字母、数字、下划线,不能以数字开头),建议用小写+下划线(如get_max)。
  • 参数列表:接收外部传入的数据,多个参数用逗号分隔(如int a, int b)。
  • 函数体:用{}包裹的代码,实现具体功能。
  • return语句:返回结果给调用者,遇到return函数会立即结束。

2. 函数的分类

按不同标准,函数可以分为几类:

  • 按来源

库函数:C语言自带的,如printfscanf(需要#include <stdio.h>)。
自定义函数:自己写的函数,比如计算阶乘的函数。

  • 按参数

无参函数:不需要传入数据(如void show_menu())。
有参函数:需要传入数据(如int add(int a, int b))。

  • 按返回值

有返回值函数:返回具体结果(如int max(int a, int b))。
无返回值函数:只执行操作,用void声明(如void print_hello())。


三、函数的核心概念

1. 形参和实参

  • 形参(形式参数):函数定义时写的参数,相当于“占位符”,用来接收数据。   例:int add(int x, int y)中的xy就是形参。
  • 实参(实际参数):调用函数时传入的具体数据,可以是常量、变量或表达式。   例:add(3, 5)中的35add(a, b+c) 中的ab+c

注意:C语言中参数传递是“单向值传递”,形参的变化不会影响实参。  
比如:

void change(int x)
{
    x = 100; // 修改形参
}

int main() 
{
    int a = 10;
    change(a);
    printf("%d", a); // 输出10,实参a没变
    return 0;
}

2. 函数的返回值

  • 函数的返回值类型要和`return`语句后的表达式类型一致(或能自动转换)。  例:int get_sum(int a, int b) { return a + b; }(返回int类型)。
  • 无返回值的函数用void声明,可省略return。  例:void print_hello() { printf("Hello"); }
  • 一个函数可以有多个return语句,但同一时间只有一个会执行。  

  例:

 int is_even(int n) 
{
      if (n % 2 == 0) 
      {
          return 1; // 偶数返回1
      } 
      else 
      {
          return 0; // 奇数返回0
      }
  }

3. 函数的声明


C语言要求“先定义,后使用”,如果函数定义在调用之后,需要先声明。  
声明格式:函数头 + 分号(可省略形参名)。  
例:

// 函数声明
int add(int, int); // 省略形参名
// 或 int add(int a, int b);

// 函数调用(在main中)
int main() 
{
    printf("%d", add(2, 3));
    return 0;
}

// 函数定义(在调用之后)
int add(int a, int b) 
{
    return a + b;
}


四、函数调用的三种方式

1. 作为语句调用:适合无返回值的函数。  
   例:show_menu();

2. 作为表达式调用:有返回值的函数,可参与计算。  
   例:int sum = add(2, 3) + 5;

3. 作为参数调用:函数返回值作为另一个函数的参数。  
   例:printf("%d", add(2, 3));


五、实战案例

案例1:计算阶乘


需求:写一个函数,计算1~n的阶乘(n! = 1×2×…×n)。

#include <stdio.h>

// 计算阶乘的函数
unsigned long factorial(int n)

{
    unsigned long result = 1;
    for (int i = 1; i <= n; i++)

    {
        result *= i;
    }
    return result;
}

int main()

{
    int num;
    printf("请输入一个整数:");
    scanf("%d", &num);
    printf("%d的阶乘是%lu\n", num, factorial(num));
    return 0;
}

案例2:求多个数的最大值


需求:写一个函数求两个数的最大值,复用它求四个数的最大值。

#include <stdio.h>

// 求两个数的最大值
int get_max(int a, int b) 
{
    return a > b ? a : b;
}

int main() 
{
    int a, b, c, d;
    printf("请输入四个整数:");
    scanf("%d%d%d%d", &a, &b, &c, &d);
    
    // 复用get_max函数
    int max = get_max(a, b); // 先求前两个的最大值
    max = get_max(max, c);   // 再和第三个比
    max = get_max(max, d);   // 再和第四个比
    
    printf("最大值是%d\n", max);
    return 0;
}

案例3:简易计算器


需求:用函数实现加、减、乘、除功能,通过菜单选择操作。

#include <stdio.h>

// 菜单函数
void show_menu() 
{
    printf("===== 计算器 =====\n");
    printf("1. 加法\n");
    printf("2. 减法\n");
    printf("3. 乘法\n");
    printf("4. 除法\n");
    printf("0. 退出\n");
    printf("==================\n");
}

// 加法
float add(float a, float b) 
{
    return a + b;
}

// 减法
float sub(float a, float b) 
{
    return a - b;
}

// 乘法
float mul(float a, float b) 
{
    return a * b;
}

// 除法(处理除数为0的情况)
float div(float a, float b) 
{
    if (b == 0) 
{
        printf("错误:除数不能为0!\n");
        return 0;
    }
    return a / b;
}

int main() 
{
    int choice;
    float x, y, result;
    while (1) 
    {
        show_menu();
        printf("请选择操作:");
        scanf("%d", &choice);
        
        if (choice == 0) 
        {
            printf("退出程序!\n");
            break;
        }
        
        printf("请输入两个数:");
        scanf("%f%f", &x, &y);
        
        switch (choice) 
        {
            case 1: result = add(x, y); break;
            case 2: result = sub(x, y); break;
            case 3: result = mul(x, y); break;
            case 4: result = div(x, y); break;
            default: printf("无效选择!\n"); continue;
        }
        printf("结果:%.2f\n", result);
    }
    return 0;
}


六、总结

函数是C语言的核心,掌握函数能让代码更简洁、高效。今天我们学习了:

  • 函数的定义、分类和核心概念(形参、实参、返回值)。
  • 函数的声明和三种调用方式。
  • 通过三个实战案例巩固了函数的用法。

多练习是掌握函数的关键,试试课后作业:写一个函数判断素数,或实现字符串反转功能,相信你会越来越熟练!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值