C语言教程-12_1-初识函数
提要:
- 初步讲解C语言的
函数
的概念和语法
前置知识:
- 学习过数学,知道什么是数学的函数
- 掌握C语言
复合语句
的概念
什么是函数
数学意义上的函数
近代定义:
给定一个数集A
,假设其中的元素为x
,对A
中的元素x施加对应法则f
,记作f(x)
,得到另一数集B
,假设B
中的元素为y
,则y
与x
之间的等量关系可以用y=f(x)
表示,函数概念含有三个要素:定义域A
、值域B
和对应法则f
.
对于各位而言,一定知道函数的概念,简单的讲,就是根据一个特定的值x
,对其进行特定的计算过程f
,计算出最终的一个结果y
,也就是f(x)
.
注:为了方便后续内容的讲解,此后函数值
均使用f(x)
而不是y
表示!
例如,我们求一个整数的平方,这个运算可以封装
成一个函数f(x)=x^2
来进行计算,我们传入任意的整数x,最终的结果f(x)仍然是一个整数,其值为x的平方.
C语言中的函数
为什么需要函数
随着程序复杂度的提高,我们不能够将所有的功能/运算过程都堆在一个main函数中,适当地拆分出来,编写为若干子函数,让他们互相配合,共同完成一个庞大的目标.
也就是所谓的"大化小",每个函数都负责一个"小目标",最终将所有函数做的"贡献"合并起来,完成整个程序.
或者,将一个庞大的操作分成若干的几步小操作,依次
进行运算,可以使程序更加清晰!
这里涉及到面向过程
编程思想,后续会讲解到.
一个C函数的结构
C语言的函数(也包括其他所有支持函数
的各种高级语言)这一命名是从数学引申来的,其一般意义和数学函数几乎完全等价,关键都是进行某一种运算
.
前面的f(x)=x^2
这一函数,使用C语言进行描述,一种写法为:
1 | int f(int x){ |
很容易理解,这个函数的名称为f,其接受一个整数x,在函数中计算x*x的值,赋值给一个整型变量y,最后把y的值返回.我们想要使用这个函数也很简单:
1 | int x=10,x2; |
我们根据这个例子来对应二者的等价关系:
一个函数的各个部分 | 数学函数 | C语言的函数 |
---|---|---|
f | 函数名 | 函数名 |
x | 自变量 | 函数参数(形式参数) |
f(x) | 函数值 | 调用这个函数,return语句返回的值为函数值 |
x为整数 | 自变量的定义域(x为整数) | 形参x的类型(为int) |
返回的函数值为整数 | 因变量的值域(y/f(x)为整数) | int f(int x)中的第一个int,代表这个函数的返回值类型 |
执行的运算 | 对应法则f | 函数体{}中的语句构成的代码块,依次执行 |
我们可以很容易地看出两者之间的关系,我们将上面的代码完善一下,引入C语言函数的语法↓
为了直观,概念讲解直接在注释中给出:
1 | // 为了调用printf()这个函数需要引入stdio.h头文件 |
注释已经写的十分完善,读者在一步步阅读,也在一步步分析上面代码的写法.但是还有两个概念:
-
函数头
int f(int x)
这一部分实际上是一个函数签名
,它告诉了我们(更重要的是告诉编译器)这个函数接受1
个int类型
的参数,并最终返回
一个(任何函数都仅且仅能返回一个值)int类型
的返回值作为函数调用的结果. -
函数体
1
2
3
4
5{
int y;
y = x*x;
return y;
}紧跟着函数头的是一个
复合语句
,在这里称之为函数体
,它相当于指定了这个函数的真正运算,其内的各条子语句依次按照逻辑执行,最终(可能)返回一个值.
进一步分析结构
我们可以看到,一个完整的函数定义
(注意不是函数声明!!!)包括两部分:函数头和函数体.
并且函数头指定了这个函数的相关信息(函数参数的个数及其类型,函数的返回值类型),而且隐含的一点是,它唯一确定了这个函数!
函数体一旦给出,代表给出了这个函数的定义,这样这个函数就真正意义上的彻底给出!
函数头中的圆括号(),其中的各个声明,称为形式参数,各个参数使用逗号,
隔开,并且严格规定顺序,例如:
1 | double function(int a,char b); |
这个函数接受两个参数,第一个参数为int类型,第二个为char类型,返回一个double类型的值.
注意事项
-
然而,C语言的函数并不完全等同于数学函数,因为C语言的函数不一定需要参数,甚至,它可能都不需要返回一个值!
我们后面很快就能看到相关例子!—其实我们已经见到了,那就是main函数!它往往不需要参数!
-
一个函数一旦给出函数体,意味着这个函数实现了定义,在整个程序的任何其他位置,都不能够给出这个函数的第二个定义,即使两个定义一模一样也不行!
-
我们很快就会学习到,有无给出函数体的区别及意义,这涉及到
声明
和定义
的区别.并且,C语言中,同一个函数(一个函数名)只能有"一种"函数头—或者准确点:
函数签名
.
本部分讲解了C函数的基本框架语法,接下来会分部分详细讲解函数这一重要组成部分!
---WAHAHA
上一篇:C语言教程-11-字符串