函数
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
函数
C语言实际上是一种函数式语言,一个C语言源程序由一个main函数和其他函数组成。函数本质上是一段程序,用于完成某个特定的功能。除了主函数(main函数)外,其他函数均不能独立运行。使用函数之前要先定义函数,使用函数称为函数的调用。
1.函数的分类
(1)从用户使用的角度
标准函数:即库函数,例如printf函数、scanf函数;
用户函数:程序员在程序中定义的函数;
(2)从函数的形式来看
无参函数:主调函数并不将数据传送给被调用函数;
有参函数:在主调函数和被调函数之间有数据传递;
(3)从函数的作用范围来看
外部函数:允许其他文件中的函数调用;
内部函数:只限于本文件的其他函数调用它;
2.函数的定义
函数要先定义后使用,函数定义的一般格式:
函数类型函数名(形式参数表)
{
声明部分
执行部分
}
说明:
(1)函数类型:说明了函数返回值的类型,返回值为int型的函数定义时可以省略函数类型,即int为函数的默认类型;如果为void,则表示无返回值。
(2)函数名:遵循变量的命名规则,在同一个程序中,函数名必须唯一。
(3)形式参数表:可以为空,也可为多个参数,不管参数是否为空,圆括号都不能省略,形参必须说明其类型,且只能在本函数内部使用。
(4)函数体:分为说明部分和执行部分。说明部分包括变量的定义或所调用函数的声明,执行部分有执行语句组成。也可为空函数,即不产生任何操作。
(5)例如:float power(float x,int n)
{
int i;
float t=1;
for(i=1;i<=n;i++)
t=t*x;
return t;
}
3.函数的调用
(1)当一个函数需要使用某个函数的功能时,就可以调用该函数,函数调用的一般形式为:
函数名(实际参数表) //有参数的函数调用
函数名() //无参数的函数调用
(2)对于有参函数的调用,应注意以下几个问题:
1)在定义函数时,形参并不占用内存的存储单元,只有在被调用时才给形参变量
分配内存单元,在调用结束时,即刻释放所分配的内存单元。所以,形参是存在生命周期的;
2)实参和形参在数量上应严格一致,在类型上应相同或赋值兼容;
3)形参只能是变量,而实参可以是常量、变量或表达式。在函数调用时,实参必须有确定的值,以便把这些值传递给形参;
4)实参可以与形参同名,但是在内存在分配两个不同的存储单元。
4.函数的返回
两种方法可以终止函数运行并返回到调用它的函数中:
(1)执行到函数的最后一条语句后返回;
(2)执行到返回语句return时返回;return语句的格式为:
return 表达式;或者return(表达式);
说明:return 0/-1/1,一般情况下,0和-1或者0和1使用。
1)0和-1使用时:
return 0 //一般表示成功执行
return -1 //一般表示不成功
2)0和1使用时:
return 1 //真
return 0 //假
3)return; //可以跳出一个函数,过程。
5.参数的传递
在调用有参函数时,实参和形参之间要进行数据的传递,在C语言中,只能由实参单向传递给形参,而不能由形参传递回给实参,这种传递称值传递。
●调用函数时,先给形参分配独立的存储单元,再将实参的值一一赋值给对应的形参;
●在函数体中对形式参数的加工与实际参数已完全脱离关系;
●在执行被调函数时,形参的值可能发生改变,但调用结束后,形参单元被取消,而
实参单元仍保留维持原值,形参中的值将不回带到对应的实参中。
例如:swap函数实现两个变量的值进行交换。
#include
void swap(int a,int b)
{
int i;
printf("a=%d,b=%d\n",a,b);
i=a;
a=b;
b=i;
printf("a=%d,b=%d\n",a,b);
}
void main()
{
int x=6,y=9;
printf("x=%d,y=%d\n",x,y);
swap(x,y);
printf("x=%d,y=%d\n",x,y);
}
6.函数的声明
函数声明是对被调用函数的特征进行必要的说明,以此向编译系统提供函数名、函数类型、函数参数的个数和类型等必要的信息,以便编译系统对函数的调用进行检查。
(1)函数声明的位置
当在所有函数的外部被调用之前声明函数时,在函数声明的后面所有位置上都可以对该函数进行调用;
函数声明也可以放在调用函数内的声明部分,如在main函数内部进行声明,则只能在main函数内部才能识别该函数。
(2)函数声明的形式
函数声明是在函数首部加上分号即可,一般放在程序的最前面。其一般形式为:
函数类型函数名([形参类型[形参名1],形参类型[形参名2]….);
(3)函数声明与函数定义的关系主要体现在以下几个方面:
1)函数声明在程序的数据声明部分,函数定义的位置可以在调用它的函数之前,也可以在调用的函数之后,,甚至位于其他的源程序模块中;
2)函数定义位置在前,函数调用在后,或者函数类型为int和char时,可以不声明;
3)函数定义在调用它的函数之后或者函数在其他源程序模块中,且函数类型不是整型,则必须在函数调用之前,在本程序函数之外或本函数内的任意位置
声明该函数。
例如:求最大数和最小数的函数
#include
int maxmum(int x,int y,int z);
int minmum(int x,int y,int z);
void main()
{
int a,b,c,max,min;
scanf("%4d,%4d,%4d",&a,&b,&c);
max=maxmum(a,b,c);
printf("max=%d\n",max);
min=minmum(a,b,c);
printf("min=%d\n",min);
}
int maxmum(int x,int y,int z)
{
int max;
max=(x>y)?x:y;
max=(max>z)?max:z;
return(max);
}
int minmum(int x,int y,int z)