C++程序设计 教学课件 ppt 作者 张桦 第5章 函数

上传人:E**** 文档编号:89188373 上传时间:2019-05-21 格式:PPT 页数:126 大小:1.44MB
返回 下载 相关 举报
C++程序设计 教学课件 ppt 作者 张桦 第5章 函数_第1页
第1页 / 共126页
C++程序设计 教学课件 ppt 作者 张桦 第5章 函数_第2页
第2页 / 共126页
C++程序设计 教学课件 ppt 作者 张桦 第5章 函数_第3页
第3页 / 共126页
C++程序设计 教学课件 ppt 作者 张桦 第5章 函数_第4页
第4页 / 共126页
C++程序设计 教学课件 ppt 作者 张桦 第5章 函数_第5页
第5页 / 共126页
点击查看更多>>
资源描述

《C++程序设计 教学课件 ppt 作者 张桦 第5章 函数》由会员分享,可在线阅读,更多相关《C++程序设计 教学课件 ppt 作者 张桦 第5章 函数(126页珍藏版)》请在金锄头文库上搜索。

1、C+程序设计,第5章 函数,5.1 函数概述 5.2 函数定义与声明 5.3 函数调用 5.4 函数的参数 5.5 函数的嵌套调用 5.6 函数的递归调用 5.7 内联函数 5.8 函数重载 5.9 指向函数的指针 5.10 作用域与生存期 5.11 函数存储类 5.12 本章小结,第5章 函数,5.1 函数概述,在程序设计中,常常将程序按功能划分为模块,模块由函数来实现,函数是一段实现某种功能的程序,这段程序相对独立,具有自己的输入和输出,可以被重复调用。,一个C+程序由一个或多个函数组成,且至少有一个main函数,整个程序从main函数开始执行,由main函数调用其它函数,调用结束后,流程

2、回到main函数,在main函数中结束整个程序的运行。,函数封装了一些程序代码和数据,实现了更高级的抽象,封装或隐藏了具体实现的细节问题,更利于实现代码重用与数据共享,同时,可以节省开发时间、增强程序的可靠性和便于维护等。,【例 5.1】求两个整数中的大者并输出结果。,程序一: #include using namespace std; int main( ) int a, b, max; cout a b; if (a b) max = a; else max = b; cout “The max is: “ max endl; return 0; ,5.1 函数概述,程序二: #inclu

3、de using namespace std; int main( ) int a, b, max; int maxvalue(int i, int j); / 函数声明 cout a b; max = maxvalue(a, b); / main是主调函数,maxvalue是被调函数 cout j) c = i; else c = j; return c; ,5.1 函数概述,5.1 函数概述,综上所述,归纳如下:,一个C+源程序文件可由一个或多个函数组成,一个源程序文件是一个编译单位,C+以源程序为单位进行编译,而不是以每一个函数为单位进行编译。当程序较大时,一般将函数或其它内容分别放到若

4、干个源文件中,由这些源文件组成一个C+程序;,C+程序从main函数开始执行,在main函数中调用其它函数,调用结束后,程序流程回到main函数,在main函数中结束整个程序的运行。,5.1 函数概述,在C+程序中,所有函数都是平行的,在一个函数中不能定义另一个函数,即函数不能嵌套定义,但函数可以嵌套调用。,从用户使用的角度看,函数分为两种:用户自定义函数和库函数,库函数由C+语言提供,用户可以直接使用这些函数。,5.2 函数定义与声明,函数必须先定义后使用,函数定义由函数头和函数体两部分组成,函数头包括类型说明符和函数名,函数体由实现函数功能的语句序列构成(包括变量定义)。函数的定义可分为无

5、参数定义和有参数定义。,无参函数的定义 ( ) / 局部变量定义和语句序列 ;,5.2.1 函数定义,各部分说明如下: 类型说明符:说明函数返回值的数据类型,可为任一基本数据类型或抽象数据类型。当函数返回值为整型时,类型说明符可省略,当函数没有返回值时,可定义其类型为void。 函数名:命名规则与标识符相同,函数名后有一个空括号,其中无参数,但括号不可少。 函数体:由一对花括号括起来的语句序列,一个函数的功能,由函数体中的语句序列完成,在函数体中定义的变量只在函数执行时才存在。,5.2.1 函数定义,void print ( ) cout “HelloWorld!“ endl; ,对于无参函数

6、的定义可有如下两种形式: 无形参但有返回值,例如 void getnum ( ) int x; cout x; return x; / 从键盘上获取一个整数 ,无形参也无返回值,例如 void message ( ) cout “HelloWorld!“ endl; ,5.2.1 函数定义,有参函数的定义 () / 局部变量定义和语句序列 ;,有参函数和无参函数区别在于形式参数表,形式参数表是用逗号分隔的变量声明列表,其中变量称为函数的形式参数,简称形参。形式参数用于接收主调函数传递给这个函数的数据,实现从主调函数到被调函数的数据传递。,5.2.1 函数定义,例如定义一个函数,用于求两个整数之

7、和,可写为: int sum ( int a, int b ) return a+b; ,5.2.1 函数定义,对于有参函数的定义可有如下两种形式:,有形参并有返回值,例如 int max( int m, int n) return (mn) ? m : n; ,有形参但无返回值,例如 void delay ( long m ) for(int i=1; i=m; i+); / 延迟一个时间片 ,5.2.1 函数定义,函数不能嵌套定义,在+中,所有的函数定义,包括main函数在内,都是平行的。在一个函数的函数体内,不能再定义另一个函数,即不能嵌套定义,不能出现如下形式的函数定义:,5.2.1

8、函数定义,函数定义只能写成如下形式:,5.2.1 函数定义,例如,下面的代码在main函数中非法嵌套了一个func( )函数定义: int main( ) void func( ) / 错误,函数不可以嵌套定义 ,5.2.2 函数声明, ();,C+语言要求函数在被调用之前,让编译器知道该函数的原型,使编译器可以根据函数原型检查调用的合法性,将参数转换成为适当的类型,保证参数的正确传递。 当函数定义在前、调用在后时,程序能被正确编译执行。而当函数调用在前、定义在后时,则应在主调函数中,增加被调函数的声明,声明指在调用该函数前,将一个函数的原型告诉编译器,声明不带有函数的细节信息。 函数声明包括

9、:类型说明符、函数名、参数个数及类型,格式如下:,5.2.2 函数声明,函数声明是一条语句,必须以分号结束,函数声明中的参数名对编译器没有意义,参数表中可省略参数的名称,只包含参数的类型,如: int Area(int, int); 但写出参数名也是正确的,此时参数名相当于注释。上面的函数原型声明与下面的等价: int Area(int length, int width);,5.2.2 函数声明,注意:函数原型声明和函数定义在返回类型、函数名和参数表上必须完全一致。如果不一致,就会发生编译错误。例如,下面的代码中,函数原型声明与函数定义中的形参类型不一致:,void fun(int, flo

10、at); / 函数原型声明 int main( ) int m; float n; fun(m, n); return 0; int fun(int a, int b) / 函数定义 ,5.2.2 函数声明,【例 5.2】判断某个字符是否为数字,#include using namespace std; int isDigit(char ch); / 函数原型声明 int main( ) char a; cout a; if (isDigit(a) = 1) cout = 0 ,5.3 函数调用,图5-1 函数之间的调用关系,一个C+程序包含一个main函数和若干其它函数,main函数是程序执

11、行的入口,它可以调用其它函数,但不允许被其它函数调用。其它函数都可以调用和被调用,图5-1示意了函数之间可能的调用关系。,5.3.1 函数调用的形式,有参函数调用的一般格式为: (); 无参函数调用的一般格式为: ( );,实际参数表是用逗号分隔的表达式列表,其中每一个表达式称为实际参数(简称实参),是函数调用时实际上使用的参数。在函数调用时,需要将实参的值传送给对应位置的形式参数(简称形参),因而要求实参与形参必须一一对应,而且类型匹配,即实参个数必须和形参个数相同(默认参数或可变数目参数情况例外),并且实参的位置、类型必须和对应的形参相匹配。 如果函数的形参列表为空,则实参列表也应为空,但

12、函数调用运算符( )不能省略。,#include #include using namespace std; float func(float a) float b; b = 5 * a * a + 3 * a + 1; return b; int main( ) float num1, num2, x = 1; num1 = sin(x); / 调用库函数 num2 = func(x); / 调用func函数 cout “sin(x) = “ num1 endl; cout “func(x) = “ num2 endl; return 0; ,【例 5.3】函数调用示例。,形 参,实 参,实

13、 参,5.3.1 函数调用的形式,图5-2 函数调用时的参数传递,函数调用时,实参与形参之间的参数传递如图5-2所示:,5.3.1 函数调用的形式,【例 5.4】编程实现计算任意一个数的平方与n次方,#include #include using namespace std; int pow1(int a) return a * a; / 计算n的p次方 int pow2(int n, int p) int r = 1; for(int i = 0; i p; i+) r *= n; return r; ,int main( ) int num = 0; int power = 0; cout

14、 num; cout power; cout num “ 平方:“ pow1(num) endl; cout num “的“ power “次方:“ pow2(num, power) endl; return 0; ,5.3.1 函数调用的形式,根据函数在程序中出现的位置,函数的调用方式可分为以下三种:,语句调用:把函数调用作为一个语句,通常用于不返回值的函数调用,例如: print( );,表达式调用:函数调用出现在表达式中,要求函数返回一个确定的值参加表达式的运算,例如: a = max(m, n) * 3;,参数调用:函数作为一个函数的实参被调用,例如: m = min(a, min(b

15、, c);,5.3.2 函数的返回值,被调函数通过return语句向主调函数返回的值称为函数的返回值。return语句是函数执行的最后一个操作,其意义是:使流程返回到主调函数,宣告函数的一次执行终结,在调用期间所分配的变量单元被释放。,把函数值送到调用表达式中,格式: return ; 或 return (); 或 return;,5.3.2 函数的返回值,程序中,利用return total; 语句将前n项自然数之和返回给调用函数。,int sum( int n) int total = 0; for (int i=1; i=n; i+) total += I; return total;

16、,例如,定义函数计算前n项自然数之和。,5.3.3 函数的传值调用,1.参数传递,C+的函数调用过程就是对栈空间操作的过程,步骤如下: 建立被调函数的栈空间; 保护调用函数的运行状态和返回地址; 传递参数; 将控制转交被调函数。,5.3.3 函数的传值调用,传值调用的特点是:编译器将实参复制一个副本给形参,在被调用函数中,形参的改变只影响副本值,而不影响调用函数的实参值。,2.传值调用,图5-3 传值调用,【例 5.5】使用交换函数swap( ),将两个整型变量交换数据后输出。,#include using namespace std; void swap(int, int); int main( ) int a = 3, b = 4; cout “before swap : a=“ a “, b=“ b endl; swap(

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号