C语言程序设计第四章函数和作用域.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《C语言程序设计第四章函数和作用域.ppt》由用户(三亚风情)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言程序设计 第四 函数 作用
- 资源描述:
-
1、第四章第四章 函数和作用域函数和作用域第四章第四章 第一节第一节 函数的定义和说明函数的定义和说明第四章第四章 一、一、函数的定义格式函数的定义格式 在C+中一个函数的定义格式函数的定义格式 :()函数的定义格式的几点说明:1、构成了函数的函数 头。2、用花括号括起来的组成了函数体。函 数体内无论多少条语句,花括号是不可省的。第四章第四章 3、是该函数的类型,即为该函数返回值的类 型,如果该函数没有返回值,只是一个过程调用,则 该函数的类型为 void,在C+程序中函数的类型不 可省略。4、是由0个、1个或多个参数组成,参数个 数为0,表示没有参数,但是圆括号不可省,多个参 数之间应用逗号分隔
2、;每个参数包括参数类型和参 数名。中的参数称为形式参数,简称形中的参数称为形式参数,简称形 参。参。形参在该函数被调用时才被初始化的。形参的 使用将使被调用函数可以从调用函数那里获取数 据。如果被调用函数不需要从调用函数那里获取数 据,则该函数参数为空。第四章第四章 二、二、函数的说明方法函数的说明方法:1 1、说明调用函数的方法说明调用函数的方法:();函数函数说明说明又又称为原型说明称为原型说明。其格式同于定义函数时的函数头,包括函数的类型、函数名和函数参数的个数及其对应的类型。原型说明与C语言中的简单说明是不同的。2 2、在在C+C+中函数的说明原则中函数的说明原则:如果一个函数定义在先
3、,调用在后,调用前可以不必说明;如果一个函数定义在后,调用在先,调用前则必须说明。例1、使用原型说明的例子第四章第四章#include void fun1(),fun2(),fun3();void main()cout”It is in main.endl;fun2();coutIt is back in main.endl;void fun1()coutIts in fun1.”endl;fun3();cout”Its back in fun1.”endl;第四章第四章 void fun2()coutIts in fun2.endl;funl();cout”Its back in fun2.
4、end1;void fun3()coutIts in fun3.endl;第四章第四章 第二节第二节 函数的调用函数的调用第四章第四章 一、函一、函数的值和类型数的值和类型:一个函数被定义以后就是为了将来对它调用,函数的调用是用一个表达式来表示的。函数函数调用格式调用格式:()、可以是0个、1个或多个实在参数,如 果是多个参数用逗号分隔。、每个参数是一个表达式。、实参的个数由形参决定,实参是用来在调用函 数时给形参初始化的,因此实参的个数和类型要 与形参的个数和类型一致,并且初始化时是按其 位置对应进行。第四章第四章 二、二、函数的调用函数的调用:1、函数的传值调用函数的传值调用:该调用同C语
5、言,分如下两种:(1 1)、传值调用:)、传值调用:传递变量本身值的传递变量本身值的函数函数调用调用。使用传值调用时,调用函数的实参用常量、变量 值或表达式,被调用函数的形参用变量名,实参将复 制副本形参。传值调用的特点是在被调用函数中形参的改变将传值调用的特点是在被调用函数中形参的改变将不影响调用函数的实参。不影响调用函数的实参。例2、一个传值调用的例子。第四章第四章#include void swap1(int x,int y)int temp;temp=x;x=y;/将y值赋予了x y=temp;/将x的值赋予y coutx=x,y=yendl;void main()int a(5),b
6、(9);swap1(a,b);couta=a,b=bendl;第四章第四章 (2 2)、传址调用:)、传址调用:传递变量传递变量地址地址值的值的函数函数调用调用。使用传址调用方式时,调用函数的实参用地址值,被调用函数的形参用指针,调用时将实参地址值传送给形参指针,即让指针指向实参变量或对象。在被调在被调用函数中可以通过改变形参指针所指向的实参变量值用函数中可以通过改变形参指针所指向的实参变量值来间接改变实参值。来间接改变实参值。传址调用的特点是可以通过改变形参所指向的变传址调用的特点是可以通过改变形参所指向的变量值来影响实参。量值来影响实参。例3、一个传址调用的例子。第四章第四章#includ
7、e void swap2(int*x,int*y)int temp;temp=*x;*x=*y;*y=temp;coutx=*x,y=*yendl;void main()int a(5),b(9);swap2(&a,&b);couta=a,b=bendl;第四章第四章 2 2、引用调用、引用调用:引用调用是C+中的一种函数调用方式,C语言中没有这种调用方式。引用调用时,调用函数的实参用变量名或对象名,被调用函数的形参用变量或对象的引用。而实际实际传送的是地址值传送的是地址值。在被调用函数中改变形参值,则调在被调用函数中改变形参值,则调用函数中实参值也被改变。用函数中实参值也被改变。引用调用具有
8、传址调用的特点,而在操作中又比引用调用具有传址调用的特点,而在操作中又比传址调用方便、直观。传址调用方便、直观。因此,在C+程序中多用引用调用。例4、一个引用调用的例子第四章第四章#include void swap3(int&x,int&y)int temp;temp=x;x=y;y=temp;coutx=x,y=yendl;void main()int a(5),b(9);swap3(a,b);couta=a,b=bendl;第四章第四章 三、三、函数的嵌套调用函数的嵌套调用:C+程序中允许函数的嵌套调用嵌套调用:函数调用函数调用是是逐级逐级调用,然后逐级返回的过程。调用,然后逐级返回的过
9、程。即在调用A函数的过程中,可以调用B函数,在调用B函数的过程中,还可以调用C函数。当C函数调用结束后,返回到B函数,当B函数调用结束后,再返回到A函数。四、函数的递归调用:四、函数的递归调用:递归调用:递归调用:是指在调用一个函数时,直接或间接是指在调用一个函数时,直接或间接地调用该函数自身的过程。地调用该函数自身的过程。直接递归调用:直接递归调用:是指在调用一个函数的过程中,是指在调用一个函数的过程中,又调用了该函数。又调用了该函数。第四章第四章 间接递归调用:间接递归调用:是指在调用一个函数的过程中调是指在调用一个函数的过程中调用了另一个函数,而在另一个函数中又调用了该函数。用了另一个函
10、数,而在另一个函数中又调用了该函数。1 1、递归调用的特点及方法:递归调用的特点及方法:(1 1)、特点:)、特点:使用递归调用方法编写的程序简洁清 晰,可读性强,但是程序在执行时占用的时间和空 间都比较大。(2 2)、方法)、方法:将原有问题能够分解为一个新问题,而 新问题又用到原有问题的解法,这就出现了递归。实际中,有限的递归调用是有意义的,而无限的递 归调用是没有意义的。数学中求正整数阶乘的问题 就是典型的有限的递归调用的例子。第四章第四章 2 2、递归调用的过程:、递归调用的过程:具体可分为两个阶段:第一个阶段称为“递推递推”阶段。这一阶段将原有问题不断地分解为新的子问题,逐渐从未知的
11、向已知的方向推测,最终到达已知的条件,即递归结束条件,这时递推阶段结束。第二个阶段称为“回归回归”阶段。此阶段是从已知的阶段出发,按照“递推”的逆过程,逐一求值回归,最后到达递推的开始处,结束回归阶段,完成递归调用。如求正整数阶乘的问题。第四章第四章 第第三三节节 函数函数参数及内联函数参数及内联函数第四章第四章 一一、函数参数的求值顺序:、函数参数的求值顺序:当一个函数带有多个多个参数时,C+语言没有规定在函数调用时实参的求值顺序,而编译器根据对代码进行优化的需要自行规定对实参的求值顺序。因此应注注意意不同编译系统中,函数参数求值的顺序可能不同,当实参表达式中出现有副作用的运算符时,可能产生
12、二义性。二二、设置函数参数的默认值:、设置函数参数的默认值:在C+语言中,允许在函数的说明或定义时说明或定义时给一个或多个参数指定默认值。具体规则规则如下:第四章第四章 (1)、设置参数默认值时,要求从右向左设置,即要求 在一个指定了默认值的参数的右边不能出现没有指 定默认值的参数。(2)、调用设置了默认参数的函数时,对应实参如果 没有,则用默认值,如果存在,则用实参值。(3)、如果一个函数有说明出现时,设置参数默认值 应放在函数说明中。例5、一个将参数默认值设置在函数的说明中的例子 第四章第四章#includeint m(8);int add_ int(int x,int y=7,int z
13、=m);void main()int a(5),b(15),c;int s=add_int(a,b,c);coutsendl;int add _ int(int x,int y,int z)return x+y+z;运行结果:28第四章第四章 三、三、数组名可作为函数参数数组名可作为函数参数:数组作函数参数可以分为三种情况,这三种情况所采用的调用机制不同,但是结果相同。1 1、形参和实参都用数组形参和实参都用数组:调用函数的实参用数组名,被调用函数的形参用数组,这种调用的机制是形参和实参共用内存中的同一个数组。因此,在被调用函数中改变了数组中某个元素的值,对调用函数该数组的该元素值也被改变。例
14、6:#include int a8=1,3,5,7,9,11,13;void fun(int b,int n)for(int i=0;in-1;i+)第四章第四章 b7+=b i;void main()int m=8;fun(a,m);couta7endl;运行后结果为:492 2、形参和实参都用对应数组的指针形参和实参都用对应数组的指针:在C+中,数组名被规定为是一个指针,该指针便是指向该数组的首元素的指针。实际中,形参和实参一个用指针,另一个用数组也是可以的。在使用指针时可以用数组名,也可以用另外定义的指向数组的指针。第四章第四章 例7:#include int a8=1,3,5,7,9,
展开阅读全文