C语言程序ppt课件ch7函数.ppt
《C语言程序ppt课件ch7函数.ppt》由会员分享,可在线阅读,更多相关《C语言程序ppt课件ch7函数.ppt(71页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第七章1 本章要点本章要点函数的定义函数的定义函数的调用函数的调用函数间的数据传递函数间的数据传递变量的存储类型变量的存储类型变量的作用范围变量的作用范围内部函数和外部函数内部函数和外部函数2C C程序是函数的集合体,每程序是函数的集合体,每个函数是一个独立的程序模个函数是一个独立的程序模块块。有一个主函数,若干个子函有一个主函数,若干个子函数,程序总是从主函数开始数,程序总是从主函数开始执行;执行;函数可集中或分散存放在一函数可集中或分散存放在一个或多个源程序文件中。个或多个源程序文件中。所有子函数地位平等,可互所有子函数地位平等,可互相调用、自我调用。相调用、自我调用。引入函数的优点:引入
2、函数的优点:减少重减少重复编写程序的工作量;使程复编写程序的工作量;使程序便于调试和阅读。序便于调试和阅读。函数函数F1()main()F11()F2()F21()F22()C C语言程序的结构语言程序的结构7.1 7.1 函数的概念和函数的定义函数的概念和函数的定义3数学函数数学函数 math.h math.h字符和字符串函数字符和字符串函数 ctype.h,string.h ctype.h,string.h输入输入/输出输出函数函数 stdio.h stdio.h动态存储分配函数动态存储分配函数 calloc(),malloc()calloc(),malloc()形式形式无参无参函数函数有
3、参有参函数函数空函数空函数库函数库函数用户定义函数用户定义函数:C C函数的分类函数的分类47-1 输入三个整数,计算它们的和并输出运算结果。输入三个整数,计算它们的和并输出运算结果。main()int a,b,c,sum;scanf(%d,%d,%d,&a,&b,&c);sum=add(a,b,c);printf(sum=%dn,sum);int add(int x,int y,int z)int s;s=x+y+z;return s;函数示例定义的定义的求和函求和函数数5定义函数应包括的内容:定义函数应包括的内容:(1)指定函数的名字,以便以后按名调用;)指定函数的名字,以便以后按名调用;
4、(2)指定函数的类型,即函数值的类型;)指定函数的类型,即函数值的类型;(3)指定函数的参数的名字和类型(有参);)指定函数的参数的名字和类型(有参);(4)指定函数执行的操作,即函数完成的功能。)指定函数执行的操作,即函数完成的功能。在程序中用到的所有函数,必须先定义,后使用。在程序中用到的所有函数,必须先定义,后使用。6定义函数的一般形式定义函数的一般形式类型标识符类型标识符 函数名函数名(形式参数表形式参数表)说明部分说明部分 语句语句若无参数,写若无参数,写void或空。或空。是被初始化的内部变量,是被初始化的内部变量,寿命和可见性仅限于函寿命和可见性仅限于函数内部数内部若不说明类型,
5、一律自若不说明类型,一律自动按整型处理动按整型处理函数体(一段程序,实现函数体(一段程序,实现函数的功能)函数的功能)71.无参函数的定义形式无参函数的定义形式 类型标识符类型标识符 函数名(函数名()说明部分说明部分 语句语句 例例7-1 print_message()printf(How are you!n);8 例例7-2 int max(int x,int y)int z;z=xy?x:y;return z;类型标识符类型标识符 函数名(函数名(形式参数表列形式参数表列)说明部分说明部分 语句语句 int max(x,y)int x,y;int z;z=xy?x:y;return z;
6、形参变量的说明形参变量的说明(传统形式传统形式)形参变量的说明形参变量的说明(现代形式现代形式)2.有参函数的定义形式有参函数的定义形式93.形式参数说明形式参数说明形式参数形式参数:在定义函数时函数名后面括弧中的变量名在定义函数时函数名后面括弧中的变量名在形参表中说明的形参,在函数体中不再说明,可在形参表中说明的形参,在函数体中不再说明,可以同一般变量一样直接使用。以同一般变量一样直接使用。形参形参调用前不占内存单元调用前不占内存单元,调用时占用,调用后释,调用时占用,调用后释放。放。形参是函数的内部变量,只在函数内部才有意义。形参是函数的内部变量,只在函数内部才有意义。对每个形参必须指明其
7、名字和数据类型。对每个形参必须指明其名字和数据类型。多个形参用逗号分隔。多个形参用逗号分隔。107.1.3 7.1.3 函数的调用函数的调用 1.函数调用的一般形式为:函数调用的一般形式为:函数名(实际参数列表);函数名(实际参数列表);或或 函数名(实际参数列表)函数名(实际参数列表)说明:说明:实参必须有确定的值实参必须有确定的值,可以是常量、变量、表达式及函数调用。可以是常量、变量、表达式及函数调用。实参与形参的类型、个数、顺序必须一致。实参与形参的类型、个数、顺序必须一致。多个实参用逗号分隔。多个实参用逗号分隔。2.执行过程:执行过程:计算各个表达式计算各个表达式;把得到值赋给对应的形
8、参把得到值赋给对应的形参;执行函数体执行函数体;遇到遇到return语句或执行完最后一条语句,返回到函数调用语句或执行完最后一条语句,返回到函数调用处。处。11(1)函数语句函数语句:(把(把函数调用作为一个语句)函数调用作为一个语句)一般形式:一般形式:函数名(实际参数表);函数名(实际参数表);使用情况:这种方式常用于调用一个可以忽略返回值使用情况:这种方式常用于调用一个可以忽略返回值或没有返回值的函数,只要求函数完成一定的操作。或没有返回值的函数,只要求函数完成一定的操作。例如:例如:print_message();3.3.3.3.函数调用的具体方式函数调用的具体方式函数调用的具体方式函
9、数调用的具体方式(2)函数表达式:函数表达式:(函数调用出现在一个表达式中)(函数调用出现在一个表达式中)一般形式:一般形式:变量名变量名=函数表达式函数表达式 使用情况:这种表达式称为函数表达式。要求函数带使用情况:这种表达式称为函数表达式。要求函数带回回 一个确定的值参加表达式的运算。一个确定的值参加表达式的运算。例如:例如:c=3+max(a,b);d=pow(c,i);127.1.4 7.1.4 7.1.4 7.1.4 函数的返回值函数的返回值函数的返回值函数的返回值 2.函数的返回值语句函数的返回值语句 一般形式:一般形式:return 表达式表达式;或或 return(表达式);(
10、表达式);功能:功能:退出函数,将表达式的值带回主调函数,回到退出函数,将表达式的值带回主调函数,回到程序原来的位置继续执行。程序原来的位置继续执行。1.定义定义:通过函数调用使主调函数得到一个确定:通过函数调用使主调函数得到一个确定2.的值,称为的值,称为函数的返回值函数的返回值。13说明:说明:returnreturn语句只能把语句只能把一个返回值一个返回值传递给调用函数。传递给调用函数。返回值的类型为定义的函数类型,若返回值的类型为定义的函数类型,若returnreturn语句中语句中表达式类型与函数类型不一致,以表达式类型与函数类型不一致,以函数类型为准函数类型为准。返回值可以是返回值
11、可以是有确定值有确定值的常量、变量或表达式,也的常量、变量或表达式,也可以是地址。当返值是地址时,应该用指针接受。可以是地址。当返值是地址时,应该用指针接受。无返回值的函数,定义为无返回值的函数,定义为voidvoid类型类型(无类型函数)。无类型函数)。一个函数中可以有多个返回语句。一个函数中可以有多个返回语句。14l 例例7-3 7-3 用函数用函数factofacto计算计算 m m 阶乘。阶乘。main()main()intint m;long mm;m;long mm;long facto();long facto();scanf(%dscanf(%d,&m);,&m);mm=fac
12、to(m);mm=facto(m);printf(%dprintf(%d!=%ld.n,m,mm);!=%ld.n,m,mm);long facto(long facto(intint x)x)long y;long y;for(y=1;x0;-x)y*=x;for(y=1;x0;-x)y*=x;return(y);return(y);函数执行过程函数执行过程 main()mm=facto(m);facto (x)return(y);调用调用返回返回函数调用15 main()int a,b,c;scanf(“%d,%d”,&a,&b);c=max(a,b);printf(“Max is%d”,
13、c);例7-4 int max(int x,int y)int z;z=xy?x:y;return(z);形参:通知系统形参:通知系统 要预留内存位置要预留内存位置.实参:在运行时实参:在运行时把值传给函数把值传给函数.把函数的把函数的 结果赋给函数名结果赋给函数名形参与实参、函数名与返回值之间的关系形参与实参、函数名与返回值之间的关系16/*1*/*2*/*3*/*4*/*5*/*11*/*12*/*13*/*14*/*15*/*16*/main()main()int a,b,c;int a,b,c;scanf(%d,%d,&a,&b);scanf(%d,%d,&a,&b);c=c=max(
14、max(a,ba,b););printf(”max=%dn,c);printf(”max=%dn,c);int int max(x,y)max(x,y)int x,y;int x,y;int z;int z;if(xy)z=x;if(xy)z=x;else z=y;else z=y;return(z);return(z);断点断点保护断点和保护断点和现场,转向现场,转向1111入口入口虚实结合虚实结合a-xa-x,b-yb-y返回断点返回断点恢复现场恢复现场带回函数值带回函数值数据在函数间的传递数据在函数间的传递 17int max(x,y)int max(x,y)int x,y;int x,
15、y;int z;int z;if(xy)if(xy)z=x;z=x;else z=y;else z=y;return(z);return(z);返回整型返回整型函数值函数值int int maxmax(x,y)(x,y)int x,y;int x,y;int z;int z;if(xy)if(xy)z=x;z=x;else z=y;else z=y;return;return;返回不确定返回不确定的函数值的函数值 max(x,y)max(x,y)int x,y;int x,y;int z;int z;if(xy)if(xy)z=x;z=x;else z=y;else z=y;无返回语句无返回语
16、句在此返回在此返回缺省类型说明缺省类型说明 数据返回值数据返回值 18 例例例例7-57-57-57-5用函数计算浮点数用函数计算浮点数用函数计算浮点数用函数计算浮点数x x x x的的的的n n n n次方,其中次方,其中次方,其中次方,其中n n n n为为为为intintintint型(型(型(型(n=0n=0n=0n=0)double power(double x,int n)double p=1;int i;if(n0)for(i=1;iy?x:y;return(z);main()int a,b,c;scanf(“%d,%d”,&a,&b);c=max(a,b);printf(“ma
17、x is%d”,c);建议都加以声明建议都加以声明25被调用函数在主调函数被调用函数在主调函数之前之前定义定义 float add(float x,float y)float z;z=x+y;return(z);main()float a,b;scanf(“%f,%f,“&a,&b);printf(“sum is%f”,add(a,b);26在所有函数在所有函数定义之前说明定义之前说明char letter(char,char);float f(float,float);int i(float,float);main().char letter(char c1,char c2)float f(
18、float x,float y)int i(float,float)在所有函数之前在所有函数之前说明函数类型说明函数类型定义函数定义函数letter、f和和i277.2 数组作函数参数数组作函数参数数组元素可以作函数的实参数组元素可以作函数的实参 数组元素作为表达式的组成部分做函数的实参可数组元素作为表达式的组成部分做函数的实参可以单向传递给形参。以单向传递给形参。例如:例如:int a10;x=power(a6,5);数组名可以作函数的实参和形参数组名可以作函数的实参和形参多维数组可以作函数参数多维数组可以作函数参数28一维数组作函数参数,形参的写法为:一维数组作函数参数,形参的写法为:类型
19、说明符类型说明符 形参数组名形参数组名数组长度数组长度 例如:例如:float average(float array10)main()float b10;int i;for(i=0;i10;i+)scanf(“%f”,&bi);average(b);7.2.1 一维数组作函数参数一维数组作函数参数说明:说明:形参和实参分别定义数组形参和实参分别定义数组数组做函数参数时,实参数组做函数参数时,实参应用应用数组名数组名,必须有确切值必须有确切值实参数组和形参数组类型实参数组和形参数组类型应一致。应一致。29说明:说明:实参数组和形参数组大小不一定一致,实参数组和形参数组大小不一定一致,形参数组可
20、以不形参数组可以不指定大小指定大小。(指一维数组)。(指一维数组)。数组名除作为变量的标识外数组名除作为变量的标识外,还代表该还代表该数组在内存中存数组在内存中存放区域的首地址放区域的首地址。数组名做函数实参与形参之间是数组名做函数实参与形参之间是“地址传递地址传递”,实参数实参数组将数组的起始地址传递给形参数组。编译系统不再为组将数组的起始地址传递给形参数组。编译系统不再为形参数组分配存储单元。形参数组分配存储单元。在函数体中对形参数组的元素操作时就是对实参数组的在函数体中对形参数组的元素操作时就是对实参数组的元素进行操作。元素进行操作。形参数组各元素的值发生变化会使实参形参数组各元素的值发
21、生变化会使实参数组各元素的值发生同样的变化数组各元素的值发生同样的变化。数组名作函数参数可实现大量数据的传递数组名作函数参数可实现大量数据的传递,无须返回数无须返回数组值。组值。30例例7-7 阅读如下程序阅读如下程序,给出打印结果给出打印结果 void swap(int a)int t;t=a0;a0=a1;a1=t;main()int b2=1,2;swap(b);printf(“b0=%d,b1=%dn”,b0,b1);结果:结果:程序运行演示程序运行演示可不定义 长度b数组a数组在调用函数过程在调用函数过程中改变了原数组中改变了原数组的值,实参数组的值,实参数组与形参数组共享与形参数组
22、共享一组存储空间,一组存储空间,31例例7-8 编写函数求编写函数求n元数组的平均值。元数组的平均值。程序设计:程序设计:double average(int a,int n)int i;double s=0;for(i=0;in;i+)s=s+ai;return s/n;主函数调用如何编写?主函数调用如何编写?用另外一个参数表示用另外一个参数表示数组的长度数组的长度32例例7-9:用选择法对数组中:用选择法对数组中10个整数按由小到大排序个整数按由小到大排序.程序设计思想:程序设计思想:函数函数sort(array,n):实现数组元素由小到大排序。:实现数组元素由小到大排序。主程序主程序:输
23、入输入array数组,调用数组,调用 sort 函数比较,输函数比较,输 出排序后的出排序后的array数组。数组。void sort(int array,int n)int i,j,k,t;for(i=0;in-1;i+)k=i;for(j=i+1;jn;j+)if(arrayjarrayk)k=j;if(k!=i)t=arrayk;arrayk=arrayi;arrayi=t;33main()int a10,i;printf(“enter array:n”);for(i=0;i10;i+)scanf(“%d”,&ai);sort(a,10);printf(“the sorted array
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 程序 ppt 课件 ch7 函数
限制150内