C程序设计第5章函数教程课件.ppt
;;
第5章函数
;
5.1C函数与C程序结构
;模块化程序设计;模块化软件结构的示意图;函数是通过调用来执行的,允许函数间互相调用,也允许直接或间接的递归调用其自身;
;;调用另一个函数的函数称为主调函数、被调用的函数称为被调函数;
函数的四种形式:
a)从使用的角度来分为用户函数和系统函数
b)从形式上分成有参函数和无参函数
c)从作用的范围分为外部函数和内部函数
d)从返回值的角度分成有返回值函数和无返回值函数;5.2函数的定义及构成;函数具有以下特征
(1)存储类型
定义函数时[存储类型]可以是extern或static两种关键字说明
(2)数据类型
定义函数时[数据类型]是用来说明该函数返回值的类型,可以是整型、字符型、实型、指针型和其它构造类型。如果省略,则系统默认为int型。
(3)函数名
函数名是一个标识符,它的命名规则同变量相同。
(4)形式参数表
形式参数(简称形参)的说明形式如下:
数据类型形式参数1,数据类型形式参数2,……;(5)函数体
由{}括起来的部分称为函数体。由说明部分和语句部分组成
(6)函数的返回值
返回值可以是常数、变量或表达式,也可以是指针,但不能是数组名或函数名。
return表达式;
return(表达式);
例如:returns;
;关于return语句说明如下:
如果不需要从被调函数带回返回值可以不要return语句。一种情况是将函数类型定义为void型,也叫空类型.
例如:voidprintstar()
2、还可以用不带表达式的return作为函数的逻辑结尾,这时,return的作用是将控制权交给调用函数,而不是返回一个值。也可以不用return。
return;
;return语句是函数的逻辑结尾,不一定是函数的最后一条语句,一个函数中允许出现多个return语句,但每次只能有一个return语句被执行。
if(x0)return-1;
elseif(x==0)return0;
elsereturn1;;5.3函数的调用
5.3.1函数的调用;【例5.3】调用函数实现求长方形的面积。;
;例如,求两个数中的最大数;;【例5.5】写出程序运行结果。
#includestdio.h
intf(inta,intb)
{if(ab)return1;
elseif(a==b)return0;
elsereturn-1;
}
main()
{inti=2,p;
p=f(i,++i);/*传递的都是3*/
printf(“%d”,p);
}
;(4)函数定义的类型就是返回值的类型;
函数调用时,如果return中的表达式类型与函数类型不一致,则编译系统自动将表达式的类型转换成函数的类型后返回。
intmax(floatx,floaty){
floatz;
z=(xy)?x:y;
returnz;/*返回整型值*/
}
输入:3.5,4.8;(4)调用函数与被调用函数的相对位置关系
一个程序文件中可能包含若干个函数,函数在其中所处的位置代表函数定义的顺序,同时也决定了它的作用域。
若:调用点位于被调用函数后则不需说明,而调用点位于被调用函数前,则必须进行函数声明后才能调用。
声明时要说明被调用函数的返回值的类型、函数名、函数的形式参数表,其中形参都要在形参表中一一列举。函数声明的
格式为:类型名被调用函数的函数名();【例5.6】观察下面程序中声明函数与调用点的位置。#include#includestdio.h
longfac(intx);//声明函数fac,形参为int类型,此时函数作用域开始
voidmain()
{intn;
printf(inputaninteger:);
scanf(%d,n);
if(x0)
printf(dataerror\n);
else
printf(%d!=%ld,n,fac(n));