第10章函数优秀课件.ppt
《第10章函数优秀课件.ppt》由会员分享,可在线阅读,更多相关《第10章函数优秀课件.ppt(44页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第第10章函数章函数第1页,本讲稿共44页第第1010章章 函数函数在本章的学习中,要重点掌握以下内容:在本章的学习中,要重点掌握以下内容:模块化编程思想;模块化编程思想;函数的作用;函数的作用;函数的声明;函数的声明;函数的形参列表;函数的形参列表;使用使用const形参;形参;main函数的标准形式;函数的标准形式;如何向如何向main函数传值以及如何取得函数传值以及如何取得main函数的值。函数的值。第2页,本讲稿共44页10.1 10.1 什么是函数什么是函数函数是程序实现模块化编程的基本单元,一般是完成某一特函数是程序实现模块化编程的基本单元,一般是完成某一特定功能的语句的定功能的语
2、句的集合集合;它可以提高程序的可读性和可维护;它可以提高程序的可读性和可维护性,并可以提高代码重用率。本节先介绍模块化编程的思性,并可以提高代码重用率。本节先介绍模块化编程的思想,再介绍函数的定义和调用,并通过一个简单范例来演想,再介绍函数的定义和调用,并通过一个简单范例来演示函数的使用。示函数的使用。第3页,本讲稿共44页10.1.1 10.1.1 模块化编程模块化编程所谓模块化编程是指将程序划分为一系列功能相互独立的模所谓模块化编程是指将程序划分为一系列功能相互独立的模块,再以模块为单元进行开发,最后合并到主程序的编程块,再以模块为单元进行开发,最后合并到主程序的编程方法。在方法。在C语言
3、中,会把功能独立且完整的模块封装在函语言中,会把功能独立且完整的模块封装在函数中,由函数提供对外的接口,再在外部函数调用。这种数中,由函数提供对外的接口,再在外部函数调用。这种模块化编程是模块化编程是C语言面向过程编程的基本方法。语言面向过程编程的基本方法。第4页,本讲稿共44页10.1.2 10.1.2 定义函数定义函数函数的定义由函数声明和函数体两部分组成。函数声明又可函数的定义由函数声明和函数体两部分组成。函数声明又可以分为由函数返回值类型、函数名、参数列表、函数体以以分为由函数返回值类型、函数名、参数列表、函数体以及函数操作符及函数操作符5个部分组成。标准形式如下:个部分组成。标准形式
4、如下:函数返回值类型函数返回值类型 函数名函数名(参数类型参数类型1 参数名参数名1,参数类型参数类型1 参参数名数名2,)/*函数体函数体*/变量定义变量定义;函数操作函数操作;return语句语句;第5页,本讲稿共44页10.1.2 10.1.2 定义函数定义函数函数声明也可以称为函数原型,定义了函数作为模块化编程函数声明也可以称为函数原型,定义了函数作为模块化编程的基本单元的接口:函数值类型对应模块出口,函数名对的基本单元的接口:函数值类型对应模块出口,函数名对应模块名,参数列表对应了模块入口。函数返回值类型也应模块名,参数列表对应了模块入口。函数返回值类型也称为函数值类型,是由函数带回
5、的值的类型。称为函数值类型,是由函数带回的值的类型。函数名是函数的标志符,其命名规范与其余变量名一致;但函数名是函数的标志符,其命名规范与其余变量名一致;但是函数名应该能很清晰地反应函数操作的内容。是函数名应该能很清晰地反应函数操作的内容。参数列表是函数的传入参数列表,依次将放在函数操作符,参数列表是函数的传入参数列表,依次将放在函数操作符,即小括号中。即小括号中。函数体,也被称为函数块,是一个放在花括号内的复合语句。函数体,也被称为函数块,是一个放在花括号内的复合语句。它包括三个部分:变量定义部分,函数操作部分,它包括三个部分:变量定义部分,函数操作部分,return语句。语句。第6页,本讲
6、稿共44页10.1.3 10.1.3 调用函数调用函数函数调用表达式由函数名、函数操作符和逗号表达式三部分函数调用表达式由函数名、函数操作符和逗号表达式三部分组成。逗号表达式一般为由逗号隔开的若干个子表达式的组成。逗号表达式一般为由逗号隔开的若干个子表达式的集合。如下所示:集合。如下所示:函数名函数名(参数表达式参数表达式1,参数表达式参数表达式2,)函数名指明被调用的函数的名称。函数名指明被调用的函数的名称。逗号表达式一般为由逗号隔开的若干个子表达式的集合,子逗号表达式一般为由逗号隔开的若干个子表达式的集合,子表达式的个数必须与被调用的函数声明的参数个数相同;表达式的个数必须与被调用的函数声
7、明的参数个数相同;如果函数声明中的参数列表为空,逗号表达式也必须为空。如果函数声明中的参数列表为空,逗号表达式也必须为空。第7页,本讲稿共44页10.1.3 10.1.3 调用函数调用函数参数表达式与函数申明中的参数按从左到右的顺序一一对应,参数表达式与函数申明中的参数按从左到右的顺序一一对应,每个表达式的值类型必须与函数声明中的相应参数类型一每个表达式的值类型必须与函数声明中的相应参数类型一致;否则调用函数时,编译器会自动进行类型转换。如果致;否则调用函数时,编译器会自动进行类型转换。如果转换失败,那么这个函数调用就是错误的。转换失败,那么这个函数调用就是错误的。函数调用表达式的值由函数定义
8、中的函数调用表达式的值由函数定义中的return语句的表达式值语句的表达式值决定,类型为函数声明中的函数值类型。决定,类型为函数声明中的函数值类型。第8页,本讲稿共44页10.1.3 10.1.3 调用函数调用函数函数调用以及函数代码的执行过程如下:函数调用以及函数代码的执行过程如下:(1)运行到函数调用表达式,先寻找具有该函数名)运行到函数调用表达式,先寻找具有该函数名的函数的函数定义定义,再将函数声明与函数定义的第一行进行比较,函数,再将函数声明与函数定义的第一行进行比较,函数返回值必须一致,形参个数必须与函数调用语句中的实参返回值必须一致,形参个数必须与函数调用语句中的实参个数相同,同时
9、实参类型必须能自动转换为形参类型。个数相同,同时实参类型必须能自动转换为形参类型。(2)得到函数声明后,准备执行函数代码。编译器保存主)得到函数声明后,准备执行函数代码。编译器保存主调函数的执行状态,以便于函数执行完毕后继续执行主调调函数的执行状态,以便于函数执行完毕后继续执行主调函数代码。函数代码。第9页,本讲稿共44页10.1.3 10.1.3 调用函数调用函数(3)开始执行函数,将函数调用表达式中的各个实参值传)开始执行函数,将函数调用表达式中的各个实参值传递给函数定义中相应的各个形参,必要的情况下会自动执递给函数定义中相应的各个形参,必要的情况下会自动执行类型转换。这个过程叫行类型转换
10、。这个过程叫“参数传递参数传递”。这时,形参才分配。这时,形参才分配到内存空间。到内存空间。(4)执行函数体代码。如果有)执行函数体代码。如果有return语句,执行到语句,执行到return语句后,函数结束;如果函数中没有语句后,函数结束;如果函数中没有return语句,会依次语句,会依次执行完函数体所有代码。执行完函数体所有代码。(5)函数结束后,编译器恢复在执行函数代码前保存的主)函数结束后,编译器恢复在执行函数代码前保存的主调函数的执行状态,将函数返回值带入到函数调用表达式调函数的执行状态,将函数返回值带入到函数调用表达式所在语句,继续代码。所在语句,继续代码。第10页,本讲稿共44页
11、10.1.3 10.1.3 调用函数调用函数按照函数调用表达式出现的位置,函数调用方式可分为以下按照函数调用表达式出现的位置,函数调用方式可分为以下三种形式:三种形式:1.单独语句单独语句函数调用表达式可以单独作为语句使用。例如范例函数调用表达式可以单独作为语句使用。例如范例10-1中调中调用用void型函数型函数print_array 和和void型函数型函数transpose_array的语句,如下所示:的语句,如下所示:print_array(array);transpose_array(array,transpose);第11页,本讲稿共44页10.1.3 10.1.3 调用函数调用函
12、数2.子表达式子表达式函数调用表达式还可以作为语句的一个子表达式使用,如下所函数调用表达式还可以作为语句的一个子表达式使用,如下所示:示:b=square(5);/*要求函数值类型不为要求函数值类型不为void型型*/print_array(array),transpose_array(array,transpose);/*函数值类型可以为函数值类型可以为void型型*/3.函数实参函数实参函数调用表达式还可以作为函数参数,这实际上是第二种情况函数调用表达式还可以作为函数参数,这实际上是第二种情况的特殊方式。实例如下:的特殊方式。实例如下:c=max(a,min(a,b);/*要求要求min函
13、数返回类型不为函数返回类型不为void型型*/d=min(a,min(a,b);/*要求要求min函数返回类型不为函数返回类型不为void型型*/第12页,本讲稿共44页10.1.4 10.1.4 函数使用举例函数使用举例下面围绕一个范例来讨论函数的使用。该范例将加法、减法下面围绕一个范例来讨论函数的使用。该范例将加法、减法和乘法运算封装在函数中,通过函数调用来实现两个数的和乘法运算封装在函数中,通过函数调用来实现两个数的加法、减法和乘法运算。加法、减法和乘法运算。第13页,本讲稿共44页10.1.5 10.1.5 范例的改进范例的改进对于范例对于范例10-2中的函数体代码和函数调用代码还可以
14、进行适中的函数体代码和函数调用代码还可以进行适当改进。其中,当改进。其中,sum函数、函数、dif函数和函数和pro函数中定义的变函数中定义的变量量tmp都是临时变量,可以省略。例如,函数都是临时变量,可以省略。例如,函数sum的实现的实现与下面这段相对简单的代码功能完全一样,代码如下:与下面这段相对简单的代码功能完全一样,代码如下:int sum(const int a,const int b)return a+b;第14页,本讲稿共44页10.2 10.2 函数声明函数声明如前文所述,一个完整的函数声明包括函数值类型、函数名如前文所述,一个完整的函数声明包括函数值类型、函数名和参数列表三个
15、部分组成。完整的函数声明定义了一个功和参数列表三个部分组成。完整的函数声明定义了一个功能模块的接口。本小节将介绍函数声明的标准形式,将声能模块的接口。本小节将介绍函数声明的标准形式,将声明与定义进行比较,让读者更清楚两者的关系;然后将依明与定义进行比较,让读者更清楚两者的关系;然后将依次讨论函数声明中的函数值和参数列表,最后还讨论了函次讨论函数声明中的函数值和参数列表,最后还讨论了函数怠数怠const形参等问题。形参等问题。第15页,本讲稿共44页10.2.1 10.2.1 声明的形式声明的形式函数声明可以作为单独语句使用,形式如下:函数声明可以作为单独语句使用,形式如下:函数值类型函数值类型
16、 函数名函数名(参数类型参数类型1 形参形参1,参数类型参数类型2 形参形参2,)例如,范例例如,范例10-3中的四个函数声明分别如下:中的四个函数声明分别如下:void print_data(const int a,const int b)int sum(const int a,const int b)int dif(const int a,const int b)int pro(const int a,const int b)第16页,本讲稿共44页10.2.1 10.2.1 声明的形式声明的形式函数也可以视为一个变量,函数声明即变量声明,函数名即变量名。该函数变量的函数也可以视为一个变量
17、,函数声明即变量声明,函数名即变量名。该函数变量的类型可以称为函数类型,其形式一般为函数声明中去掉函数名的剩余部分,即:类型可以称为函数类型,其形式一般为函数声明中去掉函数名的剩余部分,即:函数值类型函数值类型 (参数类型参数类型1 形参形参1,参数类型参数类型2 形参形参2,);由于函数操作符为后置操作符,必须放在变量名后面,所以声明函数由于函数操作符为后置操作符,必须放在变量名后面,所以声明函数型变量时,变量名得放在函数操作符前(与数组类型相似)。所以型变量时,变量名得放在函数操作符前(与数组类型相似)。所以上面的上面的4个函数类型名分别如下:个函数类型名分别如下:print_data的类
18、型为:的类型为:void (const int a,const int b)sum的类型为:的类型为:int (const int a,const int b)dif的类型为:的类型为:int (const int a,const int b)pro的类型为:的类型为:int (const int a,const int b)第17页,本讲稿共44页10.2.1 10.2.1 声明的形式声明的形式又例如,范例又例如,范例10-1中的两个函数声明如下:中的两个函数声明如下:void print_array(int arraySIZESIZE)void transpose_array(int ar
19、raySIZESIZE,int transposeSIZESIZE)这两行语句可以视为声明了两个函数变量,其中变量这两行语句可以视为声明了两个函数变量,其中变量print_array的类型被声明为:的类型被声明为:void(int arraySIZESIZE)而变量而变量transpose_array的类型被声明为:的类型被声明为:void(int arraySIZESIZE,int transposeSIZESIZE)第18页,本讲稿共44页10.2.2 10.2.2 声明与定义声明与定义与变量一样,函数的声明和定义也是有严格区别的。函数声与变量一样,函数的声明和定义也是有严格区别的。函数声
20、明确定了一个函数的接口,告诉编译器该函数的函数名、明确定了一个函数的接口,告诉编译器该函数的函数名、函数值类型以及形参列表中形参的个数和顺序;而函数定函数值类型以及形参列表中形参的个数和顺序;而函数定义则确立了一个函数的功能,不仅仅包含了函数声明所有义则确立了一个函数的功能,不仅仅包含了函数声明所有的信息,还包含了形参的名字和函数体。的信息,还包含了形参的名字和函数体。在在C程序中,一个函数变量可以被多次声明(当然,所有声程序中,一个函数变量可以被多次声明(当然,所有声明不能冲突),但是函数定义只能有一个。函数定义不能明不能冲突),但是函数定义只能有一个。函数定义不能放在其他函数内,而函数声明
21、则可以。放在其他函数内,而函数声明则可以。提示:函数定义之外的声明中的形参列表的所有参数类型名提示:函数定义之外的声明中的形参列表的所有参数类型名必须与函数定义中的参数类型一致,但是声明的参数名可必须与函数定义中的参数类型一致,但是声明的参数名可以不一样。实际上,函数定义外的函数声明中的参数名是以不一样。实际上,函数定义外的函数声明中的参数名是没有用处的。没有用处的。第19页,本讲稿共44页10.3.1 10.3.1 函数值类型函数值类型函数值类型可以是整型、浮点型、字符型,也可以是自定义函数值类型可以是整型、浮点型、字符型,也可以是自定义类型(类型(typedef的结果)。下面是几个函数声明
22、的实例:的结果)。下面是几个函数声明的实例:01int get_value(void);02double max(double num1,double num2);03char upletter(char c);第20页,本讲稿共44页10.3.1 10.3.1 函数值类型函数值类型例如,需要返回一个例如,需要返回一个char型数组的函数,其声明形式如下:型数组的函数,其声明形式如下:char*function(形参列表形参列表);其中,其中,char*是一个是一个char型指针类型。型指针类型。第21页,本讲稿共44页10.3.2 10.3.2 形参列表形参列表1.形参列表的两种形式形参列表
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 10 函数 优秀 课件
限制150内