函数的定义和调用
函数的定义和调用
7.2函数定义
函数定义的一般形式:
类型标识符 函数名(形式参数表列) 函数定义函数首部不要以分号结尾
{
说明部分
执行部分
}
例:
1类型标识符○2函数名○3形式参数表列 int max(int a,int b) /*函数首部*/ ○
4 { /*函数体开始*/○
int z ; /*说明部分*/
if (a>b)z=a; /*执行部分*/
else z=b;
return (z );
}
说明:函数定义包括函数首部和函数体两部分。
1类型标识将是指函数返回值的类型,○简称函数值类型。函数的返回值由函数中的return 语句获得,即return 后的表达式的值,可以是简单类型、void 类型或构造类型等,注意一般函数返回什么类型的数据,函数的类型就定义成相应的类型。void 类型为空类型,表示函数没有返回值。如希望不返回值,可以定义函数类型为void 类型,当函数值类型为int 时,可省略函数类型的说明。关于return :函数的值只能通过return 语句返回主调函数,返回函数值的类型和函数定义中函数的类型应保持一致,如果函数值为int 型可以省略函数类型说明,不返回函数值的函数,明确定义成空类型。
2函数名是函数的标识符。函数名取名遵循c 语言标识符的命名规则,区分大小写。函○
数名后的形式参数表列给出函数的形式参数及其类型说明。
3形式参数简称形参,形式参数及其类型说明放在函数名后的一对圆括号中.无论函数○
是否有形式参数,函数名后的圆括号不可省;圆括号内没有形式参数的函数我们称之为无参函数,有形式参数的函数我们称为有参函数。强调:没有形式参数圆括号也不能省。形式参数可以是各种类型的变量,形式为:形参1类型 形参1,形参2类型 形参2 各参数之间用逗号间隔。在进行函数调用时,主调函数将赋予这些形式参数实际的值。
4函数体:函数说明之后的花括号“{}”括起来的部分,包括声明部分和执行部分: ○
1) 声明部分:用来对函数中使用的变量和函数作说明。
2) 执行部分由基本语句组成.函数的功能由函数体内的各个语句的执行来实现。 解释函数
函数的调用
一个函数被定义后,程序中的其他函数就可以使用这个函数,这个过程称为函数调用。
1。函数调用的一般形式
函数名(实参表列) ;实际参数表中的参数可以是常数、变量或构造类型数据,各实参之间也是用逗号分隔。对无参函数调用时无实际参数表。
函数有以下三种调用方式:
(1) 函数表达式:函数调用出现在一个表达式中、这种表达式称为函数表达式。例如w =max(x,y) ;此时要求函数返回一个确定的值.参加表达式的计算。这里把max 的返回值
赋给变量w 。
(2) 函数语句:把函数调用作为一个语句,例如:printf (“%d”,a ) ,这是以函数语句的方式调用函数。
(3)函数参数。函数调用作为一个函数的实参,把函数的返回值作为实参传递,一次要求函数必须是有返回值的。例如:m=max(a,max(b,c) ; 其中max(b,c) 是一次函数调用,它的值作为max 另一次调用的实参。
2.函数调用语句的执行过程
计算每个实参表达式的值,并把此值存人被调用函数所对应的形参单元中;把执行流程转入被调用函数体.执行函数体中的语句;当执行到彼调用函数体的右花括号或return 语句时,被调用函数体执行完成,返回到主调函数中此次调用函数语句的下一条语句,继续往下执行。
版书书上P72例子讲解
#include
int max(int a,int b) 函数定义,详细的说明函数的功能,不管main 函数在什么位置, { 程序的执行总是从main 函数开始的。main 函数中z=max(x,y ) if(a>b) return a; 语句表示主函数调用了max 函数,是哪一种调用方式呢?函数 else return b; 表达式的方式,函数调用时,实参x 的值传递给相应的形参a } 实参y 传递给相应的形参b ,若scanf 输入3,5,x 、y 的值分别 main() 是?a 、b 的值分别是?开始调用max 函数,main 函数暂时停止 { 运行,解释max 函数。max 函数执行的结果将两数中的大者返 int x,y,z; 回。这里主函数中设置返回值赋给z 。调用结束后返回到主调 printf(“input two numbers:\n”); 函数中此次调用函数语句的下一条语句,继续往下执行。 scanf(“%d%d”,&x,&y); 也就是开始执行printf 语句。
z=max(x,y);
printf(“maxmum=%d”,z)
}
上面讲的是函数定义放在main 函数之前的情况。那么如果函数定义放在main 函数之后,必须在函数调用以前对函数进行声明。书上的例子:
int max(int a,int b); 由于max 函数放在main 之后,
main() 在调用之前要进行声明,意思是告诉计算机编译系统,程序将 { 出现一个max 函数,不能太突然了,吓人家一大跳
int x,y,z; 函数声明与函数定义中的函数首部相同,但是末尾要加分号。 printf(“input two numbers:\n”); 函数声明时里面的参数可以省略不写,写成 scanf(“%d%d”,&x,&y); int max(int,int),也可以和定义的参数不同,但是 z=max(x,y); 类型标识符不能省略,而且两个参数则对应两 printf(“maxmum=%d”,z) 个类型说明符,这里不能只写一个int
}
int max(int a,int b)
{
if(a>b) return a;
else return b;
}
函数的形式参数和实际参数见教材P73