第5章 函数与宏定义2019年4月(第10_11_12周).ppt
《第5章 函数与宏定义2019年4月(第10_11_12周).ppt》由会员分享,可在线阅读,更多相关《第5章 函数与宏定义2019年4月(第10_11_12周).ppt(53页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、12022/10/25第第5 5章章 函数与宏定义函数与宏定义主要内容主要内容5.1 5.1 函数的定义与调用函数的定义与调用5.2 5.2 函数间参数的传递函数间参数的传递5.3 5.3 变量的属性变量的属性5.4 5.4 函数的递归调用函数的递归调用5.5 5.5 宏定义宏定义2n模块化程序设计模块化程序设计n基本思想:将一个基本思想:将一个大程序大程序按功能按功能分割成分割成一些一些小模块小模块n分而治之分而治之5.1 函数的定义与调用函数的定义与调用C C语言是模块化程序设计语言语言是模块化程序设计语言 P92P92C C程序结构程序结构n一个完整的一个完整的语言程序:语言程序:2 2
2、种种1 1、是由一个、是由一个main()函数(又称主函数)和若干个其函数(又称主函数)和若干个其它函数结合而成的,它函数结合而成的,如:如:例例1.21.22 2、或仅由一个、或仅由一个main()函数构成,函数构成,如:引例,例如:引例,例1.11.1例例1.2 求两个数中的较大数求两个数中的较大数#include /*预处理理*/int max(int x,int y)/*定义定义max函数函数*/int z;if(xy)z=x;else z=y;return z;int main()/*定义主函数定义主函数*/int a,b,c;scanf(%d,%d,&a,&b);c=max(a,b
3、);printf(max=%dn,c);return 0;4程序运行结果:程序运行结果:键盘输入键盘输入 5,9程序输出为程序输出为 max=9 调用调用max函函数进行数进行处理处理分工:分工:主函数主函数 输入、输出输入、输出,max函数函数 处理处理联系:联系:主函数主函数把输入的把输入的2个实个实参传给参传给max函数的函数的2个个形参,形参,max函数函数把求出的最把求出的最大值返回给主函数输大值返回给主函数输出出 52022/10/25n什么是函数?什么是函数?n预先编好的一段能实现特定功能的模块预先编好的一段能实现特定功能的模块。n函数名:通常以该功能命名。函数名:通常以该功能命
4、名。例例 int max(int x,int y)/*/*定义定义maxmax函数函数*/int z;if(xy)z=x;else z=y;return z;n作用:简化程序,模块化。作用:简化程序,模块化。函数名函数名(名字而已)(名字而已)函数体:函数体:对对需要实现的需要实现的功能的详细功能的详细描述描述(本质)(本质)n函数是语言程序的函数是语言程序的基本单位基本单位n每个程序有且只有一个每个程序有且只有一个main函数函数n总是从总是从main函数开始执行,在函数开始执行,在main函数结束函数结束n函数是完成既定任务的函数是完成既定任务的功能体功能体n它涵盖了数学函数和一般过程它涵
5、盖了数学函数和一般过程n在在C C语言中:语言中:库函数库函数和和自定义函数自定义函数n编写程序编写程序就是编写一个个组成程序的就是编写一个个组成程序的自定义函数自定义函数6程序与函数程序与函数72022/10/25n分类:分类:1.1.标准函数标准函数(库函数)(库函数)nC C语言中语言中事先编好事先编好一批常用的功能一批常用的功能n分若干个分若干个头文件头文件存放,如:存放,如:stdio.h,math.h,string.h,time.h等,等,n使用标准函数前,必须加其所在的头文件,即使用标准函数前,必须加其所在的头文件,即预编译命令预编译命令例如:例如:若要用若要用 printf()
6、函数函数 则必须要用则必须要用#include 2.2.用户自定义函数用户自定义函数n用户用户根据需要自己编写根据需要自己编写的函数,如:例的函数,如:例1.2中中 max()函数的一般结构函数的一般结构n任何任何函数函数都是由都是由函数首部函数首部和和函数体函数体两部分组成。两部分组成。n其一般结构如下:其一般结构如下:函数返回值的类型函数返回值的类型 函数名函数名(函数参数表函数参数表)说明语句部分;说明语句部分;执行语句部分;执行语句部分;8函数首部函数首部函数体函数体例例 有参函数有参函数 int max(int x,y)int z;z=xy?x:y;return(z);合法标识符合法
7、标识符函数返回值类型函数返回值类型无返回值无返回值voidvoid函数体函数体函数类型函数类型 函数名(函数名(形参类型说明表形参类型说明表)说明部分说明部分语句部分语句部分 例例 有参函数有参函数 int max(int x,int y)int z;z=xy?x:y;return(z);注意:注意:x,y 要分别说明要分别说明n一般格式一般格式5.1.1 函数函数的的定义定义 p96p96例例 无参函数无参函数 printstar()printf(“*n”);或或 printstar(void)printf(“*n”);例例 空函数空函数dummy()函数体为空函数体为空n形式参数与实际参数
8、形式参数与实际参数n形形式式参参数:数:定义函数时定义函数时函数名后面括号中的变量名函数名后面括号中的变量名n实实际际参参数:数:调用函数时调用函数时函数名后面括号中的表达式函数名后面括号中的表达式 c=max(a,b);(main 函数函数)(max 函数函数)max(int x,int y)int z;z=xy?x:y;return(z);例例 比较两个数并输出大者比较两个数并输出大者#include int main()int a,b,c;int max(int x,int y);scanf(%d,%d,&a,&b);c=max(a,b);printf(Max is%d,c);retur
9、n 0;max(int x,int y)int z;z=xy?x:y;return(z);形参形参实参实参n n说明:说明:说明:说明:n n实参必须有确定的值实参必须有确定的值实参必须有确定的值实参必须有确定的值n n形参必须指定类型形参必须指定类型形参必须指定类型形参必须指定类型n n形参与实参形参与实参形参与实参形参与实参类型一致,个数相同类型一致,个数相同类型一致,个数相同类型一致,个数相同n n若形参与实参类型不一致,自动按形参类型转换若形参与实参类型不一致,自动按形参类型转换若形参与实参类型不一致,自动按形参类型转换若形参与实参类型不一致,自动按形参类型转换 函数调用转换函数调用转
10、换函数调用转换函数调用转换n函数的返回值函数的返回值n返回语句返回语句n形式:形式:return(表达式表达式);或或 return 表达式表达式;或或 return;n功能:功能:n使程序控制从被调用函数返回到调用函数中,使程序控制从被调用函数返回到调用函数中,n同时把返同时把返回回值带给调用函数值带给调用函数n说明:说明:n函数中可有多个函数中可有多个return语句语句,执行到哪个执行到哪个return语句,那么该语句,那么该return语句就起作用。语句就起作用。n若无若无return语句,遇语句,遇 时,自动返回调用函数时,自动返回调用函数n若函数类型与若函数类型与return语句中
11、表达式值的类型不一致,按前者为语句中表达式值的类型不一致,按前者为准,自动转换准,自动转换-函数调用转换函数调用转换nvoid型型函数函数用来明确表明函数不带回任何值用来明确表明函数不带回任何值例例 无返回值函数无返回值函数void swap(int x,int y)int temp;temp=x;x=y;y=temp;例例 函数返回值类型自动转换为函数类型函数返回值类型自动转换为函数类型#includeint main()float a,b;int c;int max(float x,float y);scanf(%f,%f,&a,&b);c=max(a,b);printf(Max is%d
12、n,c);return 0;int max(float x,float y)float z;z=xy?x:y;return(z);输入:输入:1.5,4.7结果:结果:Max is 4n函数调用的一般形式函数调用的一般形式 函数名函数名(实参表实参表);n说明:说明:n实参与形参实参与形参个数相等,类型一致,按顺序一一个数相等,类型一致,按顺序一一对应对应5.1.2 函数的调用函数的调用 P98P98n函数调用的方式函数调用的方式n 函数语句函数语句例例printstar();printf(“Hello,World!n”);n 函数表达式函数表达式例例m=max(a,b)*2;n 函数参数函数
13、参数例例printf(“%d”,max(a,b);m=max(a,max(b,c);n对被调用函数的声明和函数原型对被调用函数的声明和函数原型n对被调用函数要求:对被调用函数要求:n必须是必须是已存在已存在的函数的函数n库函数库函数:使用使用#include n用户自定义函数用户自定义函数:主调函数对被调函数作主调函数对被调函数作函数函数声明声明n函数声明函数声明n一般形式:一般形式:函数类型函数类型 函数名函数名(形参类型形参类型11形参名形参名1,1,.);.);或:或:函数类型函数类型 函数名函数名();();(不提倡使用)(不提倡使用)n作用:告诉编译系统作用:告诉编译系统函数类型、参
14、数个数及类型,函数类型、参数个数及类型,以便检验以便检验n函数声明与函数定义不同函数声明与函数定义不同n函数声明位置:函数声明位置:程序的数据说明部分(函数内或外)程序的数据说明部分(函数内或外)n下列情况下,可不作函数声明下列情况下,可不作函数声明被调用函数定义出现在主调函数之前被调用函数定义出现在主调函数之前在所有的函数定义之前,在函数的外部已做了函数声明在所有的函数定义之前,在函数的外部已做了函数声明#include int main()float add(float x,float y);/*/*函数声明函数声明*/float a,b,c;scanf(%f,%f,&a,&b);c=ad
15、d(a,b);printf(sum is%f,c);return 0;float add(float x,float y)float z;z=x+y;return(z);例例 函数声明举例函数声明举例#include float add(float x,float y)float z;z=x+y;return(z);int main()float a,b,c;scanf(%f,%f,&a,&b);c=add(a,b);printf(sum is%f,c);return 0;被调函数出现在被调函数出现在主调函数之前,主调函数之前,不必函数声明不必函数声明#include long sum(int
16、 a,int b);long factorial(int n);int main()int n1,n2;long a;scanf(%d,%d,&n1,&n2);a=sum(n1,n2);printf(a=%ld,a);return 0;long sum(int a,int b)long c1,c2;c1=factorial(a);c2=factorial(b);return(c1+c2);long factorial(int n)long f=1;int i;for(i=1;i=n;i+)f=f*i;return(f);long sum(int a,int b);long factorial(
17、int n);文件包含编译预处理命令文件包含编译预处理命令函数声明函数声明函数定义函数定义函数调用函数调用函数调用函数调用函数返回值函数返回值形参形参实参实参n函数的嵌套调用函数的嵌套调用nC C规定:函数规定:函数不可嵌套定义不可嵌套定义,但可以,但可以嵌套调用嵌套调用函数函数n示意图:示意图:main()调用函数调用函数a结束结束a函数函数b函数函数调用函数调用函数b例例 求三个数中最大数和最小数的差值求三个数中最大数和最小数的差值#include int dif(int x,int y,int z);int max(int x,int y,int z);int min(int x,int
18、 y,int z);void main()int a,b,c,d;scanf(%d%d%d,&a,&b,&c);d=dif(a,b,c);printf(Max-Min=%dn,d);return 0;int dif(int x,int y,int z)return max(x,y,z)-min(x,y,z);int max(int x,int y,int z)int r;r=xy?x:y;return(rz?r:z);int min(int x,int y,int z)int r;r=xy?x:y;return(rz?r:z);main()调用函数调用函数dif输出输出结束结束dif函数函数m
19、ax函数函数调用函数调用函数max调用函数调用函数minmin函数函数232022/10/255.2 函数间参数的传递函数间参数的传递 p101p101n一个函数的函数体,只有在该函数被调用时才会执行。一个函数的函数体,只有在该函数被调用时才会执行。n形参形参是被调函数中变量,是被调函数中变量,实参实参是主调函数中的变量,每个实参是主调函数中的变量,每个实参都是一个表达式,其类型必须与形参相符。都是一个表达式,其类型必须与形参相符。n函数被调用时才为形参分配存储单元,并将实参值赋值给形参。函数被调用时才为形参分配存储单元,并将实参值赋值给形参。n函数的参数传递指函数的参数传递指的就是实参与形参
20、结合的过程,将实参值赋的就是实参与形参结合的过程,将实参值赋值给形参,也称为虚实结合传值调用。值给形参,也称为虚实结合传值调用。n分:分:值传递值传递、址传递址传递n n值传递值传递n n函数调用时函数调用时函数调用时函数调用时,为形参分配单元为形参分配单元为形参分配单元为形参分配单元,并将实参的值并将实参的值并将实参的值并将实参的值复制复制复制复制到形参中;到形参中;到形参中;到形参中;n n调用结束,形参单元调用结束,形参单元调用结束,形参单元调用结束,形参单元被释放被释放被释放被释放,实参单元仍保留并维持原值。实参单元仍保留并维持原值。实参单元仍保留并维持原值。实参单元仍保留并维持原值。
21、n n特点:特点:特点:特点:形参与实参占用不同的内存单元形参与实参占用不同的内存单元形参与实参占用不同的内存单元形参与实参占用不同的内存单元;单向单向单向单向传递传递传递传递例例 计算计算x x的立方的立方#include float cube(float x)return(x*x*x);int main()float a,product;printf(Please input value of a:);scanf(%f,&a);product=cube(a);printf(Cube of%.4f is%.4fn,a,product);return 0;xaproduct1.21.21.72
22、8000运行结果:运行结果:Please input value of a:1.2Cube of 1.2000 is 1.7280Press any key to continue7 71111x:x:y:y:调用前:调用前:调用结束:调用结束:7 71111x:x:y:y:例例 交换两个数交换两个数#include int main()int x=7,y=11;printf(x=%d,ty=%dn,x,y);printf(swapped:n);swap(x,y);printf(x=%d,ty=%dn,x,y);return 0;void swap(int a,int b)int temp;t
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第5章 函数与宏定义2019年4月第10_11_12周 函数 定义 2019 10 _11_12
限制150内