☀️光天化日学C语言☀️(33)- 函数入门 | 开启下一个篇章!

Posted 英雄哪里出来

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了☀️光天化日学C语言☀️(33)- 函数入门 | 开启下一个篇章!相关的知识,希望对你有一定的参考价值。

🔥让天下没有难学的算法🔥

C语言免费动漫教程,和我一起打卡!
🌞《光天化日学C语言》🌞

入门级C语言真题汇总
🧡《C语言入门100例》🧡

几张动图学会一种数据结构
🌳《画解数据结构》🌳

组团学习,抱团生长
🌌《算法入门指引》🌌

竞赛选手金典图文教程
💜《夜深人静写算法》💜

一、前言

  本文作者是从 2007 年开始学 C语言 的,不久又接触了C++,基本就是 C/C++ 技术栈写了 14 年的样子,不算精通,但也算差强人意。著有《夜深人静写算法》系列,且承诺会持续更新,直到所有算法都学完。主要专攻 高中 OI 、大学 ACM、 职场 LeetCode 的全领域算法。由于文章中采用 C/C++ 的语法,于是就有不少读者朋友反馈语言层面就被劝退了,更何况是算法。
  于是,2021 年 06 月 12 日,《光天化日学C语言》 应运而生。这个系列文章主要服务于高中生、大学生以及职场上想入坑C语言的志同道合之人,希望能给祖国引入更多编程方面的人才,并且让自己的青春不留遗憾!
  这一章的主要内容是函数。
【这里补充一个图片,别忘了哟亲~】

二、人物简介

  • 第一位登场的就是今后会一直教我们C语言的老师 —— 光天。
  • 第二位登场的则是今后会和大家一起学习C语言的没什么资质的小白程序猿 —— 化日。

三、函数简介

  函数可以把大的计算任务分解成若干较小的任务,然后通过调用的方式达到代码复用。一个逻辑不写多遍,减少代码维护成本。
  调用函数的一方不需要了解函数的具体实现,对于他来说,这部分是一个 “黑盒子”,从而使得程序结构更加清晰。
  C语言在设计中考虑了函数的 高效性易用性 两个原则。函数的实现应该尽量简短,因为函数可以套函数,一个程序应该尽量由许多小的函数组成,而不是由少量较大函数组成。

四、函数的基本概念

  在 ☀️光天化日学C语言☀️(01)- 第一个C语言程序 中,我们其实已经接触到了函数的概念。

int main()
{
    printf("5201314\\n");
    return 0;
}

  以上就是一个函数,它被称为C语言的 入口函数,或者 主函数。所有程序执行,都是从这个函数开始的,以它为例,我们引出函数的一些基本概念。

1、函数的基本结构

  函数的基本结构如下图所示:


  通过这个图,我们类比main()这个函数,它的 返回类型int32位整型,函数名main参数列表 为 空,函数体printf("5201314\\n");返回值 为 0。

2、返回类型

  函数的返回类型可以是任意类型,例如:整型、浮点型、字符型、自定义类型等等。返回类型 和 返回值 是 配套的,当返回类型为void时,函数内部的返回值部分可以写return ;,也可以直接省略不写。

3、函数名

  函数名可以类比我们自己的名字。是给函数调用方用的。例如:mainprintf都是函数名。

4、参数列表

  函数的参数列表必须用()括起来,参数是函数需要处理的数据,例如:

    printf("光天化日学C语言\\n");

用来输出字符串,"光天化日学C语言\\n"就是一个参数,参数类型是字符串。

5、函数体

  函数体内部就是你可以任意发挥的部分,也就是函数的核心逻辑部分,可以是各种语句的组合。当然也可以是另一个函数,也就是函数是支持嵌套的。

6、返回值

  函数的返回值则表示了这个函数最后返回给调用方的数据,如果返回值的类型和函数的返回类型不一致,则会进行强制类型转换,前提是能够强转的情况下。

五、函数举例

  接下来,我们通过几个简单的例子,阐述一下函数的实际作用。

1、最大值

  【例题1】循环输入数据,每组数据为两个数 a a a b b b,要求输出两者中的大者。

  这个问题我们可以直接采用 条件运算符 来求两者中的最大值,C语言实现如下:

#include <stdio.h>
int main() {
    int a, b, c;
    while(scanf("%d %d", &a, &b) != EOF) {
        c = a > b ? a : b;
        printf("%d\\n", c);
    }
    return 0;
}

  如果运用函数的方式,我们可以定义一个函数叫max,具体实现如下:

int max(int a, int b) {
    int c = a > b ? a : b;
    return c;
} 

  其中,第一个int代表的就是这个函数的 返回类型max函数名int a, int b是这个函数的 参数列表函数体 就是条件运算符的计算部分, c c c 作为 返回值 进行返回。
  这样,作为调用方,我们只需要知道max这个函数是用来求两个数的最大值的,实际内部实现我们不需要关心,所以调用部分实现如下:

int main() {
    int a, b;
    while(scanf("%d %d", &a, &b) != EOF) {
        printf("%d\\n", max(a, b));
    }
    return 0;
}

  当然,我们还可以改max函数的实现,如下:

int max(int a, int b) {
    if(a > b)
        return a;
    return b;
} 

  然而,这对于调用方是完全透明的,这就意味着无论函数内部的算法怎么改,调用方始终可以不用改代码,这就是用函数的好处。

2、绝对值

  【例题2】循环输入数据,每组数据为一个整数 a a a,要求输出它的绝对值。

  同样的思路,我们可以定义一个名为absolute的函数,然后再由调用方去调用,实现如下:

#include <stdio.h>
int absolute(int a) {
    return a < 0 ? -a : a;
}
int main() {
    int a;
    while(scanf("%d", &a) != EOF) {
        printf("%d\\n", absolute(a));
    }
    return 0;
}

3、抛物线计算

  【例题3】对于一个抛物线 y = a x 2 + b x + c y = ax^2 + bx + c y=ax2+bx+c,给定 常数 a a a b b b c c c,和自变量 x x x,求应变量 y y y 的值。

  这个问题中,用f作为函数名,需要接收 a a a b b b c c c x x x 四个参数,所以函数可以这么现:

#include <stdio.h>
double f(double a, double b, double c, double x) {
    double y = a*x*x + b*x + c;
    return y;
}
int main() {
    double a, b, c, x;
    while(scanf("%lf %lf %lf %lf", &a, &b, &c, &x) != EOF) {
        printf("%lf\\n", f(a, b, c, x));
    }
    return 0;
}

  我们发现,上面的这个问题格外亲切,因为涉及到了 数学 中的 函数,那么数学中的函数和C语言中的函数,是什么关系呢?
  米国人把函数称为 “Function”,它除了有 “函数” 的意思,还有一层意思是 “功能”,我们把它翻译成 “函数”,就是因为它和数学上的函数在使用形式上有几分相似。
  当然,从本质上看,将 “Function” 理解为 “功能” 或许更恰当,C语言中的函数往往是独立地实现了某项功能。一个程序由多个函数组成。

六、库函数 和 自定义函数

1、库函数

  C语言自带的函数称为 库函数。C语言在发布时已经封装好了很多函数,它们被放置到不同的文件中,使用函数时引入对应的文件即可。这些函数都是专家编写的,执行效率极高,并且考虑到了各种边界情况,各位读者可以放心使用。

2、自定义函数

  和库函数相对,我们还可以编写自己的函数,拓展程序的功能,这种函数就是 自定义函数。自定义函数和库函数在编写和使用方式上完全相同,只是前者是系统提供的,后者是我们使用方自己根据业务功能自行实现的。


  本文对函数进行了一个简要的介绍,下文将针对函数的定义、声明、参数列表 进行一个更加深入的探讨,敬请关注。


通过这一章,我们学会了:
   1)函数的基本概念;
   2)函数的基本用法;

  • 希望对你有帮助哦 ~ 祝大家早日成为 C 语言大神!

课后习题


🔥让天下没有难学的算法🔥

C语言免费动漫教程,和我一起打卡!
🌞《光天化日学C语言》🌞

入门级C语言真题汇总
🧡《C语言入门100例》🧡

几张动图学会一种数据结构
🌳《画解数据结构》🌳

组团学习,抱团生长
🌌《算法入门指引》🌌

竞赛选手金典图文教程
💜《夜深人静写算法》💜

以上是关于☀️光天化日学C语言☀️(33)- 函数入门 | 开启下一个篇章!的主要内容,如果未能解决你的问题,请参考以下文章

☀️光天化日学C语言☀️(32)- continue 关键字 | 下一个!

☀️光天化日学C语言☀️(29)- while 语句 | 死循环啦!

☀️光天化日学C语言☀️(31)- break 关键字 | 当断则断!

☀️光天化日学C语言☀️(30)- for 语句 | 子子孙孙无穷尽也

☀️光天化日学C语言☀️(27)- 条件运算符 | 唯一的三目运算符

☀️光天化日学C语言☀️(26)- if else 语句 | if (years > 18) enter = 1;