ImageVerifierCode 换一换
格式:PPTX , 页数:90 ,大小:373.79KB ,
资源ID:13900317      下载积分:8 金币
快捷注册下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

开通VIP
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.zixin.com.cn/docdown/13900317.html】到电脑端继续下载(重复下载【60天内】不扣币)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

开通VIP折扣优惠下载文档

            查看会员权益                  [ 下载后找不到文档?]

填表反馈(24小时):  下载求助     关注领币    退款申请

开具发票请登录PC端进行申请

   平台协调中心        【在线客服】        免费申请共赢上传

权利声明

1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前可先查看【教您几个在下载文档中可以更好的避免被坑】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时联系平台进行协调解决,联系【微信客服】、【QQ客服】,若有其他问题请点击或扫码反馈【服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【版权申诉】”,意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:0574-28810668;投诉电话:18658249818。

注意事项

本文(函数与编译预处理省公开课一等奖全国示范课微课金奖PPT课件.pptx)为本站上传会员【可****】主动上传,咨信网仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知咨信网(发送邮件至1219186828@qq.com、拔打电话4009-655-100或【 微信客服】、【 QQ客服】),核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载【60天内】不扣币。 服务填表

函数与编译预处理省公开课一等奖全国示范课微课金奖PPT课件.pptx

1、单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,第5章 函数与编译预处理,第1页,学习目标,掌握函数概念、定义和调用方法。,了解递归概念,并能利用递归方法处理一些实际问题。,了解变量作用域与生存期概念,能够了解全局变量、局部变量、静态变量概念和使用方法。,了解编译预处理概念。,了解宏定义、文件包含和条件编译概念,掌握它们格式和使用方法。,第2页,5.1 函数定义与调用,人们在求解一个复杂问题时候,通常采取,逐步分解、分而治之,方法。也就是把一个大问题分解为几个比较轻易求解小问题,然后分别求解。程序员在设计一个复杂应用程序时,往往也是把整个程序划分为若干

2、个功效较为单一程序模块,然后分别给予实现,最终再把全部程序模块象搭积木一样搭起来,这种在程序设计中分而治之策略,被称为,模块化程序设计,方法。,在C+中,这些模块就是一个个函数。,第3页,5.1 函数定义与调用,函数本质有两点:,函数由能完成特定任务独立程序代码块组成,如有必要,也可调用其它函数,来产生最终输出。,函数内部工作对程序其余部分是不可见。,C/C+是由函数组成,函数是C/C+基本模块。,第4页,5.1 函数定义与调用,一个程序必须有且只有一个,主函数,(main()函数),和若干个,其它函数,。C/C+从main()函数开始执行,由主函数调用其它函数,其它函数之间也能够相互调用。,

3、main(),fun2(),fun1(),fun3(),fun1_1(),fun2_1(),fun2_2(),图 函数调用层次关系,第5页,5.1 函数定义与调用,库函数,C/C+系统以提供函数,提供了丰富功效。多少随系统而定,有一部分对全部C/C+系统都有,格式也相同,称为,标准函数,,还有一部分与系统相关。使用说明:,A)资料 B)联机帮助,用户自定义函数,用户依据所需处理问题而编写,函数定义,是编写一段代码(并不执行),函数定义后就可使用它。称为,函数调用,第6页,5.1 函数定义与调用,函数定义普通形式:,返回类型 函数名(参数表列),语句系列return 适当类型数值,说明:,函数返

4、回值指函数返回值类型,也有称为:函数类型,函数返回值假如是 void,意为无值返回,函数返回值说明若没有,指函数返回整型数。也就是:,若函数返回整型类型数据,可省略函数返回值说明,不然不能省,若参数表空,称为无参函数,不然称为有参函数。,无参函数参数表可写成(void),或写成(),第7页,5.1 函数定义与调用,*,How do you do!,*,要求显示器输出:,#,include,#define NUM 11,void main(),int i;,for(i=0;iNUM;i+),cout*;,coutendl;,cout“How do you do!”endl;,for(i=0;iN

5、UM;i+),cout*;,coutendl;,#,include,#define NUM 11,void print(),int i;,for(i=0;iNUM;i+),cout*;,coutendl;,void main(),print();,cout“How do you do!”b)return a;,else return b;,void main(),int a,b,c,t;,cina,b,c;,t=max(a,b);,t=max(t,c);,couttendl;,coutmax(a,b+10)end;,函数定义,a,b 称为函数形式参数,普通称为形参,每个形参前有形参类型说明(不

6、能写成int a,b),形参之间用逗号隔开;,return,格式为:return 或 return,功效是马上结束函数,返回。,若有表示式,先计算表示式,然后带值返回,函数调用:(1)计算表示式值(该值称为实参)(2),转到函数首先值传递给对应形参,然后开始执行函数体,若从键盘输入:9 4 23,输出是:?,注意:形参加值参数标准上个数、类型应该相一致(特殊情况除外),第9页,调用power(4.6,3),函数power(4.6,3),return,97.336,主程序后续语句,n=3,x=4.6,c=a,【例】,说明实参和形参对应关系示例。,#include,#include,float p

7、ower(float x,int n),/,求xn次幂,float pow=1;,while(n-)pow*=x;,return pow;,void main(),int n=3;,float x=4.6;,char c=a;,coutpower(x,n)=power(x,n)endl;,coutpower(c,n)=power(c,n)endl;,coutpower(n,x)=power(n,x)endl;,第10页,调用power(,a,3),函数power(,a,3),return,912673,主程序后续语句,n=3,x=4.6,c=a,【,例,】,说明实参和形参对应关系示例。,#in

8、clude,#include,float power(float x,int n),/,求xn次幂,float pow=1;,while(n-)pow*=x;,return pow;,void main(),int n=3;,float x=4.6;,char c=a;,coutpower(x,n)=power(x,n)endl;,coutpower(c,n)=power(c,n)endl;,coutpower(n,x)=power(n,x)endl;,第11页,调用power(3,4.6),函数power(3,4.6),return,81,主程序后续语句,n=3,x=4.6,c=a,【,例,

9、说明实参和形参对应关系示例。,#include,#include,float power(float x,int n),/,求xn次幂,float pow=1;,while(n-)pow*=x;,return pow;,void main(),int n=3;,float x=4.6;,char c=a;,coutpower(x,n)=power(x,n)endl;,coutpower(c,n)=power(c,n)endl;,coutpower(n,x)=power(n,x)ab;,print(a,b);,t=max(a,b);,couttendl;,void print(int a,i

10、nt b),for(i=0;imax(a,b);i+),cout*;,couty)?x:y;,void print(int,int);,int max(int,int);,int max(int,int);,int max(int,int),void print(int,int);,函数原型,,函数若还没有定义,就先使用,就需要给出函数原型,此时只要提供函数返回值类型,函数名,形参类型即可。,第13页,5.2.3 函数值调用,在C/C+中,函数参数传递都是,值传递,#include,void change(int x,int y),int tmp;,tmp=y;,y=x;,x=tmp;,cou

11、tx=xy=yendl;,void main(),int x=3,y=4;,coutx=x x=yendl;,change(x,y);,coutx=x y=yendl;,第14页,5.2.3 函数值调用,第15页,5.2.3 函数值调用,在每次调用一个函数事件,系统内部产生一个栈架(栈:插入删除只允许在一端进行一个表),将函数执行结束后位置记下,然后依此计算实参表示式并将结果放在栈架中,函数内说明变量也在栈架中得到空间,函数在执行对应代码时,在栈架中取对应数据或变量。函数结束后,从栈架中取到返回位置,并退去本函数此次栈架。,第16页,void fun1(int,int);,void fun2(

12、float);,void main(),int x=1;y=2;,fun1(x,y);,void fun1(int a,int b),float x=3;,fun2(x);,void fun2(float y),int x;,x,栈顶,栈底,y,3,fun2(),fun1()运行状态及返回地址,x,3,b,2,a,1,fun1(),main()运行状态及返回地址,y,2,x,1,main(),操作系统运行状态及返回地址,第17页,#include,void change(int x,int y),int tmp;,tmp=y;,y=x;,x=tmp;,coutx=xy=yendl;,void

13、main(),int x=3,y=4;,coutx=x x=yendl;,change(x,y);,coutx=x y=y1,unsigned long fac(unsigned long n),if(n=1)return 1;,else return n*fac(n-1);,#include,void main(),unsigned long n;,cinn;,coutfac(n)endl;,第21页,5.3 函数嵌套与递归调用,递归是一个编程技术,并不是用于计算阶乘。用非递归方法计算阶乘效率更高,我们用递归来计算阶乘,是因为它递归调用易于实现和了解。,第22页,5.3 函数嵌套与递归调用,

14、注意:,编写递归函数时,一定注意要有,递归调用终止条件,,且每调用一次就向调用终止更靠近一步。这可确保递归调用能够正常结束,而不至于造成系统内存耗尽而瓦解。,递归函数总比功效相同非递归函数,慢,,因为每次调用函数时都有调用开销。任何用递归编写 函数都可使用循环结构代替,以消除递归。,第23页,Hanoi塔,hanoi(n,a,b,c)/n个盘a从移到c,允许利用中间杆是b,hanoi(n-1,a,c,b);,a c;,/cout”cendl;,hanoi(n-1,b,a,c);,当只有一个盘时,上述不成立。应直接从a,移到c,A B C,#include ,void hanoi(int n,c

15、har a,char b,char c),if(n=1)coutcendl;,else hanoi(n-1,a,c,b);,coutcn;,hanoi(n,A,B,C);,第24页,Hanoi塔,A B C,#include ,void hanoi(int n,char a,char b,char c),if(n=1)coutcendl;,else hanoi(n-1,a,c,b);,coutcendl;,hanoi(n-1,b,a,c);,hanoi(3,A,B,C);,void hanoi(3,A,B,C),if(n=1)coutcendl;,else hanoi(n-1,a,c,b);,

16、coutcendl;,hanoi(n-1,b,a,c);,void hanoi(3,A,B,C),hanoi(2,A,C,B);,A搬到C;,hanoi(2,B,A,C);,第25页,Hanoi塔,A B C,hanoi(3,A,B,C),hanoi(2,A,C,B);,A搬到C;,hanoi(2,B,A,C);,第26页,Hanoi塔,A B C,hanoi(3,A,B,C),hanoi(2,A,C,B);,A搬到C;,hanoi(2,B,A,C);,hanoi(2,A,C,B),hanoi(1,A,B,C);,A搬到B;,hanoi(1,C,A,B);,第27页,Hanoi塔,A B C,

17、hanoi(3,A,B,C),hanoi(2,A,C,B);,A搬到C;,hanoi(2,B,A,C);,hanoi(2,A,C,B),hanoi(1,A,B,C);,A搬到B;,hanoi(1,C,A,B);,A搬到C,第28页,Hanoi塔,A B C,hanoi(3,A,B,C),hanoi(2,A,C,B);,A搬到C;,hanoi(2,B,A,C);,hanoi(2,A,C,B),hanoi(1,A,B,C);,A搬到B;,hanoi(1,C,A,B);,A搬到C,第29页,Hanoi塔,A B C,hanoi(3,A,B,C),hanoi(2,A,C,B);,A搬到C;,hanoi

18、2,B,A,C);,hanoi(2,A,C,B),hanoi(1,A,B,C);,A搬到B;,hanoi(1,C,A,B);,A搬到C,第30页,Hanoi塔,A B C,hanoi(3,A,B,C),hanoi(2,A,C,B);,A搬到C;,hanoi(2,B,A,C);,hanoi(2,A,C,B),hanoi(1,A,B,C);,A搬到B;,hanoi(1,C,A,B);,第31页,Hanoi塔,A B C,hanoi(3,A,B,C),hanoi(2,A,C,B);,A搬到C;,hanoi(2,B,A,C);,hanoi(2,A,C,B),hanoi(1,A,B,C);,A搬到B;

19、hanoi(1,C,A,B);,第32页,Hanoi塔,A B C,hanoi(3,A,B,C),hanoi(2,A,C,B);,A搬到C;,hanoi(2,B,A,C);,hanoi(2,A,C,B),hanoi(1,A,B,C);,A搬到B;,hanoi(1,C,A,B);,C搬到B,第33页,Hanoi塔,A B C,hanoi(3,A,B,C),hanoi(2,A,C,B);,A搬到C;,hanoi(2,B,A,C);,hanoi(2,A,C,B),hanoi(1,A,B,C);,A搬到B;,hanoi(1,C,A,B);,C搬到B,第34页,Hanoi塔,A B C,hanoi(3

20、A,B,C),hanoi(2,A,C,B);,A搬到C;,hanoi(2,B,A,C);,hanoi(2,A,C,B),hanoi(1,A,B,C);,A搬到B;,hanoi(1,C,A,B);,C搬到B,第35页,Hanoi塔,A B C,hanoi(3,A,B,C),hanoi(2,A,C,B);,A搬到C;,hanoi(2,B,A,C);,hanoi(2,A,C,B),hanoi(1,A,B,C);,A搬到B;,hanoi(1,C,A,B);,第36页,Hanoi塔,A B C,hanoi(3,A,B,C),hanoi(2,A,C,B);,A搬到C;,hanoi(2,B,A,C);,第

21、37页,Hanoi塔,A B C,hanoi(3,A,B,C),hanoi(2,A,C,B);,A搬到C;,hanoi(2,B,A,C);,第38页,Hanoi塔,A B C,hanoi(3,A,B,C),hanoi(2,A,C,B);,A搬到C;,hanoi(2,B,A,C);,hanoi(2,B,A,C),hanoi(1,B,C,A);,B搬到C;,hanoi(1,A,B,C);,第39页,Hanoi塔,A B C,hanoi(3,A,B,C),hanoi(2,A,C,B);,A搬到C;,hanoi(2,B,A,C);,hanoi(2,B,A,C),hanoi(1,B,C,A);,B搬到C

22、hanoi(1,A,B,C);,B搬到A,第40页,Hanoi塔,A B C,hanoi(3,A,B,C),hanoi(2,A,C,B);,A搬到C;,hanoi(2,B,A,C);,hanoi(2,B,A,C),hanoi(1,B,C,A);,B搬到C;,hanoi(1,A,B,C);,B搬到A,第41页,Hanoi塔,A B C,hanoi(3,A,B,C),hanoi(2,A,C,B);,A搬到C;,hanoi(2,B,A,C);,hanoi(2,B,A,C),hanoi(1,B,C,A);,B搬到C;,hanoi(1,A,B,C);,B搬到A,第42页,Hanoi塔,A B C,h

23、anoi(3,A,B,C),hanoi(2,A,C,B);,A搬到C;,hanoi(2,B,A,C);,hanoi(2,B,A,C),hanoi(1,B,C,A);,B搬到C;,hanoi(1,A,B,C);,第43页,Hanoi塔,A B C,hanoi(3,A,B,C),hanoi(2,A,C,B);,A搬到C;,hanoi(2,B,A,C);,hanoi(2,B,A,C),hanoi(1,B,C,A);,B搬到C;,hanoi(1,A,B,C);,第44页,Hanoi塔,A B C,hanoi(3,A,B,C),hanoi(2,A,C,B);,A搬到C;,hanoi(2,B,A,C);,

24、hanoi(2,B,A,C),hanoi(1,B,C,A);,B搬到C;,hanoi(1,A,B,C);,第45页,Hanoi塔,A B C,hanoi(3,A,B,C),hanoi(2,A,C,B);,A搬到C;,hanoi(2,B,A,C);,hanoi(2,B,A,C),hanoi(1,B,C,A);,B搬到C;,hanoi(1,A,B,C);,第46页,Hanoi塔,A B C,hanoi(3,A,B,C),hanoi(2,A,C,B);,A搬到C;,hanoi(2,B,A,C);,hanoi(2,B,A,C),hanoi(1,B,C,A);,B搬到C;,hanoi(1,A,B,C);

25、A搬到C,第47页,Hanoi塔,A B C,hanoi(3,A,B,C),hanoi(2,A,C,B);,A搬到C;,hanoi(2,B,A,C);,hanoi(2,B,A,C),hanoi(1,B,C,A);,B搬到C;,hanoi(1,A,B,C);,A搬到C,第48页,Hanoi塔,A B C,hanoi(3,A,B,C),hanoi(2,A,C,B);,A搬到C;,hanoi(2,B,A,C);,hanoi(2,B,A,C),hanoi(1,B,C,A);,B搬到C;,hanoi(1,A,B,C);,A搬到C,第49页,Hanoi塔,A B C,hanoi(3,A,B,C),han

26、oi(2,A,C,B);,A搬到C;,hanoi(2,B,A,C);,hanoi(2,B,A,C),hanoi(1,B,C,A);,B搬到C;,hanoi(1,A,B,C);,第50页,Hanoi塔,A B C,hanoi(3,A,B,C),hanoi(2,A,C,B);,A搬到C;,hanoi(2,B,A,C);,hanoi(2,B,A,C),hanoi(1,B,C,A);,B搬到C;,hanoi(1,A,B,C);,第51页,Hanoi塔,A B C,hanoi(3,A,B,C),hanoi(2,A,C,B);,A搬到C;,hanoi(2,B,A,C);,第52页,5.4 作用域和存放类,

27、在C+中,变量,有效范围,(称为变量作用域)和,被存放时间,(称为变量存放期或生存期)都是不一样。,假如按变量作用域来分类话,变量能够分为局部变量和全局变量;假如按变量存放期来分类话,变量能够分为外部变量、静态变量、自动变量、存放器变量。,第53页,5.4 作用域和存放类,在函数外说明变量,从定义变量位置开始到该程序文件结束,全部函数中均可使用,称为全局变量,全局变量初值是0,在块作用域内可经过作用域运算符“:”来使用与局部变量同名全局变量,#include,int i=100;/全局变量,void main(void),int i,j=50;/局部变量,i,=18;,:i,=:i+4;,j=

28、i+i;,cout:i=:in;,couti=in;coutj=jn;,文件,作用域规则:,第54页,打印,200,调用,func(),函数,func(),200*2,=400,打印,400,n=100,n=100*2,=200,全局变量例子。,#include,int n=100;,void func(),n*=2;,void main(),n*=2;,coutnendl;,func();,coutnendl;,5.4 作用域和存放类,第55页,打印,main()中,t=3.5,调用,fun(),函数,fun(),打印fun()中,t=5,打印main()中,t=3.5,t=3.5,t=5

29、局部变量例子,#include,void fun(),auto,int,t=5;,/fun()中局部变量,,auto,可省略,coutfun()中t=,t,endl;,void main(),float,t=3.5;,/main()函数中局部变量,coutmain()中t=,t,endl;,fun();,coutmain()中t=tendl;,5.4 作用域和存放类,第56页,5.4 作用域和存放类,标识符只能在说明它分程序内有效,在分程序之外是不可见。每个分程序能够有各自命名法,外层分程序说明名字假如在内层没有重新定义则在内层中继续有效;一旦内层中重新定义,则内层使用是内层重新定义了名字,

30、For语句中说明循环控制变量作用域为包含for语句那个内层块,块,作用域规则:,第57页,全局n=100,200 300,内 i=500,内 j=600,内n=500+600,=1100,1100 500 600,100,200+300=500,500,500 200 300,外部 i=200,外部 j=300,【例】,显示同名变量可见性。,int n=100;,#include,void main(),int i=200,j=300;,cout ntitjendl;,/,内部块,int i=500,j=600,n;,n=i+j;,cout ntitj endl;,/,输出局部变量,n,cou

31、t:nendl;/,输出全局变量,n,n=i+j;/,修改全局变量,cout ntitj endl;,第58页,5.4 作用域和存放类,在函数内说明函数原型仅对本函数有效,在函数外说明函数原型对本文件有效,函数,作用域规则:,第59页,5.4 作用域和存放类,存放类:要求了变量生存期,确定何时为变量分配内存空间及何时收回该空间,变量说明:标识符;,存放类能够是下面四种之一:,自动 auto,外部 extern,存放器 register,静态 static,第60页,5.4 作用域和存放类,C/C+存放区域分配图,堆区(动态数据),栈区(函数局部数据),全局数据区(全局、静态),代码区(程序代码

32、存放应用程序可执行代码,存放应用程序全局数据和静态数据,它们生命期与应用程序生命期一相同,即从应用程序开始运行时起至停顿运行时止。全局数据与静态数据内存空间均是在编译时分配,局部变量存放在栈中,它们内存空间是在程序运行时动态分配,C+中,对内存用new命令创建用delete命令释放。,第61页,5.4 作用域和存放类,自动类变量:,auto,按缺省规则,不加存放类说明为自动。,自动变量进入分程序分配空间(在栈顶),退出分程序,空间由系统回收(退栈),外部类变量:extern,在函数外面说明变量称外部变量。外部变量空间是固定(存放在全局变量区),在程序运行其间一直有效,在程序运行完成后由操作

33、系统回收。,若使用全局变量,先使用后定义,或,不在本文件中定义,,需要使用则要在使用前加 extern说明。,第62页,5.4 作用域和存放类,存放器 register,变量分配在存放器中,以加紧存放速度,当资源限制做不到时,系统视为auto,静态 static,静态变量在退出分程序后仍保留其值,但分程序外不可见。,静态变量初始化仅在分配空间时做一次,若不初始化则系统自动置为0.,第63页,5.4 作用域和存放类,局部静态变量和局部变量对比,#include,st(),static int t=100;/局部静态变量,t+;return t;,at(),int t=100;/自动变量,t+;r

34、eturn t;,void main(),int i;,for(i=0;i5;i+)coutat()t;,coutendl;,for(i=0;i5;i+)coutst()t;,coutendl;,i=0,t=100,1,2,3,4,5,101,101,101,101,101,第64页,5.4 作用域和存放类,i=0,t=100,1,2,101,3,4,5,102,103,104,105,局部静态变量和局部变量对比,#include,st(),static int t=100;/局部静态变量,t+;return t;,at(),int t=100;/自动变量,t+;return t;,void

35、main(),int i;,for(i=0;i5;i+)coutat()t;,coutendl;,for(i=0;i5;i+)coutst()t;,coutendl;,第65页,5.4 作用域和存放类,#include,int sum(int);,void main(),/a=5;,coutsum(4)endl;,coutsum(4)=0,void main(),char ch;,while(cin.get(ch),ch!=n),if(IsNumber(ch)cout是数字字符 endl;,else cout不是数字字符 endl;,因使用频度很高,说明为内联函数。,第69页,5.6 含有缺省

36、参数值函数,在C+中定义函数时,允许,给参数指定一个缺省值,。在调用函数时,若明确给出了这种实参值,则使用对应实参值;若没有给出对应实参,则使用缺省值(C无此功效)。,#include ,float fact(int n,=10,),float f=1;,for(int i=2;i=n;i+)f*=i;,return f;,void main(void),cout fact(5)n;,cout,fact(),n;,第70页,5.6 含有缺省参数值函数,注意:,必须在函数调用前指定缺省参数值,参数缺省值能够是,常量表示式,,表示式中使用量必须是常量,含有缺省值函数参数可有多个,但缺省参数必须位于

37、参数表中最右边,同一个含有缺省参数函数,在不一样地方调用时可使用不一样缺省参数值,第71页,输入长方体长度,宽度和高度,求出长方体体积。,#include,float v(float,float=10,float=20);,void main(void),float x,y,z;,coutxyz;,cout第一个长方体体积为:,v(x,y,z),n;,coutxy;,cout第二个长方体体积为:,v(x,y),n;,coutx;,cout第三个长方体体积为:,v(x),n;,float v(float a,float b,float c),return a*b*c;,第72页,例:对于同一个函

38、数,可在不一样作用域内作不一样原型说明,定义不一样缺省参数值。,float fact(int n=10);,.,void bb(void),float fact(int=20);,.,x=,fact(),;,.,float cc(void),float fact(int=30);,.,y=,fact(),;,.,float dd(void),.,z=,fact(),;,.,float fact(int n),float f=1;,for(int i=2;i=n;i+)f*=i;,return f;,参数缺省值为20,参数缺省值为30,参数缺省值为10,函数定义,函数原型说明,第73页,5.7

39、函数重载,函数重载是指,完成不一样功效函数能够含有相同函数名,。(C语言无此功效),调用重载函数时,C+编译器依据实参类型或实参个数来确定应该调用哪一个函数。,函数重载表达了C+语言“同一接口,各种实现方法”多态性机制。,注意:,重载函数参数个数或参数类型必须有不一样,仅返回值类型不一样时,不能定义为重载函数,第74页,5.7 函数重载,3+5,=,调用,sum(3,5),函数sum(3,5),return 8,2.2+5.6=,调用sum(2.2,5.6),函数double sum(2.2,5.6),return,7.8,3.5+4+8=,调用,sum(3.5,4,8),函数float su

40、m(3.5,4,8),return 15.5,结束,8,7.8,15.5,#include,sum(int a,int b),return a+b;,double sum(double a,double b),return a+b;,float sum(float a,float b,float c),return a+b+c;,void main(),cout3+5=sum(3,5),endl;,cout2.2+5.6=“,sum(2.2,5.6)endl;,cout3.5+4+8=“,sum(3.5,4,8)endl;,第75页,5.8 编译预处理,源程序,(文本文件),*.CPP,目标文

41、件,(二进制文件),*.OBJ,可执行文件,(二进制文件),*.EXE,库文件,(各种函数),编译,连接,编译预处理,编译预处理指令不属于C+语法范围,为了区分,系统要求每条编译预处理指令用#号开头,单独占用一行。,编译预处理指令可分为三种:包含文件、宏和条件编译。,第76页,5.8.1“包含文件”处理,编译预处理指令 include 指示将另一个源程序文件全部内容包含(插入)到当前源程序文件中,替换该 include 指令行。替换后结果写入暂时文件,当前源程序文件并不改变。,include 指令格式为:,#include “文件名”或#include ,file1.cpp,B,A,#incl

42、ude“file2.cpp,A,B,file1.cpp,file2.cpp,第77页,5.8.1“包含文件”处理,注意:,用双引号括起来文件名表示要从当前工作目录开始查找该文件(通常与源程序文件在同一个文件目录中);若找不到该文件,再到 C+编译器约定 include目录中查找该文件,若仍找不到则犯错。,用“”括起来文件名表示直接从C+编译器约定include目录中查找该文件,,若找不到则犯错。,头文件扩展名通常为.h,也能够使用.cpp。,一条include指令只能包含一个文件。若要包含n个文件,则要使用n条include指令。,包含文件能够嵌套,即在一个头文件中又包含其它头文件。,incl

43、ude指令可出现在源程序中任何一行位置,但通常放在源程序开头。,第78页,5.8.2 宏,编译预处理指令 define 用来定义宏。宏可分为有参数宏和无参数宏。,无参数宏,用一个指定标识符(即名字)来代表一个字符串,这个标识符称为宏名。,编译预处理时,凡是在程序中碰到这个标识符地方都用对应字符串来代替,这个过程称为“宏扩展”。,无参宏定义格式为:,#define 标识符 字符串,第79页,5.8.2 宏,#define PRICE 30,void main(void),int num,total;/*定义变量*/,num=10;/*变量赋值*/,total=num*PRICE;,couttot

44、al=totalendl;,编译前内部替换,作为,total=num*30,第80页,5.8.2 宏,注意:,宏名通惯用大写字母表示;,宏定义可出现在程序任何位置;,宏定义中可使用已定义宏名;,宏扩展时对宏对简单代换,不作任何计算;,可使用预处理命令#undef 宏名 终止宏名作用域;,当宏名出现在字符串中,作为字符处理;,同一作用域中,同一宏名只能定义一次。,第81页,5.8.2 宏,带参数宏定义,#define 宏名(参数表)字符串,#define S(a,b)a*b,.,area=S(x,y);/*area=x*y;*/,形式参数,实际参数,第82页,5.8.2 宏,按#define命令

45、行中指定字符串从左至右进行置换宏名,字符串中形参以对应实参代替,字符串中非形参字符保持不变。,#define S(a,b)a*b,area=S(3,2),3*2,第83页,area=3.1415926*a+2*a+2,实际效果,area=3.1415926*(a+2)*(a+2),实际效果,#define S(r)PI*r*r,换成:,#define S(r)PI*(r)*(r),5.8.2 宏,#define PI 3.1415926,#define S(r)PI*r*r,void main(),float a,area;,a=2;,area=S(a+2),;,coutr=aarea=are

46、aendl;,第84页,注意:,实参有可能是表示式时,在宏定义中要用括号将形参括起来。,在定义带参宏时,宏名与左圆括号之间不能有空格。,当一个宏定义多于一行时,在按换行符(Enter键)之前,必须先使用转义字符“”。,宏与函数定义形式不一样。宏定义中只列出形参名,不说明形参类型。,宏调用时,不对参数作任何计算,只作简单替换。,宏调用时,不对参数作任何检验。,宏没有返回值概念。,屡次调用同一个宏,经宏替换后,会增加程序长度。,第85页,5.8.3 条件编译,#define DEBUG,void main(),int a=14,b=15,c;,c=a/b;,#ifdef DEBUG,cout“a=

47、a;,cout b=bendl;,#endif,coutc=cendl;,void main(),int a=14,b=15,c;,c=a/b;,cout“a=”a;,cout b=bendl;,coutc=cendl;,第86页,5.8.3 条件编译,void main(),int a=14,b=15,c;,c=a/b;,#ifdef DEBUG,cout“a=”a;,cout b=bendl;,#endif,coutc=cendl;,void main(),int a=14,b=15,c;,c=a/b;,coutc=cendl;,第87页,5.9 多文件组织,内部函数,类型标识符前加st

48、atic修饰词,外部函数,extern(缺省),多文件组织方式中,在一个文件中要调用在另一个程序文件中定义外部函数前,必须对被调用函数作原型说明,并在函数原型说明前面加上修饰词extern。,在定义函数时加说明符static,就成为静态函数。静态函数只能在定义它文件中使用。,第88页,5.9 多文件组织,假定程序包含两个源程序文件Ex5_11_1.cpp和Ex5_11_2.cpp,程序结构以下:,/*Ex5_11_1.cpp,由main()组成*/,#include,void fun2();,/外部函数申明,等价于extern void fun2();,int n;,/全局变量定义,void

49、main(),n=1;,fun2();,/fun2()定义在文件Ex5_11_2.cpp中,coutn=nendl;,/*Ex5_11_2.cpp,由fun2()组成*/,extern int n;,/外部变量申明,n定义在文件,Ex5_11_1.cpp中,void fun2(),/fun2()被文件Ex5_11_1.cpp中函数调用,n=3;,运行结果:n=3,第89页,5.9 多文件组织,编译,预编译,编译,预编译,预编译,编译,图 C+程序开发过程,file1.h,file1.cpp,file2.h,file2.cpp,filen.h,filen.cpp,暂时文件1,暂时文件2,暂时文件n,file1.obj,file2.obj,filen.obj,Filename.exe,.lib,C+标准类库,连接,运行,第90页,

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服