第6章 函数精选PPT.ppt
《第6章 函数精选PPT.ppt》由会员分享,可在线阅读,更多相关《第6章 函数精选PPT.ppt(134页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第6章 函数第1页,本讲稿共134页第第6 6章章 函数函数本章的学习目标本章的学习目标:l了解模块化程序设计的概念;了解模块化程序设计的概念;l了解库函数、自定义函数的区别;了解库函数、自定义函数的区别;l掌握函数的定义和调用;掌握函数的定义和调用;l掌握变量的性质,包括作用域和生命期;掌握变量的性质,包括作用域和生命期;l能创建多文件的程序:项目。能创建多文件的程序:项目。2第2页,本讲稿共134页本本 章章 概概 要要6.1 6.1 概述概述6.2 6.2 函数的定义函数的定义6.36.3函数的调用函数的调用6.4 6.4 常见的库函数(自学)常见的库函数(自学)6.5 6.5 变量的性
2、质变量的性质6.66.6变量的作用域变量的作用域6.76.7变量的生命期变量的生命期6.86.8内部函数与外部函数内部函数与外部函数3第3页,本讲稿共134页引引 例例 1 1:大:大 话话 三三 国国懿问曰:“孔明寝食及事之烦简若何?”使者曰:“丞相夙兴夜寐,罚二十以上皆亲览焉。所啖之食,日不过数升。”懿顾谓诸将曰:“孔明食少事烦,其能久乎?”这给程序设计带来这给程序设计带来什么启示?什么启示?4第4页,本讲稿共134页引引 例例 2:2:秦国武器的过人之处秦国武器的过人之处 秦国军队使用的弩是当时世界上最先进的,但其实最先进秦国军队使用的弩是当时世界上最先进的,但其实最先进的不仅是弩的制作
3、工艺,而更在于科学的管理制度。工匠们在的不仅是弩的制作工艺,而更在于科学的管理制度。工匠们在制作弩的过程中,并不是每个工匠都独立制作一个完整的弩,制作弩的过程中,并不是每个工匠都独立制作一个完整的弩,而是每种工匠专职制作一种部件,最后进行拼接。这样进行分而是每种工匠专职制作一种部件,最后进行拼接。这样进行分工则每种工匠只需要专注于一种工作,技术相对更加娴熟,使工则每种工匠只需要专注于一种工作,技术相对更加娴熟,使得工作更象流水线作业,大大地提高了效率不说,培训这样的得工作更象流水线作业,大大地提高了效率不说,培训这样的工匠也相对成本比较低。而且大家都只专注自己的那部分技术工匠也相对成本比较低。
4、而且大家都只专注自己的那部分技术而并不明白其他部件的制作工艺,还可以防止个人可以独立制而并不明白其他部件的制作工艺,还可以防止个人可以独立制作武器而造成不安全的因素。作武器而造成不安全的因素。5第5页,本讲稿共134页6.1 6.1 概述概述上上述述的的管管理理模模式式其其实实是是一一种种模模块块化化分分工工与与合合作作的的思思想想。为为了了在在C C语语言言中中实实现现模模块块化化的的思思想想,就就要用到函数。本章主要介绍函数的基础知识。要用到函数。本章主要介绍函数的基础知识。6第6页,本讲稿共134页模块化程序设计模块化程序设计l基本思想:将一个大的程序按功能分割成一些小模块。基本思想:将
5、一个大的程序按功能分割成一些小模块。l特点:特点:各模块相对独立、功能单一、结构清晰、接口简各模块相对独立、功能单一、结构清晰、接口简单。单。控制了程序设计的复杂性。控制了程序设计的复杂性。提高元件的可靠性。提高元件的可靠性。缩短开发周期。缩短开发周期。避免程序开发的重复劳动。避免程序开发的重复劳动。易于维护和功能扩充。易于维护和功能扩充。l开发方法开发方法:自上向下自上向下,逐步分解,分而治之逐步分解,分而治之6.1 6.1 概述概述7第7页,本讲稿共134页模块化的优点模块化的优点l模块各司其职模块各司其职每个模块只负责一件事情,它可以更专心每个模块只负责一件事情,它可以更专心便于进行单个
6、模块的设计、开发、调试、测试和维护便于进行单个模块的设计、开发、调试、测试和维护等工作等工作一个模块一个模块地完成,最后再将它们集成一个模块一个模块地完成,最后再将它们集成l开发人员各司其职开发人员各司其职按模块分配任务,职责明确按模块分配任务,职责明确并行开发,缩短开发时间并行开发,缩短开发时间l分而治之(分而治之(Wirth,1971Wirth,1971)信息隐藏(信息隐藏(Parnas,1972Parnas,1972)8第8页,本讲稿共134页6.1 6.1 概述概述6.1.2 6.1.2 什么是函数什么是函数 l函数是一组逻辑相关语句的集合。函数是一组逻辑相关语句的集合。lC C语言中
7、,模块就是一组逻辑相关语言中,模块就是一组逻辑相关(这也体现了软这也体现了软件工程中的件工程中的“内聚性内聚性”)的语句的集合或说是用于的语句的集合或说是用于完成特定任务的程序代码的单元。完成特定任务的程序代码的单元。l根据规模的大小,根据规模的大小,C C语言中的模块有三种形式,它语言中的模块有三种形式,它们是:们是:语句块语句块(即复合语句)、(即复合语句)、函数函数和和文件文件。l函数是函数是C C语言中最为常用的模块单元,因此通常说语言中最为常用的模块单元,因此通常说C C程序是由函数组成的,函数是程序是由函数组成的,函数是C C语言程序的基本语言程序的基本组成部分。组成部分。9第9页
8、,本讲稿共134页maincabdefghijkl图 6-1 C程序的模块化6.1 概述概述10第10页,本讲稿共134页lC C是是函数式函数式语言语言l必须有且只能有一个名为必须有且只能有一个名为mainmain的主函数的主函数lC程序的执行总是程序的执行总是从从mainmain函数开始函数开始,在在mainmain中结束中结束6.1 概述概述C程序结构11第11页,本讲稿共134页函数分类函数分类l从用户角度从用户角度:标准函数(库函数):由系统提供标准函数(库函数):由系统提供用户自定义函数用户自定义函数l从函数形式从函数形式:无参函数无参函数有参函数有参函数使用使用库函数库函数应注意
9、:应注意:1、函数功能、函数功能2、函数参数的数目和顺序,及各参数意义和类型、函数参数的数目和顺序,及各参数意义和类型3、函数返回值意义和类型、函数返回值意义和类型4、需要使用的包含文件、需要使用的包含文件6.1 概述概述12第12页,本讲稿共134页6.2 6.2 函数的定义函数的定义函数在函数在定义定义的时候是平等的,即一个函数不的时候是平等的,即一个函数不能由另一个函数所定义;但是一个函数可以被另能由另一个函数所定义;但是一个函数可以被另一个函数所调用。一个函数所调用。换句话说,函数换句话说,函数可以嵌套调用但是不可以嵌套可以嵌套调用但是不可以嵌套定义定义。13第13页,本讲稿共134页
10、6.2.26.2.2函数的定义函数的定义函数体函数体合法标识符合法标识符函数返回值类型函数返回值类型缺省缺省int型型无返回值无返回值void函数类型函数类型 函数名(形参类型说明表)函数名(形参类型说明表)说明部分说明部分;语句部分语句部分;return 语句语句;函数头部函数头部6.2 6.2 函数的定义函数的定义14第14页,本讲稿共134页6.2 6.2 函数的定义函数的定义说明说明:l参数:参数一般用于一个函数把数据传递给另一参数:参数一般用于一个函数把数据传递给另一个函数(调用者和被调用者之间),实现函数之个函数(调用者和被调用者之间),实现函数之间的通信。这是很重要的,因为在模块
11、化分工合间的通信。这是很重要的,因为在模块化分工合作的工作模式中,函数参数实现了各个模块之间作的工作模式中,函数参数实现了各个模块之间的通信才使得各个模块得以彼此协作。定义函数的通信才使得各个模块得以彼此协作。定义函数的时候,函数的参数是形式参数,是对一件具体的时候,函数的参数是形式参数,是对一件具体事件可能需要数据的假设。事件可能需要数据的假设。15第15页,本讲稿共134页6.2 6.2 函数的定义函数的定义l返回值:返回值就好比做了一件事情,这个事情的返回值:返回值就好比做了一件事情,这个事情的完成带回来了个结果。在定义函数的时用完成带回来了个结果。在定义函数的时用“返回值返回值类型类型
12、”指定函数的类型,即函数带回来的值的类型。指定函数的类型,即函数带回来的值的类型。如果类型标识符为如果类型标识符为voidvoid则表示不需要带回函数值;则表示不需要带回函数值;而如果没有类型标识,则而如果没有类型标识,则TC2.0TC2.0默认返回值类型是默认返回值类型是intint(在(在vc+6.0vc+6.0中则认为默认为中则认为默认为voidvoid,视编译器,视编译器的不同而不同)。的不同而不同)。16第16页,本讲稿共134页6.2 6.2 函数的定义函数的定义l函数体:一对花括号里面的内容函数体:一对花括号里面的内容(包括声明部分和包括声明部分和语句部分语句部分)又被称为函数体
13、,当函数体为空的时候,又被称为函数体,当函数体为空的时候,该函数也被叫做该函数也被叫做空函数空函数,就是说它什么也不做。,就是说它什么也不做。void dummy()void dummy()17第17页,本讲稿共134页例例6-1 6-1 定义一个函数,功能为:计算两个整数的平均数。定义一个函数,功能为:计算两个整数的平均数。/*/*函数功能:计算平均数函数功能:计算平均数函数入口参数:整型函数入口参数:整型x x,存储第一个运算数,存储第一个运算数 整型整型y y,存储第二个运算数,存储第二个运算数函数返回值:平均数函数返回值:平均数*/int Average(int x,int y)int
14、 Average(int x,int y)int result;int result;result=(x+y)/2;result=(x+y)/2;return result;return result;6.2 6.2 函数的定义函数的定义18第18页,本讲稿共134页6.2.3 6.2.3 函数的参数和返回值函数的参数和返回值1.1.函数的参数函数的参数 大多数情况下,调用者大多数情况下,调用者(主调函数主调函数)和被调用者和被调用者(被调用函数被调用函数)之间有数据传之间有数据传递关系,也就是说该函数有参数(可以称为有参函数,否则叫做无参函递关系,也就是说该函数有参数(可以称为有参函数,否则
15、叫做无参函数)。在定义函数时函数名后面括号中的参数称为数)。在定义函数时函数名后面括号中的参数称为“形式参数形式参数”(简称(简称“形参形参”);在主调函数中调用一个函数时,函数名后面括号中的参数);在主调函数中调用一个函数时,函数名后面括号中的参数(可以是一个表达式)称为(可以是一个表达式)称为“实际参数实际参数”(简称(简称“实参实参”)。)。2.2.返回值返回值通常,希望通过函数调用使主调函数能得到一个确定的值,这就是函数的返回通常,希望通过函数调用使主调函数能得到一个确定的值,这就是函数的返回值,也称函数值。值,也称函数值。6.2 6.2 函数的定义函数的定义19第19页,本讲稿共13
16、4页6.3.1 6.3.1 函数调用的一般形式函数调用的一般形式 函数名函数名(实参表列实参表列);6.3 6.3 函数的调用函数的调用20第20页,本讲稿共134页6.3 6.3 函数的调用函数的调用如果是调用无参函数,则如果是调用无参函数,则“实参表列实参表列”可以没有,但是可以没有,但是括号不能省略。如果实参表列包含多个实参,则各个参数间括号不能省略。如果实参表列包含多个实参,则各个参数间用逗号隔开。用逗号隔开。实参和形参个数应相等,类型应匹配。实参与形参按实参和形参个数应相等,类型应匹配。实参与形参按顺序对应,一一传递数据。但应说明,如果实参表列包括顺序对应,一一传递数据。但应说明,如
17、果实参表列包括多个实参,对实参求值的顺序并不是确定的,有的系统按多个实参,对实参求值的顺序并不是确定的,有的系统按自左至右顺序求实参的值,有的系统则按自右至左的顺序。自左至右顺序求实参的值,有的系统则按自右至左的顺序。1.实参与形参实参与形参个数相等,类型一致个数相等,类型一致,按顺序一一对应按顺序一一对应;2.实参表求值顺序视系统而定实参表求值顺序视系统而定(Turbo C,VC+自右向左自右向左)。21第21页,本讲稿共134页6.3 6.3 函数的调用函数的调用例例6-2 6-2 调用函数时的数据传递。调用函数时的数据传递。#include#include void main()void
18、 main()int max(int x,int y);int max(int x,int y);int a,b,c;int a,b,c;scanf(%d,%d,&a,&b);scanf(%d,%d,&a,&b);c=max(a,b);c=max(a,b);printf(max is%d,c);printf(max is%d,c);int max(int x,int y)/*int max(int x,int y)/*定义有参函数定义有参函数max*/max*/int z;int z;z=xy?x:y;z=xy?x:y;return(z);return(z);运行情况:运行情况:7,87,8m
19、ax is 8max is 822第22页,本讲稿共134页6.3 6.3 函数的调用函数的调用例例6-36-3返回值类型与函数类型不同。返回值类型与函数类型不同。#include#include void main()void main()int max(int x,int y);int max(int x,int y);float a,b;float a,b;int c;int c;scanf(%f,%f,&a,&b);scanf(%f,%f,&a,&b);c=max(a,b);c=max(a,b);printf(max is%d,c);printf(max is%d,c);int max
20、(float x,float y)int max(float x,float y)float z;float z;/*z/*z为实型变量为实型变量*/z=xy?x:y;z=xy?x:y;return(z);return(z);运行情况:运行情况:1.51.5,2.5 2.5 max is 2max is 2以函数类型为准以函数类型为准23第23页,本讲稿共134页6.3 6.3 函数的调用函数的调用c=max(a,b);(main函数)函数)c=max(x,y);(max函数)函数)int z;z=xy?x:y;return(z);图图 6-2 6-2 函数调用函数调用参参数数传传递递返返回回
21、(有有返返回回值值)函函数数调调用用24第24页,本讲稿共134页6.3 6.3 函数的调用函数的调用例例6-4 6-4 实参求值的顺序。实参求值的顺序。#include#include void main()void main()int f(int a,int b);/*int f(int a,int b);/*函数声明函数声明*/int i=2,p;int i=2,p;p=f(i,+i);/*p=f(i,+i);/*函数调用函数调用*/printf(%dn,p);printf(%dn,p);int f(int a,int b)/*int f(int a,int b)/*函数定义函数定义*/
22、int c;int c;if(ab)c=1;if(ab)c=1;else if(a=b)c=0;else if(a=b)c=0;else c=-1;else c=-1;return(c);return(c);在在Turbo C 2.0Turbo C 2.0和和Turbo C+3.0Turbo C+3.0系统上运行的结果是系统上运行的结果是?在在Turbo C 2.0Turbo C 2.0和和Turbo C+3.0Turbo C+3.0系统上,若系统上,若p=f(i,i+);p=f(i,i+);结果是结果是?25第25页,本讲稿共134页函数调用过程中形参和实参间数值传递的说明:函数调用过程中形
23、参和实参间数值传递的说明:a)在定义函数中指定的形参,在函数尚未被调用时,它们并不占用内存中在定义函数中指定的形参,在函数尚未被调用时,它们并不占用内存中的存储单元。的存储单元。只有在发生函数调用时,函数只有在发生函数调用时,函数max中的形参才被分配内存单元。在中的形参才被分配内存单元。在调用结束后,形参所占的内存单元也被释放调用结束后,形参所占的内存单元也被释放。b)实参可以是常量、变量或表达式,例如:实参可以是常量、变量或表达式,例如:max(3,a+b);但要求它们有确定的值;但要求它们有确定的值;形参一定是变量表达式。形参一定是变量表达式。c)在被定义的函数中,必须指定形参的类型。在
24、被定义的函数中,必须指定形参的类型。d)实参与形参的类型应相同或赋值兼容。例实参与形参的类型应相同或赋值兼容。例6-2中实参和形参都是整型,这是合法的、中实参和形参都是整型,这是合法的、正确的。如果实参为整型而形参正确的。如果实参为整型而形参x为实型,或者相反,则按照前面章节介绍的不同类为实型,或者相反,则按照前面章节介绍的不同类型数值的赋值规则进行转换。例如实参值型数值的赋值规则进行转换。例如实参值a为为3.5,而形参,而形参x为整型,则将实数为整型,则将实数3.5转换成整数转换成整数3,然后送到形参,然后送到形参b。字符型与整型可以互相通用。字符型与整型可以互相通用。e)在在C语言中,实参
25、向形参的数据传递是语言中,实参向形参的数据传递是“值传递值传递”,单向传递单向传递,只由实参传给形,只由实参传给形参,而不能由形参传回来给实参。在内存中,实参单元与形参单元是不同的单元。参,而不能由形参传回来给实参。在内存中,实参单元与形参单元是不同的单元。6.3 6.3 函数的调用函数的调用26第26页,本讲稿共134页711x:y:调用前:调用前:调用结束:调用结束:711x:y:例:例:#include main()void swap(int,int);int x=7,y=11;printf(x=%d,ty=%dn,x,y);printf(swapped:n);swap(x,y);pri
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第6章 函数精选PPT 函数 精选 PPT
限制150内