《C语言程序设计》第6章函数.ppt
《《C语言程序设计》第6章函数.ppt》由会员分享,可在线阅读,更多相关《《C语言程序设计》第6章函数.ppt(51页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。
1、第第6章章 函数函数结结构化程序的模构化程序的模块结块结构构:主控模主控模块块模模块块1.1模模块块1.n 模模块块2.1模模块块2.n模模块块n.1模模块块n.n模模块块1模模块块2模模块块n第第6章章 函数函数程序程序结结构构:main()f1();f2();fn();f1()f11();f12();f11()f2()f21();f22();fn()fn1();fn2()f12()f21()f22()fn1()fn2()第第6章章 函数函数根据函数的定根据函数的定义义者不同者不同,分,分为为如下两大如下两大类类:(1)标标准函数:准函数:系系统统提供的已定提供的已定义义的函数,一般用的函数
2、,一般用户户都可以都可以调调用。如前面学用。如前面学习过习过的的输输入入输输出函数出函数scanf、printf、getchar、putchar等。等。Turbo C 2.0的部分常用的部分常用库库函数函数见见附附录录D。(2)用)用户户自定自定义义函数:函数:用用户户自己自己编编写的用来解决具体写的用来解决具体问题问题的函数。的函数。第第6章章 函数函数根据函数的参数形式根据函数的参数形式,C语语言函数又分言函数又分为为如下两种:如下两种:(1)无参函数:)无参函数:主主调调函数并不将数据函数并不将数据传传送送给给被被调调用函数。用函数。(2)有参函数:)有参函数:在在调调用函数用函数时时,
3、在主,在主调调函数和被函数和被调调函数之函数之间间有参数有参数传递传递,也就是,也就是说说,主,主调调函数可以将数据函数可以将数据传传送送给给被被调调用函数使用,被用函数使用,被调调用函数中的数据也可以用函数中的数据也可以带带回来供主回来供主调调函数函数使用。使用。第第6章章 函数函数6.1 函数的定函数的定义义和和调调用用6.1.1 函数定函数定义义函数定函数定义义的的一般形式:一般形式:类类型型标识标识符符 函数名函数名(形式参数表列形式参数表列)说说明部分明部分 执执行部分行部分 例:例:int max(int x,int y)/*函数首部函数首部*/*函数体开始函数体开始*/int z
4、;/*说明部分说明部分*/if(xy)z=x;/*执行部分执行部分*/else z=y;return(z);/*函数体结束函数体结束*/第第6章章 函数函数6.1 函数的定函数的定义义和和调调用用6.1.1 函数定函数定义义说说明:明:函数定函数定义义包括函数首部和函数体两部分。包括函数首部和函数体两部分。(1)函数首部:)函数首部:函数定函数定义义的第一行。的第一行。1)函数名前面的函数名前面的类类型型标识标识符符是指函数返回是指函数返回值值的的类类型,型,简简称称函数函数值类值类型。型。函数的返回函数的返回值值由函数中的由函数中的return语语句句获获得,即得,即return后的表达式的
5、后的表达式的值值,可以是,可以是简单类简单类型、型、void类类型或构造型或构造类类型等。当型等。当return后的表达式的后的表达式的类类型与函数名前面的型与函数名前面的类类型型标标识识符不一致符不一致时时,以函数名前面的,以函数名前面的类类型型标识标识符符为为函数函数值类值类型型(即是将(即是将return后的表达式的后的表达式的值转换为值转换为函数名前面的函数名前面的类类型后型后作作为为函数函数值值返回)。如果函数中无返回)。如果函数中无return语语句,将返回一个句,将返回一个不确定不确定值值;如希望不返回;如希望不返回值值,可以定,可以定义义函数函数类类型型为为void,当,当函数
6、函数值类值类型型为为int时时,可省略其,可省略其类类型的型的说说明。明。第第6章章 函数函数6.1 函数的定函数的定义义和和调调用用6.1.1 函数定函数定义义说说明:明:函数定函数定义义包括函数首部和函数体两部分。包括函数首部和函数体两部分。(1)函数首部:)函数首部:函数定函数定义义的第一行。的第一行。2)函数名函数名是函数的是函数的标识标识符,遵循符,遵循C语语言言标识标识符的命名符的命名规则规则,区,区分大小写。分大小写。3)函数名后的形式参数表函数名后的形式参数表列列给给出函数的形式参数及其出函数的形式参数及其类类型型说说明。形式参数明。形式参数简简称形参,形式参数及其称形参,形式
7、参数及其类类型型说说明放在函数名后明放在函数名后的一的一对圆对圆括号中,要特括号中,要特别别注意的是,无注意的是,无论论函数是否有形式参数,函数是否有形式参数,函数名后的函数名后的圆圆括号不可省,并且括号不可省,并且圆圆括号之后不能接括号之后不能接“;”。形式参形式参数表列的一般形式如下:数表列的一般形式如下:形参形参1类类型型 形参形参1,形参,形参2类类型型 形参形参2,形参,形参n类类型型 形参形参n第第6章章 函数函数6.1 函数的定函数的定义义和和调调用用6.1.1 函数定函数定义义说说明:明:函数定函数定义义包括函数首部和函数体两部分。包括函数首部和函数体两部分。(1)函数首部:)
8、函数首部:函数定函数定义义的第一行。的第一行。(2)函数体:)函数体:函数函数说说明之后的花括号明之后的花括号“”括起来的部分,包括起来的部分,包括括说说明部分和明部分和执执行部分。行部分。1)声明部分:用来)声明部分:用来对对函数中使用的函数中使用的变变量和函数作量和函数作说说明。明。2)执执行部分:行部分:由基本由基本语语句句组组成,函数的功能由函数体内的成,函数的功能由函数体内的各个各个语语句的句的执执行来行来实现实现。第第6章章 函数函数6.1 函数的定函数的定义义和和调调用用6.1.2 函数函数调调用用一个函数一旦被定一个函数一旦被定义义,就可以在程序的其他函数中使用它,就可以在程序
9、的其他函数中使用它,这这个个过过程称程称为为函数函数调调用。用。1函数函数调调用的一般形式用的一般形式 函数名函数名(实实参表列参表列);2函数函数调调用用语语句的句的执执行行过过程程 首先首先计计算每个算每个实实参表达式的参表达式的值值,并把此,并把此值值存入所存入所对应对应的的形参形参单单元中,然后把元中,然后把执执行流程行流程转转入函数体中,入函数体中,执执行函数体中行函数体中的的语语句,当句,当执执行到函数体的右花括号或行到函数体的右花括号或return语语句句时时,表示,表示函数体函数体执执行完成,行完成,这时这时将返回到将返回到调调用此函数的用此函数的语语句的下一条句的下一条语语句
10、,句,继续继续往下往下执执行。行。第第6章章 函数函数6.1 函数的定函数的定义义和和调调用用6.1.2 函数函数调调用用例:例:#includeint max(int x,int y)int z;z=xy?x:y;return(z);main()int a,b,c;scanf(%d%d,&a,&b);c=max(a,b);printf(max=%d,c);程序结果如下:程序结果如下:输入:输入:10 20输出:输出:20一个函数一旦被定一个函数一旦被定义义,就可以在程序的其他函数中使用它,就可以在程序的其他函数中使用它,这这个个过过程称程称为为函数函数调调用。用。第第6章章 函数函数6.1
11、函数的定函数的定义义和和调调用用6.1.2 函数函数调调用用一个函数一旦被定一个函数一旦被定义义,就可以在程序的其他函数中使用它,就可以在程序的其他函数中使用它,这这个个过过程称程称为为函数函数调调用。用。3说说明明(1)在定)在定义义函数中指定的形参函数中指定的形参变变量,在未出量,在未出现现函数函数调调用用时时,它,它们们并不并不占内存中的存占内存中的存储单储单元;只有元;只有发发生函数生函数调调用用时时被被调调用函数中的形参才被分用函数中的形参才被分配内存配内存单单元。元。调调用用结结束后,形参所占用的内存束后,形参所占用的内存单单元也同元也同时时被被释释放。放。(2)实实参可以是常量、
12、参可以是常量、变变量或表达式,但必量或表达式,但必须须有确定的有确定的值值。在。在调调用用时时将将实实参的参的值赋给值赋给形参形参变变量。量。(3)实实参与形参的参与形参的类类型型应应一致。只有字符型和整型可以互相通用。一致。只有字符型和整型可以互相通用。(4)实实参参变变量量对对形参形参变变量的数据量的数据传递传递是是“值传递值传递”,即,即单单向向传递传递,只由,只由实实参参传给传给形参,而不能由形参形参,而不能由形参传传回来回来给实给实参。在内存中,参。在内存中,实实参参变变量与形量与形参参变变量是不同的量是不同的单单元,即使同名,也是不同的元,即使同名,也是不同的单单元。形参的元。形参
13、的值值如果如果发发生生改改变变,并不会改,并不会改变变主主调调函数的函数的实实参参值值。第第6章章 函数函数6.1 函数的定函数的定义义和和调调用用6.1.2 函数函数调调用用例:例:一个函数一旦被定一个函数一旦被定义义,就可以在程序的其他函数中使用它,就可以在程序的其他函数中使用它,这这个个过过程称程称为为函数函数调调用。用。#includeswap(int x,int y)int t;printf(2)a=%d b=%dn,x,y);t=x;x=y;y=t;printf(3)a=%d b=%dn,x,y);main()int x=10,y=20;printf(1)x=%d y=%dn,x,
14、y);swap(x,y);printf(4)x=%d y=%dn,x,y);程序结果如下:程序结果如下:(1)x=10 y=20(2)x=10 y=20(3)x=20 y=10(4)x=10 y=20第第6章章 函数函数6.1 函数的定函数的定义义和和调调用用6.1.2 函数函数调调用用一个函数一旦被定一个函数一旦被定义义,就可以在程序的其他函数中使用它,就可以在程序的其他函数中使用它,这这个个过过程称程称为为函数函数调调用。用。4函数函数调调用方式用方式函数有以下三种函数有以下三种调调用方式:用方式:(1)函数)函数语语句:句:把函数把函数调调用作用作为为一个一个语语句,句,例如:例如:so
15、rt();这时这时不要求函数不要求函数带带回回值值,只要求函数完成一定的操作。,只要求函数完成一定的操作。(2)函数表达式:)函数表达式:函数出函数出现现在一表达式中,在一表达式中,这这种表达式称种表达式称为为函数表达函数表达式。式。这时这时要求函数要求函数带带回一个确定的回一个确定的值值以参加表达式的以参加表达式的计计算。算。例如:例如:c=2*max(a,b);(3)函数参数。)函数参数。函数函数调调用作用作为为一个函数的一个函数的实实参。参。例如:例如:m=max(a,max(b,c);其中其中max(b,c)是一次函数是一次函数调调用,它的用,它的值值作作为为max另一次另一次调调用的
16、用的实实参。参。第第6章章 函数函数6.1 函数的定函数的定义义和和调调用用6.1.3 函数声明函数声明 调调用用用用户户自定自定义义函数函数时时,一般,一般调调用函数和被用函数和被调调用函数用函数应应在同一在同一个文件中,在个文件中,在调调用函数中用函数中对对被被调调用函数返回用函数返回值值的的类类型、函数名称、型、函数名称、函数形式参数的函数形式参数的类类型型进进行行说说明,明,这这种种说说明称明称为为函数声明。函数声明。例:例:#includemain()int a,b,c;int max(int,int);/*对对max函数函数进进行声明行声明*/scanf(%d%d,&a,&b);c
17、=max(a,b);printf(max=%d,c);int max(int x,int y)int z;z=xy?x:y;return(z);第第6章章 函数函数6.1 函数的定函数的定义义和和调调用用6.1.3 函数声明函数声明函数声明有以下三种形式:函数声明有以下三种形式:(1)类类型名型名 函数名函数名(类类型型1 形参形参1,类类型型2 形参形参2,类类型型n 形参形参n);(2)类类型名型名 函数名函数名(类类型型1,类类型型2,类类型型n);(3)类类型名型名 函数名函数名();其中,形式(其中,形式(2)是最常用的一种声明形式。)是最常用的一种声明形式。第第6章章 函数函数6.
18、1 函数的定函数的定义义和和调调用用6.1.3 函数声明函数声明对对被被调调用函数的声明,在以下几种情况下可以省略:用函数的声明,在以下几种情况下可以省略:(1)如果函数)如果函数值值是整型或字符型,可以不是整型或字符型,可以不进进行声明。行声明。例:例:#includemain()int a,b,c;scanf(%d%d,&a,&b);c=max(a,b);printf(max=%d,c);int max(int x,int y)int z;z=xy?x:y;return(z);第第6章章 函数函数6.1 函数的定函数的定义义和和调调用用6.1.3 函数声明函数声明对对被被调调用函数的声明,
19、在以下几种情况下可以省略:用函数的声明,在以下几种情况下可以省略:(2)如果被)如果被调调用函数的定用函数的定义义出出现现在主在主调调函数之前,可以不声明。函数之前,可以不声明。例:例:int max(int x,int y)int z;z=xy?x:y;return(z);#includemain()int a,b,c;scanf(%d%d,&a,&b);c=max(a,b);printf(max=%d,c);第第6章章 函数函数6.1 函数的定函数的定义义和和调调用用6.1.3 函数声明函数声明对对被被调调用函数的声明,在以下几种情况下可以省略:用函数的声明,在以下几种情况下可以省略:(3
20、)如果在所有函数定)如果在所有函数定义义之前之前对对函数函数类类型型进进行了声明,行了声明,则则在在各个主各个主调调函数中不再函数中不再进进行声明。行声明。例:例:int max(int,int);#includemain()int a,b,c;scanf(%d%d,&a,&b);c=max(a,b);printf(max=%d,c);int max(int x,int y)int z;z=xy?x:y;return(z);第第6章章 函数函数6.2 函数的嵌套函数的嵌套调调用和用和递归调递归调用用6.2.1 函数的嵌套函数的嵌套调调用用 所所谓谓函数的嵌套函数的嵌套调调用是指一个函数用是指一
21、个函数调调用另一函数的用另一函数的过过程中程中又出又出现对现对其他函数的其他函数的调调用。用。函数嵌套函数嵌套调调用的用的调调用用结结构如构如图图所示:所示:main()f1();f1()f11();f11()第第6章章 函数函数6.2 函数的嵌套函数的嵌套调调用和用和递归调递归调用用6.2.1 函数的嵌套函数的嵌套调调用用例:例:fun1(int a,int b)int c;a+=a;b+=b;c=fun2(a,b);return c*c;fun2(int a,int b)int c;c=a*b%3;return c;main()int x=11,y=19;printf(%dn,fun1(x
22、,y);注意:注意:函数的函数的调调用可以用可以嵌套,但函数的定嵌套,但函数的定义义是是平行的、相互独立的,平行的、相互独立的,不能嵌套定不能嵌套定义义。第第6章章 函数函数6.2 函数的嵌套函数的嵌套调调用和用和递归调递归调用用6.2.2 函数的函数的递归调递归调用用 在在调调用一个函数的用一个函数的过过程中又出程中又出现现直接或直接或间间接地接地调调用用该该函数本函数本身,称身,称为为函数的函数的递归调递归调用。用。其其调调用用结结构如构如图图所示。所示。main()f1();f1()f11();f11()f1();第第6章章 函数函数6.2 函数的嵌套函数的嵌套调调用和用和递归调递归调用
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C语言程序设计 语言程序设计 函数
限制150内