C++程序设计函数ppt课件.pptx
《C++程序设计函数ppt课件.pptx》由会员分享,可在线阅读,更多相关《C++程序设计函数ppt课件.pptx(103页珍藏版)》请在三一办公上搜索。
1、程序设计与算法语言 C+程序设计,函数,本章内容,简要介绍函数调用时的内部实现机制,以及与此相关的内存分配机制、变量生命期和作用域;函数重载,递归算法、内联函数、默认参数函数以及多文件组织、编译预处理、工程文件和运行库函数。,信息科学与工程学院,第3章 函数,2,内容安排,3.1 函数的定义与调用3.2 函数的参数传递、返回值及函数声明3.3 全局变量和局部变量3.4 函数调用机制3.5 作用域与标示符的可见性3.6 存储类型与标示符的生命期3.7 函数的递归调用3.8 函数的重载、内联及默认参数,信息科学与工程学院,第3章 函数,3,3.1 函数的定义与调用,3.1.1 函数概述3.1.2
2、函数的定义3.1.3 函数的调用,信息科学与工程学院,第3章 函数,4,3.1.1 函数概述,函数是程序基本组成模块,可重复使用相对独立经常使用可把一个复杂任务分解成为若干个易于解决的小任务,充分体现逐步细化的设计思想使用时只考虑其功能和接口,信息科学与工程学院,第3章 函数,5,3.1.1 函数概述,C+程序由若干函数组成一般函数可调用其他函数,也可被其他函数调用其中存在一个函数称为主函数(入口函数)。入口函数是程序执行的入口,它可调用其他函数,但不可被调用main()WinMain(),信息科学与工程学院,第3章 函数,6,3.1.1 函数概述,函数调用层次关系,信息科学与工程学院,第3章
3、 函数,7,3.1.1 函数概述,函数按是否系统预定义可分为库函数(或标准函数):是由编译系统预定义的。例如:一些常用的数学计算函数、字符串处理函数、图形处理函数、标准输入输出函数等库函数都按功能分类,集中说明在不同的头文件中用户只需在自己的程序中包含某个头文件,就可直接使用该文件中定义(准确说是声明)的函数用户根据需要将某个具有相对独立功能的程序定义为函数,称为自定义函数,信息科学与工程学院,第3章 函数,8,3.1.1 函数概述,函数按是否带有参数可分为无参函数:不需要输入参数的函数有参函数:有输入参数的函数,信息科学与工程学院,第3章 函数,9,3.1.2 函数的定义,函数定义:func
4、tion definition函数构成函数头:定义函数功能和接口的全部要素函数名:the name of the function函数参数:the types and number of parameters(arguments)函数返回值类型:the return type函数体:定义函数的算法实现函数必须先定义后使用,信息科学与工程学院,第3章 函数,10,3.1.2 函数的定义,无参函数基本格式数据类型函数名(void)函数体数据类型指函数返回值类型,可是任一种数据类型,默认为返回整型值(但新标准要求写明,不用默认方式)。没有返回值应将返回值类型定义为void函数名采用合法标识符表示参数
5、括号中的void通常省略,但括号不能省略函数体由一系列语句组成(函数体可为空,称为空函数),信息科学与工程学院,第3章 函数,11,void sayHello()couthello world!;,3.1.2 函数的定义,有参函数基本格式数据类型函数名(参数类型1形式参数1,参数类型2形式参数2,)函数体 参数表中列出所有形式参数(form/formal parameters)的类型和参数名称各参数即使类型相同也必须分别加以说明形式参数简称形参,只能是变量名,不允许是常量或表达式,信息科学与工程学院,第3章 函数,12,3.1.2 函数的定义,信息科学与工程学院,第3章 函数,13,int m
6、ax(int a,int b)return(a=b?a:b);,3.1.2 函数的定义,根据参数和返回值,有4种类型函数需要参数,并返回值需要参数,不返回值不需参数,但返回值不需参数,不返回值,信息科学与工程学院,第3章 函数,14,3.1.2 函数的定义,函数头用来反映函数的功能和使用接口,它所定义的是“做什么”。即,明确了“黑匣子”的输入输出部分,输入就是参数,输出就是函数的返回值。只有那些功能上起自变量作用的变量才必须作为参数定义在参数表中函数体中具体描述“如何做”,因此除参数之外的为实现算法所需用的变量定义在函数体内C+中不允许函数的嵌套定义,即,在一个函数中定义另一个函数,信息科学与
7、工程学院,第3章 函数,15,3.1.3 函数的调用,所谓函数调用,就是使程序转去执行函数体除主函数外,其他任何函数都不能单独作为程序运行任何函数功能的实现都是通过被主函数直接或间接调用进行的,信息科学与工程学院,第3章 函数,16,3.1.3 函数的调用,无参函数的调用格式函数名()有参函数的调用格式函数名(实际参数表)实际参数(actual arguments)简称实参,用来将实际参数的值传递给形参,因此可是常量、具有值的变量或表达式,信息科学与工程学院,第3章 函数,17,Parameters are the names of the values passed to a functio
8、n by a function call.Arguments are the values the function expects to receive.,3.1.3 函数的调用,调用无返回值的函数可单独成为函数调用语句,即调用格式加分号调用有返回值的函数将产生一个数据值,因此函数调用通常出现在表达式中返回值参与表达式计算,例如:赋值在条件语句中直接参与逻辑运算,信息科学与工程学院,第3章 函数,18,3.1.3 函数的调用,信息科学与工程学院,第3章 函数,19,【例3.1】输入两个实数,输出其中较大的数。其中求两个实 数中的较大数用函数完成float max(float x,float
9、y)return(x=y?x:y);int main()float x,y;coutxy;coutx和y中较大数max(x,y)endl;return 0;,3.2 函数的参数传递、返回值及函数声明,3.2.1 函数的参数传递及传值调用3.2.2 函数返回值3.2.3 函数声明,信息科学与工程学院,第3章 函数,20,3.2.1 函数的参数传递及传值调用,函数调用首先要进行参数传递传递的方向是由实参传递给形参传递过程先计算实参表达式的值再将该值传递给对应的形参变量一般情况下,实参和形参的个数和排列顺序应一一对应,并且对应参数应类型匹配(赋值兼容)。即,实参的类型可转化为形参类型,而对应参数的参
10、数名则不要求相同,信息科学与工程学院,第3章 函数,21,3.2.1 函数的参数传递及传值调用,调用形式传值(value):传递实参的值,需要复制引用(reference):传递实参的别名(alias),信息科学与工程学院,第3章 函数,22,3.2.1 函数的参数传递及传值调用,传值调用将实参的值复制给形参。当两者不匹配时,编译器将实参转化为与形参一致的类型按参数位置对应,而不是按参数名对应在函数中参加运算的是形参,而实参不会发生任何改变起了一种隔离作用,信息科学与工程学院,第3章 函数,23,信息科学与工程学院,第3章 函数,24,【例3.2】说明实参和形参对应关系的示例float pow
11、er(float x,int n)/求x的n次幂float pow=1;while(n-)pow*=x;return pow;int main()int n=3;float x=4.6;char c=a;coutpower(x,n)=power(x,n)endl;coutpower(c,n)=power(c,n)endl;coutpower(n,x)=power(n,x)endl;return 0;,power(4.6,3)=97.336power(a,3)=912673power(3,4.6)=81,3.2.1 函数的参数传递及传值调用,传地址(address)一种特殊的传值方式虽然复制的也
12、是值,但是可直接对地址所指向的内容进行读写操作,即,无法直接隔离形参对实参的影响包括指针(pointer)和数组的名称(the name of the array)都可实现传地址的任务,信息科学与工程学院,第3章 函数,25,3.2.2 函数返回值,对于有返回值的函数,在函数的出口处必须用return语句将要返回的值返回给调用者格式:return 表达式;步骤计算表达式类型转化返回值,信息科学与工程学院,第3章 函数,26,3.2.2 函数返回值,函数一旦执行到return语句便会终止函数执行,返回调用单元对于没有返回值的函数,应将返回值类型定义为void,函数体内可没有return语句,当需
13、要在程序指定位置退出时,可在该处放置一个:return;,信息科学与工程学院,第3章 函数,27,信息科学与工程学院,第3章 函数,28,【例3.3】设计函数,根据三角形的三边长求面积。如果不能构成三角形,给出提示信息float TriangleArea(float a,float b,float c)if(a+b abc;area=TriangleArea(a,b,c);if(area=-1)cout(a,b,c)不能构成三角形!endl;elsecout三角形(a,b,c)面积为:areaendl;return 0;,3.2.3 函数声明,函数声明的引入语法上对程序文件中函数的排列次序要求
14、满足先定义后使用但从结构化程序设计的角度,通常是先调用后定义使用函数声明(function declarations),则既符合由粗到精的思维方式,又满足了语法要求,信息科学与工程学院,第3章 函数,29,3.2.3 函数声明,函数声明的格式 函数返回值类型函数名(形参表);是一条以分号结束的语句各形参之间以逗号分隔形参表可逐个列出每个参数的类型和参数名,也可只列出每个形参的类型,而参数名可省略,信息科学与工程学院,第3章 函数,30,3.2.3 函数声明,函数声明和所定义的函数必须在以下几方面完全对应一致,否则将导致编译错误返回值类型函数名形参个数形参类型形参次序,信息科学与工程学院,第3章
15、 函数,31,信息科学与工程学院,第3章 函数,32,【例3.4】输出所有满足下列条件的正整数m:10 0);for(int j=0;j i;j+)n=n*10+digitj;/反向装配return(n=m);,作业,P102:习题3.1.1。抄写P102:习题3.1.7的(2)P103:习题3.3,信息科学与工程学院,第3章 函数,33,2013年11月21日实验内容,必作部分实验六:“文本文件的简单应用”中的实验内容3和4实验七:“函数的基本概念”中的实验内容3和4教材习题3.5选作部分实验七:“函数的基本概念”中的范例2,信息科学与工程学院,第3章 函数,34,3.3 全局变量和局部变量
16、,变量由于定义位置的不同,在程序中的可见(可被使用)性也随之不同3.3.1 变量的存储机制与C+的内存布局3.3.2 全局变量3.3.3 局部变量,信息科学与工程学院,第3章 函数,35,3.3.1 变量的存储机制与C+的内存布局,程序运行时内存空间的分配,信息科学与工程学院,第3章 函数,36,存储区域说明代码区:存放程序代码,即程序中各个函数的代码块全局数据区:存放全局数据和静态数据(分配该区时内存全部清零,结果变量的所有字节自动初始化为零)栈区:存放局部变量,如函数中的变量等(分配栈区时不处理内存,即变量取随机值)自由存储区(堆):存放与指针相关的动态数据(分配自由存储区时不处理内存),
17、信息科学与工程学院,第3章 函数,37,3.3.1 变量的存储机制与C+的内存布局,3.3.2 全局变量,全局变量:在所有函数之外定义的变量全局变量可定义在程序开头,也可定义在任何位置该全局变量在定义处之后的任何位置都是可以访问的作为共享数据的一种常规方法,信息科学与工程学院,第3章 函数,38,3.3.2 全局变量,信息科学与工程学院,第3章 函数,39,【例3.5】多个函数使用全局变量的例子int n=100;void func()n*=2;int main()n*=2;coutnendl;func();coutnendl;return 0;,200400,3.3.3 局部变量,局部变量:
18、定义在函数内或块(例如:复合语句)内的变量存储在栈中动态分配是程序中使用最广泛的变量形式局部变量在程序运行到它所在的块时建立在栈中,该块执行完毕局部变量占有的空间即被释放,信息科学与工程学院,第3章 函数,40,3.3.3 局部变量,信息科学与工程学院,第3章 函数,41,【例3.6】使用局部变量的例子void fun()auto int t=5;/fun()中的局部变量,auto可省略coutfun()中的t=tendl;int main()float t=3.5;/main()函数中的局部变量coutmain()中的t=tendl;fun();coutmain()中的t=tendl;ret
19、urn 0;,3.4 函数调用机制,调用过程建立栈空间保护现场:主调函数运行状态和返回地址入栈为被调函数中的局部变量(包括形参)在栈上分配空间,并完成参数传递执行被调函数函数体释放被调函数中局部变量占用的栈空间恢复现场:取主调函数运行状态及返回地址,释放栈空间继续主调函数后续语句,信息科学与工程学院,第3章 函数,42,3.4 函数调用机制,信息科学与工程学院,第3章 函数,43,函数调用时内存变化的例子void fun1(int,int);void fun2(float);int main()int x=1,y=2;fun1(x,y);return 0;void fun1(int a,int
20、 b)float x=3;fun2(x);void fun2(float y)int x;,3.4 函数调用机制,任何一个函数的在执行过程中只能使用该函数中定义的局部变量函数执行完毕后其变量单元即被释放不同函数中的局部变量各自独立,即使变量名相同,这是由于它们各自占用不同的内存单元,信息科学与工程学院,第3章 函数,44,3.5 作用域与标示符的可见性,作用域:指标识符能够被使用的范围只在作用域内标识符才可被访问(称为可见)任何标识符作用域的起始点为标识符说明处局部域块域函数声明域文件域(全局域),信息科学与工程学院,第3章 函数,45,3.5 作用域与标示符的可见性,块域块指一对大括号()括
21、起来的程序段块中定义的标识符,作用域在块内复合语句中定义的标识符,作用域仅在该复合语句中由于函数也是一个块,因此函数中定义的标识符,包括形参和函数体中定义的局部变量,作用域都在该函数内,也称作函数域,信息科学与工程学院,第3章 函数,46,信息科学与工程学院,第3章 函数,47,【例3.7】输入两数,将两数按从大到小的顺序保存,并输出结果int main()int a,b;/函数内定义局部变量,具有函数域coutab;cout=a)/使a中保存大数,b中保存小数int t;/块中定义局部变量,具有块作用域t=a;a=b;b=t;/交换a和b的值couta=atb=bendl;return 0;
22、,couttendl;,3.5 作用域与标示符的可见性,块域局部变量具有局部作用域程序在不同块中可以使用同名变量。这些同名变量各自在自己的作用域中可见,在其他地方不可见,信息科学与工程学院,第3章 函数,48,信息科学与工程学院,第3章 函数,49,【例3.8】设计函数完成两数交换,并用主函数进行测试,看是否成功void swap(int,int);int main()int a,b;/main()中定义的a和b,作用域为main()coutab;cout调用前:实参a=a,b=bendl;swap(a,b);cout调用后:实参a=a,b=bendl;/发现交换失败return 0;void
23、 swap(int a,int b)/swap()中定义的a和b,作用域为swap()cout调用中endl;cout交换前:形参a=a,b=bendl;int t;t=a;a=b;b=t;/交换a和b的值cout交换后:形参a=a,b=bendl;,信息科学与工程学院,第3章 函数,50,【例3.8】设计函数完成两数交换,并用主函数进行测试,看是否成功,执行main(),调用swap(),执行swap(),返回main(),3.5 作用域与标示符的可见性,块域对于嵌套块中有同名局部变量,服从局部优先原则如果块内定义的局部变量与全局变量同名,块内仍然局部变量优先。但与块作用域不同的是,在块内可
24、以通过域运算符“:”访问同名的全局变量,信息科学与工程学院,第3章 函数,51,信息科学与工程学院,第3章 函数,52,【例3.9】显示同名变量可见性的例子int n=100;int main()int i=200,j=300;/输出全局变量n和外层局部变量i和jcout ntitjendl;int i=500,j=600,n;/内层块 n=i+j;/输出内层局部变量n、i和j cout ntitj endl;/输出全局变量n cout:nendl;n=i+j;/修改全局变量/输出全局变量n和外层局部变量i和jcout ntitj endl;return 0;,3.5 作用域与标示符的可见性,
25、函数声明域函数声明不是定义函数,在函数声明时,其中的形参作用域只在声明中,即作用域结束于右括号正是由于形参不能被程序的其他地方引用,所以通常只要声明形参个数和类型,形参名可省略,信息科学与工程学院,第3章 函数,53,3.5 作用域与标示符的可见性,文件作用域(也称全局作用域)定义在所有函数之外的标识符,具有文件作用域,作用域为从定义处到整个源文件结束文件中定义的全局变量和函数都具有文件作用域如果某个文件中说明了具有文件作用域的标识符,该文件又被另一个文件包含,则该标识符的作用域延伸到新的文件中,信息科学与工程学院,第3章 函数,54,3.6 存储类型与标示符的生命期,存储类型决定标识符的存储
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C+ 程序设计 函数 ppt 课件
链接地址:https://www.31ppt.com/p-2075919.html