《函数与宏定义》PPT课件.ppt
《《函数与宏定义》PPT课件.ppt》由会员分享,可在线阅读,更多相关《《函数与宏定义》PPT课件.ppt(49页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、C C 程序设计基础教程程序设计基础教程第六章第六章函数与宏定义函数与宏定义*1/49第六章第六章函数与宏定义函数与宏定义 6.1函数概念函数概念 6.2变量作用域和存储类型变量作用域和存储类型 6.3内部函数与外部函数内部函数与外部函数 6.4递归函数设计和调用递归函数设计和调用 6.6综合范例综合范例 C C 程序设计基础教程程序设计基础教程第六章第六章函数与宏定义函数与宏定义*2/496.1函数概念函数概念 C语言允许把问题设计成一个一个的模块,程序通过调用语言允许把问题设计成一个一个的模块,程序通过调用模块功能来解决问题。这些模块通常都是通过函数来实模块功能来解决问题。这些模块通常都是
2、通过函数来实现的,又可称其为现的,又可称其为函数模块函数模块。C语言中,函数可分为两类语言中,函数可分为两类:一类是由系统定义的一类是由系统定义的标准函数标准函数,又称为,又称为库函数库函数,其函数,其函数声明一般是放在系统的声明一般是放在系统的include目录下以目录下以.h为后缀的头文为后缀的头文件中,如在程序中要用到某个库函数,必须在调用该函件中,如在程序中要用到某个库函数,必须在调用该函数之前用数之前用#include命令将库函数信息包含到命令将库函数信息包含到本程序中。本程序中。另一类函数是另一类函数是自定义函数自定义函数,两种形式:,两种形式:第一种:第一种:函数声明、函数调用、
3、函数定义。函数声明、函数调用、函数定义。第二种:第二种:函数定义、函数调用。函数定义、函数调用。C C 程序设计基础教程程序设计基础教程第六章第六章函数与宏定义函数与宏定义*3/496.1.1函数定义函数定义函数定义的一般形式可以有两种。函数定义的一般形式可以有两种。形式一:形式一:存储类型符存储类型符返回值类型符返回值类型符函数名函数名(形参说明表形参说明表)函数语句体函数语句体形式二:形式二:存储类型符存储类型符返回值类型型符返回值类型型符函数名函数名(形参表形参表)形参说明;形参说明;函数语句体函数语句体C C 程序设计基础教程程序设计基础教程第六章第六章函数与宏定义函数与宏定义*4/4
4、9说明:说明:1存储类型符存储类型符指的是函数的作用范围,它只有两种指的是函数的作用范围,它只有两种形式:形式:static和和extern。static说明函数只能作用于其所在的源文件,用说明函数只能作用于其所在的源文件,用static说说明的函数又称为明的函数又称为内部函数内部函数。extern说明函数可被其它源文件中的函数调用,用说明函数可被其它源文件中的函数调用,用extern说明的函数,又称为说明的函数,又称为外部函数外部函数。缺省缺省情况为情况为extern。2返返回回值值类类型型符符指指的的是是函函数数体体语语句句执执行行完完成成后后,函函数数返返回回的的值值的的类类型型,如如i
5、nt,float,char等等等等,若若函函数数无返回值,则用无返回值,则用空类型空类型void来定义函数的返回值。来定义函数的返回值。缺省缺省情况为情况为int型。型。C C 程序设计基础教程程序设计基础教程第六章第六章函数与宏定义函数与宏定义*5/493函数名函数名由任何合法的标识符构成。建议将函数名由任何合法的标识符构成。建议将函数名的命名与函数内容有一定关系。的命名与函数内容有一定关系。4在在第第一一种种函函数数定定义义的的形形式式中中,形形参参说说明明表表是是一一系系列用逗号分开的每个形参变量说明。列用逗号分开的每个形参变量说明。如:如:intx,inty,intz这表示形参变量有三
6、个:这表示形参变量有三个:x,y,z。它们的类型都是。它们的类型都是int型。型。在在第第二二种种函函数数定定义义的的形形式式中中,形形参参表表是是一一系系列列用用逗号分开的形参变量。如:逗号分开的形参变量。如:x,y,z5函数语句体函数语句体是放在一对花括号是放在一对花括号中,由局部数据类中,由局部数据类型描述和功能实现两部分组成。型描述和功能实现两部分组成。C C 程序设计基础教程程序设计基础教程第六章第六章函数与宏定义函数与宏定义*6/496函数返回语句函数返回语句的形式有以下两种:的形式有以下两种:函数无返回值的情况:函数无返回值的情况:return;函数有返回值的情况:函数有返回值的
7、情况:return(表达式的值表达式的值);在在第第种种情情况况下下要要注注意意“表表达达式式的的值值”的的类类型型必必须须与与函数返回值的类型相一致。函数返回值的类型相一致。例例如如:求求两两个个任任意意整整数数的的绝绝对对值值的的和和,用用函函数数abs_sum()实现。实现。/*直接调用库函数来计算直接调用库函数来计算m和和n的绝对值的绝对值*/intabs_sum(intm,intn)return(abs(m)+abs(n);/*函数函数abs()是在头文件是在头文件math.h中声明的中声明的*/C C 程序设计基础教程程序设计基础教程第六章第六章函数与宏定义函数与宏定义*7/49函
8、数定义如下:函数定义如下:intabs_sum(intm,intn)if(m0)m=-m;if(n0)n=-n;return(m+n);6.1.2函数声明和调用函数声明和调用一函数的声明一函数的声明函数声明的一般形式:函数声明的一般形式:存储类型符存储类型符返回值类型符返回值类型符函数名函数名(形参说明表形参说明表);如:如:intabs-sun(intm,intn);C C 程序设计基础教程程序设计基础教程第六章第六章函数与宏定义函数与宏定义*8/49二函数调用二函数调用函数调用是通过函数调用语句来实现的,分两种形式:函数调用是通过函数调用语句来实现的,分两种形式:无返回值的情况:无返回值的
9、情况:函数名函数名(实参表实参表);有返回值的情况:有返回值的情况:变量名函数名变量名函数名(实参表实参表);该变量名的类型必须与函数的返回值类型相同。该变量名的类型必须与函数的返回值类型相同。函函数数调调用用时时都都会会去去执执行行函函数数语语句句中中的的内内容容,函函数数执执行行完完毕后,回到函数的调用处,继续执行下面的语句。毕后,回到函数的调用处,继续执行下面的语句。C C 程序设计基础教程程序设计基础教程第六章第六章函数与宏定义函数与宏定义*9/496.1.3函数的传值方式函数的传值方式函数的传值方式函数的传值方式:采用实参表将每一个实参的值相应地传递给每一个形采用实参表将每一个实参的
10、值相应地传递给每一个形参变量,形参变量在接收到实参表传过来的值时,会在内参变量,形参变量在接收到实参表传过来的值时,会在内存存临时开辟新的空间临时开辟新的空间,以保留形参变量的值,当函数执行,以保留形参变量的值,当函数执行完毕时,这些完毕时,这些临时开辟的内存空间会被释放临时开辟的内存空间会被释放,并且形参的,并且形参的值在函数中不论是否发生变化,值在函数中不论是否发生变化,都不会影响到实参变量的都不会影响到实参变量的值的变化值的变化,这就是函数的传值方式。,这就是函数的传值方式。自定义函数在程序中的使用顺序有两种形式:自定义函数在程序中的使用顺序有两种形式:先进行函数声明,再进行函数调用,先
11、进行函数声明,再进行函数调用,函数定义放在函数定义放在函数调用之后。函数调用之后。函数声明在函数调用之前。函数声明在函数调用之前。函数定义放在函数调用之前。函数定义放在函数调用之前。C C 程序设计基础教程程序设计基础教程第六章第六章函数与宏定义函数与宏定义*10/49【例例6-1】编编程程序序,通通过过调调用用函函数数abs-sum(),求求任任意意两个整数的绝对值的和。两个整数的绝对值的和。/*exam6_1.c调用函数求两整数绝对值的和调用函数求两整数绝对值的和*/#includeintabs_sum(intm,intn);main()intx,y,z;scanf(%d%d,&x,&y)
12、;z=abs_sum(x,y);printf(sumis%d,z);intabs_sum(intm,intn)if(m0)m=-m;if(n0)n=-n;returnm+n;程序运行结果程序运行结果程序运行结果程序运行结果:712712 sumis19sumis19C C 程序设计基础教程程序设计基础教程第六章第六章函数与宏定义函数与宏定义*11/49用传值方式调用函数时,实参也可以是函数调用语句用传值方式调用函数时,实参也可以是函数调用语句【例例6-2】求任意三个数的绝对值的和。求任意三个数的绝对值的和。/*exam6_2.c调用函数求三个整数绝对值的和调用函数求三个整数绝对值的和*/#in
13、cludeintabs_sum(intm,intn);main()intx,y,z,sum;scanf(%d%d%d,&x,&y,&z);sum=abs_sum(abs_sum(x,y),z);printf(sumis%d,sum);intabs_sum(intm,intn)if(m0)m=-m;if(n0)n=-n;returnm+n;程序运行结果程序运行结果:7125 sumis24C C 程序设计基础教程程序设计基础教程第六章第六章函数与宏定义函数与宏定义*12/49注意:注意:对于有返回值的函数,调用时若没有把它赋给某个变量,对于有返回值的函数,调用时若没有把它赋给某个变量,仍然是可以
14、的,只是函数的返回值有可能会被丢失。仍然是可以的,只是函数的返回值有可能会被丢失。【例例6-3】求任意两数的乘积。求任意两数的乘积。自定义一个函数自定义一个函数mul(),用于求两数的乘积,程序:,用于求两数的乘积,程序:/*exam6_3.c求两个数的乘积求两个数的乘积*/#includefloatmul(floata,floatb);main()floatx,y,z;scanf(%f%f,&x,&y);z=mul(x,y);/*/x=x+10;y=y-10;mul(x,y);/*/C C 程序设计基础教程程序设计基础教程第六章第六章函数与宏定义函数与宏定义*13/49x=x*2;y=y*2
15、;printf(z=%f,mul(%f,%f)=%fn,z,x,y,mul(x,y);/*/floatmul(floata,floatb)returna*b;程序运行结果程序运行结果:56 z=30.000000,mul(30.000000,-8.000000)=-240.000000C C 程序设计基础教程程序设计基础教程第六章第六章函数与宏定义函数与宏定义*14/49程序说明程序说明:注释注释处调用函数后的返回值赋给变量处调用函数后的返回值赋给变量z。注释注释处调用函数后的返回值没有赋给任何变量,处调用函数后的返回值没有赋给任何变量,函数的返回值被丢失。函数的返回值被丢失。注释注释处调用函
16、数后的返回值成为了处调用函数后的返回值成为了printf()函数的函数的参数。参数。C C 程序设计基础教程程序设计基础教程第六章第六章函数与宏定义函数与宏定义*15/496.2变量作用域和存储类型变量作用域和存储类型 一变量的作用域一变量的作用域变量的作用域:指的是变量的作用域:指的是变量的有效范围变量的有效范围,针对变量不同,针对变量不同的作用域,可把变量分为局部变量和全局变量。的作用域,可把变量分为局部变量和全局变量。局部变量局部变量:在函数内部或某个控制块的内部定义的变量:在函数内部或某个控制块的内部定义的变量为局部变量,局部变量的有效范围只限于为局部变量,局部变量的有效范围只限于本函
17、数内部本函数内部,退出函数,该变量自动失效。退出函数,该变量自动失效。全局变量全局变量:在函数外面定义的变量称为全局变量,全局变:在函数外面定义的变量称为全局变量,全局变量的作用域是从该变量定义的位置开始,直到源文件结束。量的作用域是从该变量定义的位置开始,直到源文件结束。在在同一文件同一文件中的所有函数都可以引用全局变量。中的所有函数都可以引用全局变量。C C 程序设计基础教程程序设计基础教程第六章第六章函数与宏定义函数与宏定义*16/49局部变量和全局变量的局部变量和全局变量的作用域作用域如图所示:如图所示:C C 程序设计基础教程程序设计基础教程第六章第六章函数与宏定义函数与宏定义*17
18、/49【例例6-4】变量作用域应用举例,阅读下面的程序,变量作用域应用举例,阅读下面的程序,注意区分局部变量和全局变量的作用域。注意区分局部变量和全局变量的作用域。/*exam6_4.c变量作用域举例变量作用域举例*/#includevoida(void);voidb(void);voidc(void);intx=1;main()intx=5;printf(localxinouterscopeofmainis%dn,x);C C 程序设计基础教程程序设计基础教程第六章第六章函数与宏定义函数与宏定义*18/49intx=7;printf(localxininnerscopeofmainis%dn
19、,x);printf(localxinouterscopeofmainis%dn,x);a();b();c();a();b();c();前三次输出前三次输出结果结果:localxinouterscopeofmainis5localxininnerscopeofmainis7localxinouterscopeofmainis5C C 程序设计基础教程程序设计基础教程第六章第六章函数与宏定义函数与宏定义*19/49printf(localxinmainis%dn,x);getchar();return0;voida(void)intx=25;printf(nlocalxinais%daftere
20、nteringan,x);+x;printf(localxinais%dbeforeexitingan,x);C C 程序设计基础教程程序设计基础教程第六章第六章函数与宏定义函数与宏定义*20/49voidb(void)staticintx=50;printf(nlocalstaticxis%donenteringbn,x);+x;printf(localstaticxis%donexitingbn,x);voidc(void)printf(nglobalxis%donenteringcn,x);x*=10;printf(globalxis%donexitingcn,x);C C 程序设计基础
21、教程程序设计基础教程第六章第六章函数与宏定义函数与宏定义*21/49程序运行结果程序运行结果:后后6次函数调用次函数调用localxinais25afterenteringalocalxinais26beforeexitingalocalstaticxis50onenteringblocalstaticxis51onexitingbglobalxis1onenteringcglobalxis10onexitingclocalxinais25afterenteringalocalxinais26beforeexitingalocalstaticxis51onenteringblocalstati
22、cxis52onexitingbglobalxis10onenteringcglobalxis100onexitingc最后一次输出:最后一次输出:localxinmainis5C C 程序设计基础教程程序设计基础教程第六章第六章函数与宏定义函数与宏定义*22/49二变量的存储类型二变量的存储类型变量的存储类型:指的是变量的变量的存储类型:指的是变量的存储属性存储属性,它说明,它说明变量变量占用存储空间的区域。占用存储空间的区域。在内存中,供用户使用的存储区由在内存中,供用户使用的存储区由程序区程序区、静态存储区静态存储区和和动态存储区动态存储区三部分组成。三部分组成。变量的存储类型有四种:变
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 函数与宏定义 函数 定义 PPT 课件
限制150内