课件_chapter12.ppt

上传人:s****8 文档编号:68959618 上传时间:2022-12-30 格式:PPT 页数:43 大小:283.50KB
返回 下载 相关 举报
课件_chapter12.ppt_第1页
第1页 / 共43页
课件_chapter12.ppt_第2页
第2页 / 共43页
点击查看更多>>
资源描述

《课件_chapter12.ppt》由会员分享,可在线阅读,更多相关《课件_chapter12.ppt(43页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

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()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计算结果要返回主函数,故设一个变量resultn的阶乘可在一重循环中实现因阶乘的结果值很大,故设结果变量为长整数函数的调用例:求N的阶乘n!(续)int fac(int n)int result=1;if(n1)result*=n;n-;return result;函数的调用例:求N

5、的阶乘n!(续2)#include void main()int n;coutn;coutn!=fac(n)endl;函数的调用函数调用和返回的过程函数原型函数和变量一样,在使用之前要先说明。函数原型可省略的情况:“先定义,后引用”函数原型的一般形式:();例:求两数中的大数。#include int max(int x,int y);void main()coutab;coutThe maxium number is max(a,b)y?x:y;函数原型函数间的参数传递实参与形参有3种结合方式:值调用、地址调用和引用调用。形参:在参数表中声明的参数(变量)叫做函数的形式参数。实参:在调用函数

6、时,一般须为每一个形参给出其实际数据,即实际参数。值调用实参与形参变量之间数据的传递是按照“值传递”的方式进行的,即在调用时仅将实参的值赋给形参,在函数中对形参值的任何修改都不会影响到实参的值。值调用好处:减少了调用函数与被调用函数之间的数据依赖,增强了函数自身的独立性。缺点:被调用函数向调用函数传递的数据仅有一个返回值,有时显得不够用。引用调用 由于被调用函数向调用函数传递的数据仅有一个返回值,有时显得不够用。引用是一种特殊类型的变量,可以被认为是另一个变量的别名。通过引用名与通过被引用的变量名访问变量的效果是一样的。引用运算符“&”用来说明一个引用。例如int i,&refi=i;例:利用

7、引用编写用于交换函数swap()。void swap(int&x,int&y)int tmp=x;x =y;y =tmp;/测试函数 swap()用的主函数main()int a=1,b=2;cout Before exchange:a=a ,b=b endl;swap(a,b);cout After exchange:a=a ,b=b 0?x:-x;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

8、(x1)endl;cout|x2|=abs(x2)endl;cout|x3|=abs(x3)endl;局部变量和全局变量根据作用域的不同,可将程序中的变量分为局部变量和全局变量根据生存期的不同,可将程序中的变量分为静态变量和自动变量 局部变量是在函数或分程序中说明的变量,只能在本函数或分程序的范围内使用。全局变量说明于所有函数之外,可以为本源程序文件中位于该全局变量说明之后的所有函数共同使用。全局变量可以在各个函数之间建立数据传输通道,但滥用会破坏程序的模块化结构。如出现同名变量,遵循“地方保护主义”原则。局部变量和全局变量局部变量和全局变量int x;/说明全局变量int func1(int

9、 x)/函数func1()有一个名为x的参数 y=x;.int func2(int y)/函数func2()中说明了一个名为x的局部变量 int x;.void main()/在主函数中为全局变量x赋值.x=0;.内联函数 调用函数:断点现场保护、数据进栈、执行函数体、保存返回值、恢复现场和断点等,开销很大。内联函数适用于:函数体比较简单 被频繁调用 例:将例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)en

10、dl;内联函数内联函数结果:void main()cout a b;cout The maximum is b?a:b endl;带有缺省参数的函数 double func(double x,double y,int n=1000);则其参数n带有缺省参数值调用方式:a=func(b,c);a=func(b,c,2000);C+的库函数#include#include#include#include#include#include#include 函数模板 用来定义通用的函数,其作用类似函数重载,但其编码却要比函数重载简单得多。利用函数模板定义的函数叫做模板函数。定义一个模板函数的形式为:te

11、mplate ()其中中的模板参数的形式为class 函数模板例:定义一个求两数最大值的模板函数template T Max(T a,T b)return ab?a:b;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)自动变量和静态变量静态变量的生存期就是整个程序的运行期。在程序开始运行前就为其分配相应的存储空

12、间,在程序的整个运行期间一直占用,直到结束。自动变量的生存期是说明了自动变量的函数或分程序。它对存储空间的利用是动态的。其初值在每次为自动变量分配存储后都要重新设置。静态变量的使用例:静态变量的使用/统计调用函数func()的次数#include int func()static int count=0;return+count;void main()for(int i=0;i10;i+)coutfunc()endl;变量在存储区内分配示意图对用户来说,在程序中定义的变量是按符号名去应用的。呈现 在用户面前的是符 号名空间。为管理 方便,不同存储类 别的变量存于不同 的区域。静态变量区 存放全

13、 局变量;程序开始时分配单元,结束时释放。动态变量区 存放局部变量;只有在函数调用时才分配单元,函数结束后,自动释放。静态存储区静态存储区程序区程序区动态存储区动态存储区变量的生存期与作用域局部变量全局变量自动变量int x;静态变量static int x;int x;Developer Studio的跟踪调试功能 Step Into(快捷键:F11):跟踪Step Over(快捷键F10):单步执行Step Out(快捷键:Shift+F11):从函数体内运行到外Run To Cursor(快捷键:Ctrl+F10):从当前位置运行到编辑光标观察窗口(Watch)用于观察指定变量或表达式的

14、值变量窗口(Variables)用于观察断点处或其附近的变量的当前值。调用栈窗口(Call Stack)用于观察调用栈中还未返回的被调用函数列表。调试技术:续图:Developer Studio的Debug工具栏程序举例例1:打印100010000之间的回文数。所谓回文数是指其各位数字左右对称的整数,例如12321、789987、1等都是十进制回文数。例2:编写一个用于字符串比较的函数mystrcmp()。例1:算 法:判断一个数是否回文,可以用除以10取余的方法,从最低位开始,依次取出该数的各位数字,然后用最低位充从当最高位,按反序从新构造新的数,比较与原数是否相等,若相等,则原数是回文数。例2分析:设计了一个循环,从两个字符串的第一个字符开始比较,直到出现不同的字符,或者有一个字符串已经结束为止。从程序中可以 看 出,这 时 如 果 两 个 字 符 串 相 等,则 函 数 mystrcmp()返回0;如果字符串s1大于字符串s2,则返回一个正数;如果字符串s1小于字符串s2,则函数返回一个负数。上机练习题1.编写字符串查找mystrchr()。2.编写字符串反转函数mystrrev()。3.求数组中最大、最小元素的函数。4.使用递归算法编写求斐波那契数列的第n项FEB(n)的函数。

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 生活常识

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁