C语言函数是什么
C语言是一个非常适合结构化程序设计的开发工具,结构化程序设计的思想是把一个大问题分解成若干个小问题,每一个小问题就是一个独立的子模块,以实现特定的功能。在 C 程序中,子模块的作用就是由函数完成的,这样可以大大简化 main() 函数的设计,结构简单而清晰。
如果我们编写的程序越来越长,有成百上千行语句甚至更多,且只用一个 main() 函数来实现,那么 main() 函数的代码就会冗长,造成编写、阅读的困难,又给调试和维护带来了诸多不便。那么怎样调试才能比较方便、简洁、有效呢?要解决这些问题,就要使用本文介绍的C语言函数。
下图是一个函数调用的示意图。
其中,A.c 和 B.c 是 C 程序的源文件,a~g 代表各个子函数。
在 main() 函数中,按照所要完成的功能,调用了两次 printstar() 函数,调用了一次 sum() 函数。
1. 从函数定义的角度,可以将函数分为:
下面我们开始讲解这 6 个函数的用法:
如果我们编写的程序越来越长,有成百上千行语句甚至更多,且只用一个 main() 函数来实现,那么 main() 函数的代码就会冗长,造成编写、阅读的困难,又给调试和维护带来了诸多不便。那么怎样调试才能比较方便、简洁、有效呢?要解决这些问题,就要使用本文介绍的C语言函数。
什么是函数
一个 C 源程序可以由一个或多个文件构成(C 文件扩展名是 .c
),一个源文件是一个编译单位。一个源文件可以由若干个函数构成,也就是说,函数是 C 程序基本的组成单位。每个程序有且只有一个主函数 main(),其他的函数都是子函数。主函数可以调用其他的子函数,子函数之间可以相互调用任意多次。下图是一个函数调用的示意图。
示例1
函数调用的简单实例。#include<stdio.h> void printstar( ) /*定义函数printstar()*/ { printf("****************"); } int sum(int a,int b) /*定义函数sum()*/ { return a+b; /*通过return返回所求结果*/ } int main() { int x=2,y=3,z; printstar(); /*调用函数printstar()*/ z=sum(x,y); /*调用函数sum()*/ printf("\n%d+%d=%d\n",x,y,z); printstar(); /*调用函数printstar()*/ }运行结果:
****************
2+3=5
****************
- main():函数是程序的入口函数,是每个 C 程序必须有的函数;
- printstar():函数是自定义的函数,作用是输出一行星号;
- sum():函数也是自定义的函数,作用是计算两个数的和,并返回给调用它的函数一个执行结果。
在 main() 函数中,按照所要完成的功能,调用了两次 printstar() 函数,调用了一次 sum() 函数。
函数的分类
在 C 语言中,可以从不同的角度对函数进行分类。1. 从函数定义的角度,可以将函数分为:
- 标准函数。
- 自定义函数。
- 有返回值函数
- 无返回值函数。
- 无参函数。
- 有参函数。
下面我们开始讲解这 6 个函数的用法:
1)标准函数
标准函数也称库函数,是由C系统提供的,用户无须定义,可以直接使用,只需要在程序前包含函数的原型声明的头文件便可。像printf()、scanf()等都属于库函数。每个系统提供的库函数的数量和功能不同,当然有一些基本的函数是共同的。2)用户自定义函数
用户自定义函数是由用户根据自己的需要编写的函数,如【示例1】中的 sum() 函数和 printstar() 函数。对于用户自定义函数,不仅要在程序中定义函数本身功能如何实现,而且在主调函数中还必须对该被调函数进行原型说明,然后才能使用。3)有返回值函数
该类函数被调用执行完毕,将向调用者返回一个执行结果,称为函数的返回值,如【示例1】 中的 sum() 函数。由用户定义的这种有返回值的函数,必须在函数定义和函数声明中明确返回值的类型。4)无返回值函数
无返回值函数不需要向主调函数提供返回值,如【示例1】中的 printstar() 函数。通常用户定义此类函数时需要指定它的返回值类型为“空”(即 void 类型)。该类函数主要用于完成某种特定的处理任务,如输入、输出、排序等。5)无参函数
无参函数即在函数定义、声明和调用中均不带参数,如【示例1】中的 printstar() 函数。在调用无参函数时,主调函数并不将数据传递给被调函数。此类函数通常用来完成指定的功能,可以返回或不返回函数值。6)有参函数
有参函数,就是在函数定义和声明时都有参数,如【示例1】中的 sum() 函数。当主调函数调用被调用函数时,主调函数必须把要处理的值作为实参传递给被调函数的形参,以供被调函数处理。注意:程序不仅可以调用系统提供的标准库函数,而且可以自定义函数。在程序设计语言中引入函数的目的是使程序更便于维护,结构上更加清晰,减少重复编写代码的工作量,提高程序开发的效率。