版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第三章 函数,函数的定义与使用 内联函数 带默认参数的函数 函数重载 使用C+系统函数,本章的主要内容。,第一节 函数的定义与使用,函数的分类 一、 从函数定义的角度看,可分为库函数和用户定义函数两种。 (1) 库函数 由系统提供,用户无须定义,只需在程序前包含有该函数原型的头文件即可调用。 在前面各章中用到printf、scanf 等函数均属此类。 (2) 用户定义函数 由用户按需要写的函数。不仅要在程序中定义函数本身, 而且在主调函数模块中还必须对该被调函数进行类型说明。,第一节 函数的定义与使用,二、从功能的角度分类。 (1) 有返回值函数 执行完后将向调用者返回一个执行结果, 称为函数
2、返回值。必须在函数定义和函数说明中明确返回值的类型。 (2) 无返回值函数 执行完成后不向调用者返回函数值。可指定它的返回为“空类型”, 空类型的说明符为“void”。,第一节 函数的定义与使用,三、 从主调函数和被调函数之间数据传送的角度看又可分为无参函数和有参函数两种。 (1).无参函数 函数定义、函数说明及函数调用中均不带参数。 主调函数和被调函数之间不进行参数传送。 (2) 有参函数 在函数定义及函数说明时都有参数,称为形式参数(简称形参)。在函数调用时也必须给出实际参数(简称为实参)。 进行函数调用时,主调函数将把实参的值传送给形参,供被调函数使用。,第一节 函数的定义与使用,函数的
3、定义 类型说明符 函数名() 声明部分 语句 ,例:int max( int x,int y) return(xy?x:y); void prt(char * strx) coutstr; ,1. 形参出现在函数定义中,在整个函数体内都可以使用,函数未被调用时,系统不给它分配存储空间,当函数被调用时系统才给分配储存空间,用来接受从主调函数传递过来的数据,当该函数调用结束后,则立即释放其储存空间。 2. 实参出现在主调函数中,即调用时写入函数括号中的参数,要求有确定的值。调用时将实参数据传递给对应的形参,进入被调函数后,实参变量不能使用。 3. 形参与实参的的关系:形参和实参的功能是作数据传递。
4、发生函数调用时(形、实结合), 主调函数把实参的值传送给被调函数的形参从而实现主调函数向被调函数的数据传送。,注意函数参数,第一节 函数的定义与使用,说明: 函数可以声明有某一种类型的返回值,也可以声明空返 回值(void),如不声明返回值,则默认类型是整形。 函数不允许嵌套定义,函数之间的关系是平行的。也就是说,在一个函数的函数体内, 不能再定义另一个函数。 函数之间允许相互调用,也允许嵌套调用。习惯上把调用者称为主调函数。 函数还可以自己调用自己,称为递归调用。,第一节 函数的定义与使用,3、函数调用 函数调用的一般形式 函数名(实际参数表),注意: 实参的类型,个数,顺序都应与形参一致。
5、 实参可以是常量、变量、表达式、函数等。必须有确定值。 实参和形参在数量上,类型上,顺序上应严格一致。 参数的传值方式有传值和传地址两种方式,例 编写一个求x的n次方的函数,#include using namespace std; doublepower (double x, int n); int main() cout 5 to the power 2 is power(5,2) endl; doublepower (double x, int n) double val = 1.0; while (n-) val = val*x; return(val); ,函数使用举例,1、缺省返回
6、类型 max(float x,float y) return(xy ?x:y); . Main() Coutmax(3.5,7.9)endl; ,结果是!,2、嵌套调用:被调函数在执行的过程中又调用其它函数,例 输入两个整数,求平方和,#include using namespace std; int main() int a,b; int fun1(int x,int y); cinab; couta、b的平方和: fun1(a,b)endl; int fun1(int x,int y) int fun2(int m); return (fun2(x)+fun2(y); int fun2(i
7、nt m) return (m*m); ,3、递归调用:函数直接或间接的调用自身 如求 n! 、 汉诺塔,递归过程的两个阶段: 递推: 4!=43! 3!=32! 2!=21! 1!=10! 0!=1 未知 已知 回归: 4!=43!=243!=32!=62!=21!=21!=10!=10!=1 未知 已知,例 求n!,分析:计算n!的公式如下: 这是一个递归形式的公式,应该用递归函数实现。,#include using namespace std; long fac(int n) long f; if (n0) coutn0,data error!endl; else if (n=0) f=
8、1; else f=fac(n-1)*n; return(f); ,int main() /long fac(int n); int n; long y; coutn; y=fac(n); coutn!=yendl; ,4 函数的参数传递(传值与引用),在函数被调用时才分配形参的存储单元。 实参可以是常量、变量或表达式。 实参类型必须与形参相符。 传递时是传递参数值,即单向传递。,值传递,在值传递的过程中,参数值是单向传递,一旦形参获得了值,便与实参脱离关系,此后形参的改变都不会影响到形参。,例 输入两 整数交换后输出,#include using namespace std; void Sw
9、ap(int a, int b); int main() int x(5), y(10); coutx=x y=yendl; Swap(x,y); coutx=x y=yendl; return 0; void Swap(int a, int b) int t; t=a; a=b; b=t; ,引用传递(引用做形参),引用的概念:引用就是给变量或对象取的一个别名。 int i,j;int 声明一个引用时,必须同时对它进行初始化,使它指向一个已存在的对象。 一旦一个引用被初始化后,就不能改为指向其它对象。 引用可以作为形参 void swap(int void Swap(int ,Swap(x,
10、y);,22,引用的优点,具有指针的威力。引用调用不仅具有传值方式函数调用语法的简单性和可读性,同时也具有指针的威力。 引用可以避免对象的拷贝。在对象的传递中,为避免拷贝对象的开销,可用引用的方式来传递对象。因为引用仅仅是一个别名,不是另一个对象,不占有空间。它随目标而产生,随目标的消亡而消亡。 引用可以避免原始数据被修改。在C+中通常用指针传递要修改的参数,用常引用传递不要修改的参数,常引用的定义,只要把const关键字放在参数声明的类型说明前即可。,引用于指针的区别:,操作方式不同。指针是间接访问,引用时直接访问。 指针本身是一个变量,声明时可以不初始化,而引用是别名,必须初始化,指针可以
11、指向其他变量,而引用一旦确立,就不能作为其他变量的别名。,第二节 内联函数,目的:提高程序运行效率 缺点:程序长度增大 编译时在调用处用函数体进行替换,节省了参数传递、控制转移等开销。 内联函数 格式 inline 函数声明 说明:是否真正是内联函数由编译器决定。 函数规模过大,编译器一般不作为内联函数处理 包含循环一般不当作内联函数,例 内联函数应用举例,#include using namespace std; inline double CalArea(double radius) return 3.14*radius*radius; int main() double r(3.0);
12、double area; area=CalArea(r); coutareaendl; return 0; ,第三节 带默认值参数的函数,定义:在函数定义时可以预先给出参数的默认值 int sum_calc(int n,int i=1) int sum=0;int j; for(j=i;j=n;j+)sum+=j; return sum; ,注意: 默认的形参按自右到左的顺序定义 在调用可以使用部分默认形参值,默认形参值的说明次序,默认形参值必须从右向左顺序声明,并且在默认形参值的右面不能有非默认形参值的参数。因为调用时实参取代形参是从左向右的顺序。 例: int add(int x,int
13、y=5,int z=6); /正确 int add(int x=1,int y=5,int z); /错误 int add(int x=1, int y, int z=6); /错误,带默认形参值的函数,例: int add(int a,int b=2,int c=3,int d=4,int e=5) return(a+b+c+d+e); ; void main() coutadd(1)endl; coutadd(1,9)endl; coutadd(1,9,8)endl; coutadd(1,9,8,7)endl; ,默认形参值与函数的调用位置,调用出现在函数体实现之前时,默认形参值必须在函数
14、原形中给出;而当调用出现在函数体实现之后时,默认形参值需在函数实现时给出。 例:,int add(int x=5,int y=6); int main() add(); /调用在实现前 int add(int x,int y) return x+y; ,int add(int x=5,int y=6) return x+y; int main() add(); /调用在实现后 ,带默认形参值的函数,默认形参值的作用域,在相同的作用域内,默认形参值的说明应保持唯一,但如果在不同的作用域内,允许说明不同的默认形参。 例: int add(int x=1,int y=2); int main() i
15、nt add(int x=3,int y=4); add(); /使用局部默认形参值(实现3+4) void fun(void) . add(); /使用全局默认形参值(实现1+2) ,带默认形参值的函数,第四节 函数重载,一、重载的含义:C+允许功能相近的函数在相同的作用域内以相同函数名声明,从而形成重载。方便使用,便于记忆。,如:,注意事项:,重载函数的形参必须不同:个数不同或类型不同。 编译程序将根据实参和形参的类型及个数的最佳匹配来选择调用哪一个函数。,不能构成重载,int add(int x,int y) return x+y; ,float add(float x,float y)
16、 return x-y; ,不要将不同功能的函数声明为重载函数,以免出现调用结果的误解、混淆。,NO!,例3-16重载函数应用举例,编写两个名为add的重载函数,分别实现两整数相加、两实数相加的功能。,函 数 重 载,#include using namespace std; int main() int m, n; double x, y; int add(int m, int n); double add(double x, double y); coutmn; coutinteger m+n=add(m,n)endl;,36,coutxy; coutreal number x+y= ad
17、d(x,y) endl; int add(int m, int n) return m+n; double add(double x, double y) return x+y; ,37,运行结果: Enter two integer: 3 5 integer 3+5=8 Enter two real number: 2.3 5.8 real number 2.3+5.8= 8.1,38,C+系统函数,C+的系统库中提供了几百个函数可供程序员使用。 例如:求平方根函数(sprt)、求绝对值函数(abs)等。 使用系统函数时要包含相应的头文件。 例如:math.h 或 cmath,使用C+系统函数,例3-17系统函数应用举例,题目: 从键盘输入一个角度值,求出该角度的正弦值、余弦值和正切值。 分析: 系统函数中提供了求正弦值、余弦值和正切值的函数:sin()、cos()、tan(),函数
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 延吉市事业单位招聘考试真题2025
- 三亚市消防救援局政府专职消防员招聘考试真题2025
- 大学基础及其健康-6
- 胸腔镜食管癌根治微创手术
- 非结核分枝杆菌病诊疗指南2026
- 高校技术转移办公室人员在技术成果对接中需要准备哪些材料
- 《铁路桥梁施工与维护(第2版)》课件 项目5 混凝土连续桥梁构造与施工
- 2026年上海春考语文试卷(含答案)
- 安全生产规章制度培训试卷(2篇)
- 2026毕业幼师面试题目及答案
- 2026江苏苏州市姑苏区机关事务管理中心招聘公益性岗位人员2人考试参考试题及答案解析
- 水利水电工程单元工程施工质量检验表与验收表(SLT631.5-2025)
- 供热系统发展趋势及供热新技术
- 运动治疗第九章呼吸训练
- 井口工具的使用及维护保养方法演示文稿
- 石油资源与国家安全【高效备课精研+知识精讲提升】 高二地理 教学课件(湘教版2019选择性必修3)
- 室外水泥砂浆抹灰工程施工工艺
- GB/T 5271.17-2010信息技术词汇第17部分:数据库
- 芸香目芸香科课件
- 诊断性研究证据的分析与评价课件
- 第七章-《蒙太奇段落的剪辑》课件
评论
0/150
提交评论