函数的设计方法.ppt
《函数的设计方法.ppt》由会员分享,可在线阅读,更多相关《函数的设计方法.ppt(145页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第5章 函数具体具体内容包括:内容包括:内容包括:内容包括:1 1 1 1、了解函数的基本概念;、了解函数的基本概念;、了解函数的基本概念;、了解函数的基本概念;2 2 2 2、熟悉库函数的使用方法;、熟悉库函数的使用方法;、熟悉库函数的使用方法;、熟悉库函数的使用方法;3 3 3 3、掌握设计函数和编写函数的方法;、掌握设计函数和编写函数的方法;、掌握设计函数和编写函数的方法;、掌握设计函数和编写函数的方法;4 4 4 4、掌握函数调用方法,实参向形参单向传值规则;、掌握函数调用方法,实参向形参单向传值规则;、掌握函数调用方法,实参向形参单向传值规则;、掌握函数调用方法,实参向形参单向传值规
2、则;5 5 5 5、了解递归函数的基本特点,能编写简单的递归函数。、了解递归函数的基本特点,能编写简单的递归函数。、了解递归函数的基本特点,能编写简单的递归函数。、了解递归函数的基本特点,能编写简单的递归函数。6 6 6 6、了解存储类别的概念,掌握变量作用域规则。、了解存储类别的概念,掌握变量作用域规则。、了解存储类别的概念,掌握变量作用域规则。、了解存储类别的概念,掌握变量作用域规则。7 7 7 7、了解宏定义、文件包含、条件编译等预处理命令的、了解宏定义、文件包含、条件编译等预处理命令的、了解宏定义、文件包含、条件编译等预处理命令的、了解宏定义、文件包含、条件编译等预处理命令的基本知识。
3、基本知识。基本知识。基本知识。15.1 5.1 函数的基本概念函数的基本概念进进行行结结构构化化程程序序设设计计时时,为为了了控控制制程程序序的的复复杂杂性性,通通常常需需要要把把完完成成相相对对独独立立功功能能的的程程序段编写成函数。序段编写成函数。当当程程序序需需要要执执行行原原先先程程序序段段相相应应的的任任务务时时,可以通过调用该函数来实现。可以通过调用该函数来实现。2函数调用是一种程序执行的转移(控制转移),当函数调用是一种程序执行的转移(控制转移),当函数调用是一种程序执行的转移(控制转移),当函数调用是一种程序执行的转移(控制转移),当计算机执行一个函数调用时,控制转移到实现该计
4、算机执行一个函数调用时,控制转移到实现该计算机执行一个函数调用时,控制转移到实现该计算机执行一个函数调用时,控制转移到实现该函数的语句序列。在函数的执行过程中,当执行函数的语句序列。在函数的执行过程中,当执行函数的语句序列。在函数的执行过程中,当执行函数的语句序列。在函数的执行过程中,当执行完函数体中的语句,或执行了完函数体中的语句,或执行了完函数体中的语句,或执行了完函数体中的语句,或执行了returnreturnreturnreturn语句,如上语句,如上语句,如上语句,如上述函数述函数述函数述函数volume()volume()volume()volume()执行了语句:执行了语句:执行
5、了语句:执行了语句:return vol;return vol;return vol;return vol;然后控制又返回到函数调用点。然后控制又返回到函数调用点。然后控制又返回到函数调用点。然后控制又返回到函数调用点。“函数调用表达式函数调用表达式函数调用表达式函数调用表达式”的值,就是函数体中的值,就是函数体中的值,就是函数体中的值,就是函数体中returnreturnreturnreturn语语语语句后的表达式的值。句后的表达式的值。句后的表达式的值。句后的表达式的值。(void(void(void(void类型的函数无返回值类型的函数无返回值类型的函数无返回值类型的函数无返回值)函数调
6、用表达式执行后,程序继续执行表达式的其函数调用表达式执行后,程序继续执行表达式的其函数调用表达式执行后,程序继续执行表达式的其函数调用表达式执行后,程序继续执行表达式的其它操作。它操作。它操作。它操作。3【例例5.15.1】已知已知圆柱体的半径和高,求柱体的半径和高,求圆柱体柱体体体积的程序。的程序。#include#include int main()int main()double PI=3.1415926,radius,height,vol;double PI=3.1415926,radius,height,vol;printf(printf(输入圆柱体的半径和高输入圆柱体的半径和高n)
7、;n);scanf(%lf%lf,&radius,&height);scanf(%lf%lf,&radius,&height);vol=PI*radius*radius*height;vol=PI*radius*radius*height;printf(printf(圆柱体的体积是圆柱体的体积是%fn,vol);%fn,vol);return 0;return 0;4为了使程序的语义更清楚,便于重复利用,可将上述为了使程序的语义更清楚,便于重复利用,可将上述程序中关于计算圆柱体的体积的部分代码抽象出来,程序中关于计算圆柱体的体积的部分代码抽象出来,并以某种特定的形式(函数)定义在程序的其它地方
8、,并以某种特定的形式(函数)定义在程序的其它地方,例如:例如:double volume(double radius,double height)double volume(double radius,double height)double PI=3.1415926,vol;double PI=3.1415926,vol;vol=PI*radius*radius*height;vol=PI*radius*radius*height;return vol;return vol;5这段代码称为函数的定义性声明。这段代码称为函数的定义性声明。函数是对原程序代码段的抽象。函数是对原程序代码段的抽象。
9、volumevolume是这个函数的是这个函数的名字,最前面的名字,最前面的doubledouble是函数返回值的类型。函数名是函数返回值的类型。函数名后面括号中列出的后面括号中列出的radiusradius和和heightheight是函数的形式参数是函数的形式参数(形参),代码指出这两个形参是(形参),代码指出这两个形参是doubledouble类型的。再类型的。再后面一对花括号中列出的是实现函数功能的语句序列。后面一对花括号中列出的是实现函数功能的语句序列。上述代码的作用是,如果程序的某个地方已知圆柱体上述代码的作用是,如果程序的某个地方已知圆柱体的半径的半径x x和高度和高度y y,需
10、要计算圆柱体的体积,需要计算圆柱体的体积v v。就可用。就可用以下函数调用代码实现计算圆柱体的体积:以下函数调用代码实现计算圆柱体的体积:v=volume(x,y);v=volume(x,y);6当函数被调用时,函数结构中的语句序列就被执行。当函数被调用时,函数结构中的语句序列就被执行。当函数被调用时,函数结构中的语句序列就被执行。当函数被调用时,函数结构中的语句序列就被执行。因此使用函数调用因此使用函数调用因此使用函数调用因此使用函数调用volume(x,y)volume(x,y)volume(x,y)volume(x,y)的程序就具备了计算的程序就具备了计算的程序就具备了计算的程序就具备了
11、计算圆柱体体积的能力,而不需要为如何计算圆柱体的体圆柱体体积的能力,而不需要为如何计算圆柱体的体圆柱体体积的能力,而不需要为如何计算圆柱体的体圆柱体体积的能力,而不需要为如何计算圆柱体的体积编写详细的实现代码。积编写详细的实现代码。积编写详细的实现代码。积编写详细的实现代码。函数调用处只能看到一个函数调用所得结果,看不到函数调用处只能看到一个函数调用所得结果,看不到函数调用处只能看到一个函数调用所得结果,看不到函数调用处只能看到一个函数调用所得结果,看不到计算这个结果的每一个步骤。这样就给函数调用者只计算这个结果的每一个步骤。这样就给函数调用者只计算这个结果的每一个步骤。这样就给函数调用者只计
12、算这个结果的每一个步骤。这样就给函数调用者只关心这个函数能做什么,而函数内部的计算过程,是关心这个函数能做什么,而函数内部的计算过程,是关心这个函数能做什么,而函数内部的计算过程,是关心这个函数能做什么,而函数内部的计算过程,是函数抽象的实现者所关心的内容。函数抽象的实现者所关心的内容。函数抽象的实现者所关心的内容。函数抽象的实现者所关心的内容。7对函数使用者来说,可以把函数看作一个对函数使用者来说,可以把函数看作一个对函数使用者来说,可以把函数看作一个对函数使用者来说,可以把函数看作一个“黑盒黑盒黑盒黑盒”,只需知道要传送给函数加工的数据,和函数执行后能只需知道要传送给函数加工的数据,和函数
13、执行后能只需知道要传送给函数加工的数据,和函数执行后能只需知道要传送给函数加工的数据,和函数执行后能得到的结果。而函数如何执行是可以不知道的。得到的结果。而函数如何执行是可以不知道的。得到的结果。而函数如何执行是可以不知道的。得到的结果。而函数如何执行是可以不知道的。函数还为程序的层次构造提供有力支持,使新程序的函数还为程序的层次构造提供有力支持,使新程序的函数还为程序的层次构造提供有力支持,使新程序的函数还为程序的层次构造提供有力支持,使新程序的设计能在已有函数的基础上展开,有利于构造功能更设计能在已有函数的基础上展开,有利于构造功能更设计能在已有函数的基础上展开,有利于构造功能更设计能在已
14、有函数的基础上展开,有利于构造功能更强的函数和程序,而不必一切都从头开始。强的函数和程序,而不必一切都从头开始。强的函数和程序,而不必一切都从头开始。强的函数和程序,而不必一切都从头开始。函数的能力还表现在可以带有形式化参数,使函数执函数的能力还表现在可以带有形式化参数,使函数执函数的能力还表现在可以带有形式化参数,使函数执函数的能力还表现在可以带有形式化参数,使函数执行时,操作对象、求值的方法等可随不同调用的需要行时,操作对象、求值的方法等可随不同调用的需要行时,操作对象、求值的方法等可随不同调用的需要行时,操作对象、求值的方法等可随不同调用的需要而改变。而改变。而改变。而改变。8函数形参是
15、函数对操作数据的抽象,这个函数形参是函数对操作数据的抽象,这个抽象过程被称为参数化。抽象过程被称为参数化。如上述的如上述的volumevolume()()函数带两个形参函数带两个形参radiusradius和和heightheight。它们。它们表示函数内所使用的两个对象,当调用这表示函数内所使用的两个对象,当调用这个函数时,这两个对象的值是这次调用所个函数时,这两个对象的值是这次调用所要操作的值。例如,要操作的值。例如,volume(x,y)volume(x,y)表示这表示这次调用的操作值是次调用的操作值是x x和和y y。在函数调用表达在函数调用表达式式volume(x,y)volume(
16、x,y)中,中,x x和和y y被称为实参。被称为实参。9实参的值在控制转去执行函数中的语句时,实参的值在控制转去执行函数中的语句时,用于初始化形参用于初始化形参。例如,函数调用。例如,函数调用volume(x,y)volume(x,y)中的中的x x和和y y分别初始化形参分别初始化形参radiusradius和和heightheight。通常一个函数在执行完之后都要返回一个值。通常一个函数在执行完之后都要返回一个值。如果函数的主要目的是完成一个特定的操作如果函数的主要目的是完成一个特定的操作或更新指定的对象,没有返回值。这时可将或更新指定的对象,没有返回值。这时可将函数的返回值类型指定为函
17、数的返回值类型指定为voidvoid类型。这种类类型。这种类型的函数不返回值,这样的函数就是通常所型的函数不返回值,这样的函数就是通常所说的过程。说的过程。10不返回不返回值的函数的例子的函数的例子 函数display()只是显示两个变量的值:#include void display(int f,int s)printf(第一个变量的值是%dn,f);printf(第二个变量的值是%dn,s);int main()display(2,7);display(5,8);return 0;11函数还可以定义局部对象,使函数在逻辑上作为程序的一函数还可以定义局部对象,使函数在逻辑上作为程序的一函数还
18、可以定义局部对象,使函数在逻辑上作为程序的一函数还可以定义局部对象,使函数在逻辑上作为程序的一个相对独立单位,不受主函数或其他函数对程序对象命名个相对独立单位,不受主函数或其他函数对程序对象命名个相对独立单位,不受主函数或其他函数对程序对象命名个相对独立单位,不受主函数或其他函数对程序对象命名的影响。的影响。的影响。的影响。程序以程序以程序以程序以main()main()main()main()函数作为程序的主函数。程序运行时,从函数作为程序的主函数。程序运行时,从函数作为程序的主函数。程序运行时,从函数作为程序的主函数。程序运行时,从它开始执行。在语言中,函数不能嵌套定义,一个函数它开始执行
19、。在语言中,函数不能嵌套定义,一个函数它开始执行。在语言中,函数不能嵌套定义,一个函数它开始执行。在语言中,函数不能嵌套定义,一个函数不从属于另一个函数,但函数可以相互调用。不从属于另一个函数,但函数可以相互调用。不从属于另一个函数,但函数可以相互调用。不从属于另一个函数,但函数可以相互调用。一个程序可由若干个源程序文件组成,每个源程序文件一个程序可由若干个源程序文件组成,每个源程序文件一个程序可由若干个源程序文件组成,每个源程序文件一个程序可由若干个源程序文件组成,每个源程序文件由一系列数据类型定义和说明、变量定义和说明、函数定由一系列数据类型定义和说明、变量定义和说明、函数定由一系列数据类
20、型定义和说明、变量定义和说明、函数定由一系列数据类型定义和说明、变量定义和说明、函数定义和说明等代码组成。程序的一个源程序文件对应通义和说明等代码组成。程序的一个源程序文件对应通义和说明等代码组成。程序的一个源程序文件对应通义和说明等代码组成。程序的一个源程序文件对应通常所说的程序常所说的程序常所说的程序常所说的程序“模块模块模块模块”。一个源程序文件也是可独立编译。一个源程序文件也是可独立编译。一个源程序文件也是可独立编译。一个源程序文件也是可独立编译的单位,程序可以按函数分别编写,按源程序文件分别的单位,程序可以按函数分别编写,按源程序文件分别的单位,程序可以按函数分别编写,按源程序文件分
21、别的单位,程序可以按函数分别编写,按源程序文件分别编译。编译。编译。编译。125.2 5.2 库函数的使用方法库函数的使用方法 每类库函数都定义了自己专用的常量、符号、数据类型、每类库函数都定义了自己专用的常量、符号、数据类型、每类库函数都定义了自己专用的常量、符号、数据类型、每类库函数都定义了自己专用的常量、符号、数据类型、函数接口等,这些信息都在它们专用的头文件函数接口等,这些信息都在它们专用的头文件函数接口等,这些信息都在它们专用的头文件函数接口等,这些信息都在它们专用的头文件(xxx.h)(xxx.h)(xxx.h)(xxx.h)中中中中被定义。用户如果要使用相应库函数,只需在程序中包
22、含被定义。用户如果要使用相应库函数,只需在程序中包含被定义。用户如果要使用相应库函数,只需在程序中包含被定义。用户如果要使用相应库函数,只需在程序中包含某个头文件的预处理命令,就可以直接使用头文件中定义某个头文件的预处理命令,就可以直接使用头文件中定义某个头文件的预处理命令,就可以直接使用头文件中定义某个头文件的预处理命令,就可以直接使用头文件中定义的函数。的函数。的函数。的函数。例如,使用字符分类和转换处理库函数的程序要在程序开例如,使用字符分类和转换处理库函数的程序要在程序开例如,使用字符分类和转换处理库函数的程序要在程序开例如,使用字符分类和转换处理库函数的程序要在程序开始位置写上以下的
23、预处理命令:始位置写上以下的预处理命令:始位置写上以下的预处理命令:始位置写上以下的预处理命令:#include#include#include#include 13以下是常用的头文件:以下是常用的头文件:1.1.stdio.h stdio.h 输入输出库函数输入输出库函数2.2.math.hmath.h、stdlib.hstdlib.h、float.h float.h 数数学学库库函函数数3.3.time.h time.h 时间库函数时间库函数4.4.ctype.h ctype.h 字符分类和转换库函数字符分类和转换库函数5.5.string.h string.h 内内存存缓缓冲冲区区和和字
24、字符符串串处处理理库库函函数数6.6.malloc.hmalloc.h、stdlib.h stdlib.h 内内存存动动态态分分配配库库函函数数7.7.signal.hsignal.h、process.h process.h 进程控制库函数进程控制库函数14【例例5.25.2】产生生1010个个0 0100100之之间的随机数。的随机数。#include /*#include /*输入输出库函数的头文件输入输出库函数的头文件*/#include /*#include /*时间库函数的头文件时间库函数的头文件*/#include#include /*/*数学或内存分配库函数的头文件数学或内存分配
25、库函数的头文件*/int main()int main()int k;long now;int k;long now;srand(time(&now);/*srand(time(&now);/*用时间初始化随机数发生函数用时间初始化随机数发生函数的初态,使初态总不相同的初态,使初态总不相同*/for(k=0;k 10;k+)for(k=0;k 10;k+)/*/*产生产生1010个个100100以内的随机数以内的随机数*/printf(%dn,rand()%100);printf(%dn,rand()%100);/*/*调用随机函数调用随机函数*/return 0;return 0;15【程序
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 函数 设计 方法
限制150内