课件_chapter12.ppt_第1页
课件_chapter12.ppt_第2页
课件_chapter12.ppt_第3页
课件_chapter12.ppt_第4页
课件_chapter12.ppt_第5页
已阅读5页,还剩38页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、函数,1,定义函数 2、函数原型和函数, 调用 3、函数参数和按值传递 4、函数和数组 5、函数和二维数组 6、函数和c-风格字符串 7、函数和结构,8、函数和string对象 9、递归 10、函数指针 11、使用引用参数 12、默认参数 13、c+内联函数 14、函数重载 15、函数模板,函数的定义,函数是构成程序的基本模块,每个函数完成一个计算或执行一个特定的动作, 具有相对独立的功能。 C+提供三种类型的函数: main主函数 标准库函数 用户自定义函数,格式,函数必须先定义,后使用。/与变量类似 函数定义的一般格式: () ,函数名,应符合C+对标识符的规定。在函数名后面必须有一对圆括

2、弧,函数值类型说明,说明调用该函数后所得到的函数值类型,是通过函数体内部的return语句提供。 return语句提供的表达式的值的类型应与函数说明中的函数值类型一致。 如果某一函数确实没有返回值,则使用说明符void。 例如:主函数 void main() 注意这时函数中不能出现有返回值的return语句。,形式参数声明,表示将从主调函数中接收哪些类型的信息 例:double grav(double m1, double m2, double distance) 形式参数可以在函数体中引用,可以输入、输出、赋值或参与运算 参数说明格式为: , 例: int array,int count,注

3、意事项,函数类型说明可以省略,缺省是整型; 若没有返回值和参数,可使用说明符void, 例如,void func(void) 形参说明方式: 现代方式: max(int x,int y) 调用函数前,必须给实参赋值,函数体,函数体本身是一个分程序,由语句和其他分程序组成。 语句分为说明语句和执行语句两类。 对某具体变量来说,应先说明,后使用。,函数间的信息交换,主函数和子函数之间的信息交换是通过参数的结合和return语句来实现的。 数据流程是: 在主程序中,先给实参赋值 通过函数调用,将数据从主函数带到子函数 形参带值后,即可进行相应的数据处理 如果有结果值,通过return语句带回到主函数

4、,函数的调用,函数要先定义,后调用。 调用函数时要考虑到函数本身的参数; 调用标准库函数时,要包含相应的头文件 输入/输出函数 iostream.h 字符串函数 string.h 常用数学函数 math.h 调用自定义函数时,要定义相应的实参,并给这些实参赋值。 实参与形参必须一一对应: “类型一致、位置一致、个数一致”,例: 求N的阶乘n!,算法分析: 计算公式为: n!= n(n-1)321,且0!=1 在子函数中只需一个数据x,故设一个参数n 计算结果要返回主函数,故设一个变量result n的阶乘可在一重循环中实现 因阶乘的结果值很大,故设结果变量为长整数,函数的调用,例:求N的阶乘n

5、!(续),int fac(int n) int result=1; if(n1) result*=n; n-; return result; ,函数的调用,例:求N的阶乘n!(续2),#include void main() int n; coutn; coutn!=fac(n)endl; ,函数的调用,函数调用和返回的过程,函数原型,函数和变量一样,在使用之前要先说明。 函数原型可省略的情况: “先定义,后引用” 函数原型的一般形式: ();,例:求两数中的大数。,#include int max(int x,int y); void main() coutab; couty?x:y; ,函

6、数原型,函数间的参数传递,实参与形参有3种结合方式: 值调用、地址调用和引用调用。 形参:在参数表中声明的参数(变量)叫做函数的形式参数。 实参:在调用函数时,一般须为每一个形参给出其实际数据,即实际参数。 值调用 实参与形参变量之间数据的传递是按照“值传递”的方式进行的,即在调用时仅将实参的值赋给形参,在函数中对形参值的任何修改都不会影响到实参的值。,值调用,好处:减少了调用函数与被调用函数之间的数据依赖,增强了函数自身的独立性。 缺点:被调用函数向调用函数传递的数据仅有一个返回值,有时显得不够用。,引用调用,由于被调用函数向调用函数传递的数据仅有一个返回值,有时显得不够用。 引用是一种特殊

7、类型的变量,可以被认为是另一个变量的别名。 通过引用名与通过被引用的变量名访问变量的效果是一样的。 引用运算符“,例:利用引用编写用于交换函数swap( )。,void swap(int ,引用调用,函数重载,在VC+的函数库中,有4个功能相似的函数: int abs(int); double fabs(double); long labs(1ong); 函数重载:若干参数和返回值不同的函数共用一个函数名。 oop技术:封装性、继承性、多态性。 多态性:一个名字,多个人口”,或称“同一接口,多种方法。,函数重载,例:重载绝对值函数 int abs(int x) return x0?x:-x;

8、double abs(double x) return x0?x:-x; 1ong abs(1ong x) return x0?x:-x; void main() int x1 = 1;double x2 = 2.5;1ong x3 = 3L; cout |x1| = abs(x1) endl; cout |x2| = abs(x2) endl; cout |x3| = abs(x3) endl;,局部变量和全局变量,根据作用域的不同,可将程序中的变量分为 局部变量和全局变量 根据生存期的不同,可将程序中的变量分为 静态变量和自动变量,局部变量是在函数或分程序中说明的变量,只能在本函数或分程序

9、的范围内使用。 全局变量说明于所有函数之外,可以为本源程序文件中位于该全局变量说明之后的所有函数共同使用。 全局变量可以在各个函数之间建立数据传输通道,但滥用会破坏程序的模块化结构。 如出现同名变量,遵循“地方保护主义”原则。,局部变量和全局变量,局部变量和全局变量,int x;/ 说明全局变量 int func1(int x)/ 函数func1()有一个名为x的参数 y = x; . . int func2(int y) / 函数func2()中说明了一个名为x的局部变量 int x; . . void main() / 在主函数中为全局变量x赋值 . . x = 0; . . ,内联函数,

10、调用函数: 断点现场保护、数据进栈、执行函数体、保存返回值、恢复现场和断点等,开销很大。 内联函数适用于: 函数体比较简单 被频繁调用,例:将例5-3中的函数max()改写成内联函数 #include inline int max(int x,int y) return xy?x:y; void main() cout a b; cout The maximum is max(a,b) endl; ,内联函数,内联函数,结果: void main() cout a b; cout b?a:b endl; ,带有缺省参数的函数,double func(double x,double y,int

11、n=1000); 则其参数n带有缺省参数值 调用方式: a = func(b,c); a = func(b,c,2000);,C+的库函数,#include #include #include #include #include #include #include ,函数模板,用来定义通用的函数,其作用类似函数重载,但其编码却要比函数重载简单得多。 利用函数模板定义的函数叫做模板函数。定义一个模板函数的形式为: template () 其中中的模板参数的形式为class ,函数模板,例:定义一个求两数最大值的模板函数 template T Max(T a, T b) return ab?a:b

12、; void main() int i1 = 3, i2 = 5; float f1 = 3.3, f2 = 5.2; cout Type int: Max(i1, i2) endl; cout Type float: Max(f1, f2) endl; ,变量的存储类别,在C+中,存储类别分为4种: 自动(auto) 静态(static) 寄存器(register) 外部(extern),自动变量和静态变量,静态变量的生存期就是整个程序的运行期。在程序开始运行前就为其分配相应的存储空间,在程序的整个运行期间一直占用,直到结束。 自动变量的生存期是说明了自动变量的函数或分程序。它对存储空间的利

13、用是动态的。其初值在每次为自动变量分配存储后都要重新设置。,静态变量的使用,例:静态变量的使用 /统计调用函数func()的次数 #include int func() static int count=0; return +count; void main() for(int i=0;i10;i+) coutfunc()endl; ,变量在存储区内分配示意图,对用户来说,在程序中定义的变量是按符号名去应用的。呈现 在用户面前的是符 号名空间。为管理 方便,不同存储类 别的变量存于不同 的区域。 静态变量区 存放全 局变量;程序开始时分配单元,结束时释放。 动态变量区 存放局部变量;只有在函数

14、调用时才分配单元,函数结束后,自动释放。,变量的生存期与作用域,Developer Studio的跟踪调试功能,Step Into(快捷键:F11):跟踪 Step Over(快捷键F10):单步执行 Step Out(快捷键:Shift+F11):从函数体内运行到外 Run To Cursor(快捷键:Ctrl+F10):从当前位置运行到编辑光标 观察窗口(Watch)用于观察指定变量或表达式的值 变量窗口(Variables)用于观察断点处或其附近的变量的当前值。 调用栈窗口(Call Stack)用于观察调用栈中还未返回的被调用函数列表。,调试技术:续,图: Developer Studio的Debug工具栏,程序举例,例1:打印100010000之间的回文数。所谓回文数是指其各位数字左右对称的整数,例如12321、789987、1等都是十进制回文数。 例2:编写一个用于字符串比较的函数mystrcmp( )。,例1:,算 法: 判断一个数是否回文,可以用除以10取余的方法,从最低位开始,依次取出该数的各位数字,然后用最低位充从当最高位,按反序从新构造新的数,比较与原数是否相等,若相等,则原数是回文数。,例2,分析: 设计了一个循环

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论