1.概述
函数是模块化程序设计思想的产物,是构成C语言程序的基本功能模块,它完成一项相对独立的任务。一个C语言程序是若干函数构成,在构成C程序的诸多函数中有且只有一个主函数。函数是程序的最小组成单位。所有函数之间的关系是平行的,没有从属的概念。
在C语言中函数可以分为两类,一类是由系统定义的标准函数,另外一种是自定义函数。
2.函数定义与声明
2.1函数定义
函数的定义必须遵循“先定义,后使用”的原则。函数的一般格式:
类型说明符 函数名(类型说明符 形参变量1,类型说明符 形参变量2,......)
{
声明语句部分;
执行语句部分;
}
在函数定义是需要定义函数头,函数体两个部分。
函数头:函数名,函数类型和形式参数表;
函数体:函数体是函数头下面最外层一对花括号里面的代码,它用以实现函数的功能,函数体内可以有函数说明,变量说明,可执行语句。例:
void function(void) { }
2.2函数声明
1.标准库函数的说明
标准库函数可以在程序的开头部分用#include进行文件包含,printf()以及sqrt()等都属于这种函数。
2.自定义函数的说明
在函数与主调函数在同一个程序文件中,需再调用前对语句进行说明:
类型说明符 函数说明符(类型说明符 形参变量1,类型说明符 形参变量2,......);
3.函数参数,返回值与调用
3.1函数的参数
函数的参数分为形参与实参两种,作用是实现数据传送。形参没有具体的值,所以称它为形参,也叫虚参,实参有确定的值,所以称它是实际参数。
实参与形参之间的关系:
1.实参的个数,类型应该和形参的个数和类型一致,调用函数时,系统给形参分配存储单位,并且把实参的数值传递给形参。
2.实参与形参分别属于主调函数与被调函数,具有不同的内存单位。所以在函数调用时形参发生改变,不会影响到实参。
3.实参与形参之间是“单向值传递”,只有实参传递给形参,形参不会传递给实参。
实参与形参结合实例:
#include "stdafx.h" float add(float x,float y) { float z; z=x+y; return z; } int _tmain(int argc, _TCHAR* argv[]) { float a,b,sum; float add(float x,float y); scanf("%f,%f",&a,&b); printf("sum=%f\n",add(a,b)); return 0; }
3.2函数返回值
函数的值只能通过return语句返回主调函数,当遇到return时,方法执行将终止。
return语句的使用一般形式为:
return (表达式)
return语句应书写在函数体的算法实现部分,圆括号可以省略。
3.3函数调用
在C语言中,可以用以下几种方法调用函数:
1.函数表达式。例:a=add(b+c);
函数作为表达式的一项,出现在表达式中,以函数返回值与表达式的运算,这种方式要求函数是有返回值的。
2.函数语句。例:function();
C语言中的函数可以只进行某些操作而不返回函数值,这时的函数调用可作为一条独立的语句。
3.函数参数。例:a=add(b,add(c,d));
函数作为另一个函数调用的实际参数出现。这种情况是把该函数的返回值作为实参进行传递,因此要求该函数必须有返回值。
3.3.1调用说明
1.函数名称必须与具有该功能的自定义函数名称一致;
2.实参在数量,类型,顺序上应严格和形参匹配;
3.函数调用也是一种表达式,它的值是函数的返回值;
4.被调函数可以是自定义函数,也可以是系统函数,也可以是调用自身;
5.被调函数中可以点用函数;
例:编写两个函数,求两个整数的最大公约数,最小公倍数
#include "stdafx.h" int GCD(int m,int n) { int p=0; while(m%n) { p=m%n; m=n; n=p; } return n; } int LCM(int m,int n) { int p=GCD(m,n); return(m*n/p); } int _tmain(int argc, _TCHAR* argv[]) { int m,n; printf("input m,n:"); scanf("%d,%d",&m,&n); printf("Greatest Common Divisor is:%d,Least Common Multiple is %d\n",GCD(m,n),LCM(m,n)); return 0; }