C语言程序设计函数和作用域.pptx
《C语言程序设计函数和作用域.pptx》由会员分享,可在线阅读,更多相关《C语言程序设计函数和作用域.pptx(49页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第四章 第一节 函数的定义和说明第1页/共49页第四章 一、函数的定义格式 在C+中一个函数的定义格式函数的定义格式 :()函数的定义格式的几点说明:1、构成了函数的函数 头。2、用花括号括起来的组成了函数体。函 数体内无论多少条语句,花括号是不可省的。第2页/共49页第四章 3、是该函数的类型,即为该函数返回值的类 型,如果该函数没有返回值,只是一个过程调用,则 该函数的类型为 void,在C+程序中函数的类型不 可省略。4、是由0个、1个或多个参数组成,参数个 数为0,表示没有参数,但是圆括号不可省,多个参 数之间应用逗号分隔;每个参数包括参数类型和参 数名。中的参数称为形式参数,简称形中
2、的参数称为形式参数,简称形 参。参。形参在该函数被调用时才被初始化的。形参的 使用将使被调用函数可以从调用函数那里获取数 据。如果被调用函数不需要从调用函数那里获取数 据,则该函数参数为空。第3页/共49页第四章 二、函数的说明方法:1 1、说明调用函数的方法:();函数函数说明说明又又称为原型说明称为原型说明。其格式同于定义函数时的函数头,包括函数的类型、函数名和函数参数的个数及其对应的类型。原型说明与C语言中的简单说明是不同的。2 2、在C+C+中函数的说明原则:如果一个函数定义在先,调用在后,调用前可以不必说明;如果一个函数定义在后,调用在先,调用前则必须说明。例1、使用原型说明的例子第
3、4页/共49页第四章#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;第5页/共49页第四章 void fun2()coutIts in fun2.endl;funl();cout”Its back in fun2.end1;void fun3()coutIts in fun3.endl;第6页/共49
4、页第四章 第二节 函数的调用第7页/共49页第四章 一、函数的值和类型:一个函数被定义以后就是为了将来对它调用,函数的调用是用一个表达式来表示的。函数函数调用格式调用格式:()、可以是0个、1个或多个实在参数,如 果是多个参数用逗号分隔。、每个参数是一个表达式。、实参的个数由形参决定,实参是用来在调用函 数时给形参初始化的,因此实参的个数和类型要 与形参的个数和类型一致,并且初始化时是按其 位置对应进行。第8页/共49页第四章 二、函数的调用:1、函数的传值调用:该调用同C语言,分如下两种:(1 1)、传值调用:)、传值调用:传递变量本身值的传递变量本身值的函数函数调用调用。使用传值调用时,调
5、用函数的实参用常量、变量 值或表达式,被调用函数的形参用变量名,实参将复 制副本形参。传值调用的特点是在被调用函数中形参的改变传值调用的特点是在被调用函数中形参的改变将将不影响调用函数的实参。不影响调用函数的实参。例2、一个传值调用的例子。第9页/共49页第四章#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(9);swap1(a,b);couta=a,b=bendl;第10页/共49页第四章 (2 2)、传址调用:
6、)、传址调用:传递变量传递变量地址地址值的值的函数函数调用调用。使用传址调用方式时,调用函数的实参用地址值,被调用函数的形参用指针,调用时将实参地址值传送给形参指针,即让指针指向实参变量或对象。在被在被调调用函数中可以通过改变形参指针所指向的实参变量用函数中可以通过改变形参指针所指向的实参变量值值来间接改变实参值。来间接改变实参值。传址调用的特点是可以通过改变形参所指向的传址调用的特点是可以通过改变形参所指向的变变量值来影响实参。量值来影响实参。例3、一个传址调用的例子。第11页/共49页第四章#include void swap2(int*x,int*y)int temp;temp=*x;*
7、x=*y;*y=temp;coutx=*x,y=*yendl;void main()int a(5),b(9);swap2(&a,&b);couta=a,b=bendl;第12页/共49页第四章 2 2、引用调用:引用调用是C+中的一种函数调用方式,C语言中没有这种调用方式。引用调用时,调用函数的实参用变量名或对象名,被调用函数的形参用变量或对象的引用。而实实际际传送的是地址值传送的是地址值。在被调用函数中改变形参值,则在被调用函数中改变形参值,则调调用函数中实参值也被改变。用函数中实参值也被改变。引用调用具有传址调用的特点,而在操作中又引用调用具有传址调用的特点,而在操作中又比比传址调用方便
8、、直观。传址调用方便、直观。因此,在C+程序中多用引用调用。例4、一个引用调用的例子第13页/共49页第四章#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;第14页/共49页第四章 三、函数的嵌套调用:C+程序中允许函数的嵌套调用嵌套调用:函数调用函数调用是是逐级逐级调用,然后逐级返回的过程。调用,然后逐级返回的过程。即在调用A函数的过程中,可以调用B函数,在调用B函数的过程中,还可以调用C
9、函数。当C函数调用结束后,返回到B函数,当B函数调用结束后,再返回到A函数。四、函数的递归调用:递归调用:递归调用:是指在调用一个函数时,直接或间是指在调用一个函数时,直接或间接接地调用该函数自身的过程。地调用该函数自身的过程。直接递归调用:直接递归调用:是指在调用一个函数的过程中,是指在调用一个函数的过程中,又调用了该函数。又调用了该函数。第15页/共49页第四章 间接递归调用:间接递归调用:是指在调用一个函数的过程中是指在调用一个函数的过程中调调用了另一个函数,而在另一个函数中又调用了该函用了另一个函数,而在另一个函数中又调用了该函数。数。1 1、递归调用的特点及方法:(1 1)、特点:)
10、、特点:使用递归调用方法编写的程序简洁清 晰,可读性强,但是程序在执行时占用的时间和空 间都比较大。(2 2)、方法)、方法:将原有问题能够分解为一个新问题,而 新问题又用到原有问题的解法,这就出现了递归。实际中,有限的递归调用是有意义的,而无限的递 归调用是没有意义的。数学中求正整数阶乘的问题 就是典型的有限的递归调用的例子。第16页/共49页第四章 2 2、递归调用的过程:具体可分为两个阶段:第一个阶段称为“递推递推”阶段。这一阶段将原有问题不断地分解为新的子问题,逐渐从未知的向已知的方向推测,最终到达已知的条件,即递归结束条件,这时递推阶段结束。第二个阶段称为“回归回归”阶段。此阶段是从
11、已知的阶段出发,按照“递推”的逆过程,逐一求值回归,最后到达递推的开始处,结束回归阶段,完成递归调用。如求正整数阶乘的问题。第17页/共49页第四章 第三节 函数参数及内联函数第18页/共49页第四章 一、函数参数的求值顺序:当一个函数带有多个多个参数时,C+语言没有规定在函数调用时实参的求值顺序,而编译器根据对代码进行优化的需要自行规定对实参的求值顺序。因此应注注意意不同编译系统中,函数参数求值的顺序可能不同,当实参表达式中出现有副作用的运算符时,可能产生二义性。二、设置函数参数的默认值:在C+语言中,允许在函数的说明或定义时说明或定义时给一个或多个参数指定默认值。具体规则规则如下:第19页
12、/共49页第四章 (1)、设置参数默认值时,要求从右向左设置,即要求 在一个指定了默认值的参数的右边不能出现没有指 定默认值的参数。(2)、调用设置了默认参数的函数时,对应实参如果 没有,则用默认值,如果存在,则用实参值。(3)、如果一个函数有说明出现时,设置参数默认值 应放在函数说明中。例5、一个将参数默认值设置在函数的说明中的例子 第20页/共49页第四章#includeint m(8);int add_ int(int x,int y=7,int z=m);void main()int a(5),b(15),c;int s=add_int(a,b,c);coutsendl;int add
13、 _ int(int x,int y,int z)return x+y+z;运行结果:28第21页/共49页第四章 三、数组名可作为函数参数:数组作函数参数可以分为三种情况,这三种情况所采用的调用机制不同,但是结果相同。1 1、形参和实参都用数组形参和实参都用数组:调用函数的实参用数组名,被调用函数的形参用数组,这种调用的机制是形参和实参共用内存中的同一个数组。因此,在被调用函数中改变了数组中某个元素的值,对调用函数该数组的该元素值也被改变。例6:#include int a8=1,3,5,7,9,11,13;void fun(int b,int n)for(int i=0;in-1;i+)第
14、22页/共49页第四章 b7+=b i;void main()int m=8;fun(a,m);couta7endl;运行后结果为:492 2、形参和实参都用对应数组的指针形参和实参都用对应数组的指针:在C+中,数组名被规定为是一个指针,该指针便是指向该数组的首元素的指针。实际中,形参和实参一个用指针,另一个用数组也是可以的。在使用指针时可以用数组名,也可以用另外定义的指向数组的指针。第23页/共49页第四章 例7:#include int a8=1,3,5,7,9,11,13;void fun(int*pa,int n)for(int i=0;in-1;i+)*(pa+7)+=*(pa+i)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言程序设计 函数 作用
限制150内