《C语言程序设计》课件第六章11.ppt
《《C语言程序设计》课件第六章11.ppt》由会员分享,可在线阅读,更多相关《《C语言程序设计》课件第六章11.ppt(88页珍藏版)》请在文库网上搜索。
1、第六章第六章 函数函数函数定义函数定义函数调用函数调用函数参数及函数间的数据传递函数参数及函数间的数据传递数组与函数参数数组与函数参数函数的嵌套与递归函数的嵌套与递归变量的存储属性及作用域变量的存储属性及作用域编译预处理编译预处理 主主 要要 内内 容容6.16.1函数定义函数定义函数的分类函数的分类 函数的基本结构函数的基本结构函数的定义函数的定义 基本内容:基本内容:6.1.16.1.1 函数的分类函数的分类 1.1.从用户使用的角度看,函数可分为两种:从用户使用的角度看,函数可分为两种:(1)(1)标准函数标准函数(即库函数即库函数)。例如例如:sin(x):sin(x)、pow(x,y
2、)pow(x,y)、exp(x)exp(x)、fabs(x)fabs(x)(2)(2)用户自定义函数。用户自定义函数。2.2.从函数的作用上看,函数可分为两种:从函数的作用上看,函数可分为两种:(1)(1)完成某种计算并返回一个函数值。完成某种计算并返回一个函数值。(2)(2)完成某种操作不返回函数值。完成某种操作不返回函数值。3.3.从函数的形式上看,函数可分为两种:从函数的形式上看,函数可分为两种:(1)(1)无参函数,即不带参数表的函数。无参函数,即不带参数表的函数。(2)(2)有参函数,即带有参数表的函数。有参函数,即带有参数表的函数。6.1.26.1.2 函数的基本结构函数的基本结构
3、 函数的基本结构如下:函数的基本结构如下:存存储储类类型型类类型型说说明明符符函函数数名名(形形式式参参数数表表)形式参数说明;形式参数说明;内部变量说明;内部变量说明;执行语句;执行语句;函数的基本结构函数的基本结构 说明:说明:(1)(1)函数名是函数名是C C语言中任一合法的标识符。语言中任一合法的标识符。(2)(2)形式参数表可以由零个或多个形式参数组成。形式参数表可以由零个或多个形式参数组成。(3)(3)形式参数说明必须在花括号形式参数说明必须在花括号“”之前。之前。(4)(4)函数中最外层花括号括起来的部分称为函数体。函数中最外层花括号括起来的部分称为函数体。(5)(5)按照函数的
4、基本结构可知,按照函数的基本结构可知,C C语言不允许在一个语言不允许在一个 函数内又包含另一个函数,构成程序的多个函函数内又包含另一个函数,构成程序的多个函 数在程序中都是平行的。数在程序中都是平行的。(6)(6)函数返回值的数据类型为该函数的数据类型。函数返回值的数据类型为该函数的数据类型。6.1.3 6.1.3 函数定义函数定义 基本概念:基本概念:函数的定义:是指按照函数的定义:是指按照C C语言所规定的函数基本结语言所规定的函数基本结 构编写一段所需功能的源程序。构编写一段所需功能的源程序。1.1.空函数的定义形式空函数的定义形式 空函数的形式为:空函数的形式为:函数名函数名()()
5、例如:例如:merge()merge()注:空函数是没有任何操作的函数。注:空函数是没有任何操作的函数。2.2.无参函数的定义形式为:无参函数的定义形式为:类型说明符类型说明符 函数名函数名()()void printstar()void printstar()内部变量说明;内部变量说明;printf(printf(”*n *n”););执行语句;执行语句;printf(printf(”*n *n”););printf(printf(”*n*n”););打印打印:printf(:printf(”*n *n”););*printf(*printf(”*n *n”););*#include *#i
6、ncludestdio.hstdio.h *void main()*void main()*printstar();printstar();说明:说明:被调用的无参函数并不是不返回值,而是不被调用的无参函数并不是不返回值,而是不 返回有用的值,通常是一个不确定的值。返回有用的值,通常是一个不确定的值。例如:例如:x=printstar();x=printstar();printf(printf(“%d%d”,x);,x);为了表明一个被调用函数不返回值,在函数定义中为了表明一个被调用函数不返回值,在函数定义中可将它定义为可将它定义为“空类型空类型”。其一般形式为。其一般形式为 :void vo
7、id 函数名函数名()()内容变量说明;内容变量说明;执行语句;执行语句;注:其中 void void 即为“空类型”的函数类 型说明符,void void 又称无类型说明符。为使程序严谨明确,防止错误 调用,凡不要求返回值的无参 函数,一般应定义为“void”类型。3.3.有参函数定义的形式为:有参函数定义的形式为:存储类型存储类型 类型说明符类型说明符 函数名函数名(形式参数形式参数)形式参数说明;形式参数说明;内部变量说明;内部变量说明;执行语句;执行语句;例:例:#include power(int x,int n)#include power(int x,int n)void mai
8、n()void main()int i,p;int i,p;int n,m,k;p=1;i=1;int n,m,k;p=1;i=1;scanf(scanf(”%d,%d%d,%d”,&m,&n);for(;i=n;i+),&m,&n);for(;i=n;i+)k=power(m,n);p=p*x;k=power(m,n);p=p*x;printf(printf(”%d%d”,k);return(p);,k);return(p);注注:类型说明符省时类型说明符省时,其函数返回值为整型或字其函数返回值为整型或字 符型。符型。6.2 6.2 函数调用函数调用 函数的调用形式函数的调用形式 函数的调用
9、方式函数的调用方式 对被调用函数的说明对被调用函数的说明基本内容:基本内容:6.2.1 6.2.1 函数的调用形式函数的调用形式 调调 用用 函函 数数 对对 被被 调调 用用 函函 数数 进进 行行 调调 用用 一般形式为一般形式为:函数名函数名(实参表实参表);6.2.2 6.2.2 函数的调用方式函数的调用方式 在在C C语语言言中中,调调用用函函数数对对被被调调用用函函数数调调用用时时,按按函函数数在在程程序序中中出出现现的的位位置置来来分分,可可以以有有以以下下三三种种调调用用方方式。式。1.1.函数调用语句由函数调用加上分号构成,函数调用语句由函数调用加上分号构成,在调用函数中可作
10、为在调用函数中可作为 一个独立的语句。一个独立的语句。#include#includestdio.hstdio.h void main()void main()printfstar();printfstar();2.2.函数表达式的一个运算对象函数表达式的一个运算对象 函数调用作为一个运算对象直接出现在一个函数调用作为一个运算对象直接出现在一个表达式中,这时要求函数带回一个确定的值以表达式中,这时要求函数带回一个确定的值以参加表达式的运算,这种表达式称为函数表达参加表达式的运算,这种表达式称为函数表达式。式。例如例如:s=3.14159*pow(r,2);:s=3.14159*pow(r,2)
11、;3.3.作为函数调用的一个实际参数作为函数调用的一个实际参数 将函数调用放在另一个函数调用的实际参数将函数调用放在另一个函数调用的实际参数表中,以其值作为该函数调用的一个实参,传表中,以其值作为该函数调用的一个实参,传递给被调用函数的形序。递给被调用函数的形序。例如例如:printf(:printf(”%d%d”,power(m,n);,power(m,n);6.2.3 6.2.3 对被调用函数的说明对被调用函数的说明 在程序中调用另一个函数时,要满足以在程序中调用另一个函数时,要满足以下三个条件:下三个条件:(1)(1)被调用函数必须存在是函数调用的必被调用函数必须存在是函数调用的必 要条
12、件,这个被调用函数可以是用户要条件,这个被调用函数可以是用户 自定义函数或库函数。自定义函数或库函数。(2)(2)若是库函数,还必须用若是库函数,还必须用#include#include命令命令 将有关库函数所需的信息包含到本文将有关库函数所需的信息包含到本文 件中。件中。例如:例如:#include#include stdio.hstdio.h(3)(3)若是用户自定义的函数,且该函数与调若是用户自定义的函数,且该函数与调 用它的函数用它的函数(即调用函数即调用函数)在同一个源文在同一个源文 件中,则在调用函数中应对被调用函数件中,则在调用函数中应对被调用函数 返回值的类型加以说明。返回值的
13、类型加以说明。这种类型说明的一般形式为:这种类型说明的一般形式为:类型说明符类型说明符 被调用函数名被调用函数名()();其其中中,类类型型说说明明与与被被调调用用函函数数在在函函数数定定义义中中的的函函数数类类型型说说明明一一致致。这这种种说说明明称称为为显式说明。显式说明。C C语语言言允允许许在在以以下下三三种种情情况况下下,在在调调用用函函数数中中,可可以以不在调用函数前对被调用函数作函数类型说明。不在调用函数前对被调用函数作函数类型说明。(1)(1)当被调用函数返回值是一个整型或字符型数据时,当被调用函数返回值是一个整型或字符型数据时,可以不作说明,系统将自动按整型说明处理。可以不作
14、说明,系统将自动按整型说明处理。(2)(2)当被调用函数的定义当被调用函数的定义(注意,不是函数类型说明注意,不是函数类型说明)在在 调用函数之前,调用函数调用它时,可以对被调用调用函数之前,调用函数调用它时,可以对被调用 函数类型不作说明。因为调用时系统已预先知道了函数类型不作说明。因为调用时系统已预先知道了 它已定义的函数类型,会自动按其类型说明处理。它已定义的函数类型,会自动按其类型说明处理。(3)(3)在文件开头,所有函数定义之前,在函数外部已说在文件开头,所有函数定义之前,在函数外部已说 明了函数类型时,则各个调用函数中可以不对所调明了函数类型时,则各个调用函数中可以不对所调 用的函
15、数再作函数用的函数再作函数 类型说明,但各个被调用函数类型说明,但各个被调用函数 的定义中,仍须对函数类型进行说明。的定义中,仍须对函数类型进行说明。#include#includestdio.hstdio.h char str(char c);char str(char c);float ct(float f);float ct(float f);int gt(ink k);int gt(ink k);void main()float ct(float f)void main()float ct(float f).char str(char c)int gt(ink k)char str(c
16、har c)int gt(ink k).6.3 6.3 函数参数及函数间的函数参数及函数间的 数据传递数据传递 函数参数函数参数 函数间的数据传递函数间的数据传递 基本内容:基本内容:6.3.1 6.3.1 函数参数函数参数 形形式式参参数数和和实实际际参参数数就就是是函函数数参参数数,它它们们都都是是函函数数间数据传递的载体。间数据传递的载体。1.1.关于形式参数关于形式参数 凡凡 出出 现现 在在 函函 数数 定定 义义 中中 函函 数数 名名 后后 圆圆 括括 号号 内内 的参数称为形式参数,形式参数又称为形参或哑元。的参数称为形式参数,形式参数又称为形参或哑元。形参说明的一般形式为:形
17、参说明的一般形式为:形参类型说明符形参类型说明符 形参表;形参表;例如例如:int power(x,n):int power(x,n)int x,n;int x,n;或或 int power(int x,int n)int power(int x,int n)2.2.关于实际参数关于实际参数实际参数实际参数:凡出现在调用语句的函数名后圆括凡出现在调用语句的函数名后圆括 号内的参数,又称为实参或实元。号内的参数,又称为实参或实元。例如例如:y=power(2,3);:y=power(2,3);实际参数实际参数(实参实参):):实参可以是常量、已赋值的变量或表达式实参可以是常量、已赋值的变量或表达
18、式;实参在次序、类型和个数上应与相应形参实参在次序、类型和个数上应与相应形参 表中的形参保持一致。表中的形参保持一致。通常,当需要从调用函数中传值通常,当需要从调用函数中传值(或传地址或传地址)到被调用函数中的形参时,那些变量或值应到被调用函数中的形参时,那些变量或值应作为实参。作为实参。6.3.2 6.3.2 函数间的数据传递函数间的数据传递 函数间的数据传递有两种情况:函数间的数据传递有两种情况:(一一)实参向形参的传递;实参向形参的传递;(二二)被调用函数向主调用函数的回传。被调用函数向主调用函数的回传。一、实参向形参的数据传递一、实参向形参的数据传递 当当调调用用函函数数调调用用有有参
19、参函函数数时时,通通常常需需要将实参所包含的数据传递给相应的形参。要将实参所包含的数据传递给相应的形参。实实参参向向形形参参的的数数据据传传递递有有两两种种不不同同的的方方式式:1.1.值传递值传递 当实参是常数、变量、数组元素或可计算的当实参是常数、变量、数组元素或可计算的表达式时表达式时(事实上,常数、变量、数组元素都事实上,常数、变量、数组元素都是简单的表达式是简单的表达式),对应的形参是变量,此时,对应的形参是变量,此时,主调用函数将实参的值传递到为被调用函数,主调用函数将实参的值传递到为被调用函数形参设置的临时变量存储单元中,调用结束形参设置的临时变量存储单元中,调用结束后,形参单元
20、被释放,实参仍保持原值不变。后,形参单元被释放,实参仍保持原值不变。这种只能由实参向形参的数据传递称为这种只能由实参向形参的数据传递称为“值传值传递递”,即单向传递。,即单向传递。#include#includestdio.hstdio.h void main()void main()int f(int a,int b);int f(int a,int b);int x=1,y=2,z;static int a=0,1,2,3,4;int x=1,y=2,z;static int a=0,1,2,3,4;z=f(x,y);z=f(x,y);printf(printf(“z=%d,x=%d,y=
21、%dz=%d,x=%d,y=%dn n”,z,x,y);,z,x,y);z=f(a3,a4);z=f(a3,a4);printf(printf(“z=%d,a3=%d,a4=%dz=%d,a3=%d,a4=%dn,n,”,z,a3,a4);,z,a3,a4);z=f(x,y+1);z=f(x,y+1);printf(printf(“z=%d,x=%d,y=%dz=%d,x=%d,y=%dn n”,z,x,y);,z,x,y);运行结果运行结果:a=3,b=6 a=3,b=6f(int a,int b)z=3,x=1,y=2 f(int a,int b)z=3,x=1,y=2 a=a+2;b=b
22、+4;a=5,b=8 a=a+2;b=b+4;a=5,b=8 printf(printf(“a=%d,b=%da=%d,b=%dn n”,a,b);z=5,a3=3,a4=4,a,b);z=5,a3=3,a4=4 return(a);a=3,b=7 return(a);a=3,b=7 z=3,x=1,y=2 z=3,x=1,y=22.2.地址传递地址传递 当实参是数组名或指针型变量当实参是数组名或指针型变量(或实参变量地或实参变量地址址)时,实参向形参传递的是地址。时,实参向形参传递的是地址。#include#includestdio.hstdio.h void main()void main
23、()void swap(int*x,int*y);void swap(int*x,int*y);int a,b;int a,b;scanf(scanf(“%d,%d%d,%d”,&a,&b);,&a,&b);if(ab)swap(&a,&b);if(a0)b=sign(a);else if(x0)printf(printf(“b=%db=%dn n”,b);return,b);return(1);(1);else else return(-1);return(-1);#include#includestdio.hstdio.h void main()void main()float a,b;f
24、loat a,b;int max(float x,float y),m;int max(float x,float y),m;scanf(scanf(“%f,%f%f,%f”,&a,&b);,&a,&b);m=max(a,b);m=max(a,b);printf(printf(“n max=%dn max=%dn n”,m);,m);max(float x,float y)max(float x,float y)float n;float n;n=xy?x:y;n=xy?x:y;return(n);return(n);程序运行结果如下:程序运行结果如下:2.3,4.52.3,4.5 max=4
25、max=4 2.2.利用函数参数的利用函数参数的“地址传递地址传递”返回多个值。返回多个值。#include#include void main()void main()float a,b,c,d,e,f;float a,b,c,d,e,f;float calcu(float x,float y,float*r,float*s,float*t);float calcu(float x,float y,float*r,float*s,float*t);scanf(scanf(“%f,%f%f,%f”,&a,&b);,&a,&b);f=calcu(a,b,&c,&d,&e);f=calcu(a,b
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C语言程序设计 语言程序设计 课件 第六 11