C+程序设计华中科技大学课件第三章_第1页
C+程序设计华中科技大学课件第三章_第2页
C+程序设计华中科技大学课件第三章_第3页
C+程序设计华中科技大学课件第三章_第4页
C+程序设计华中科技大学课件第三章_第5页
已阅读5页,还剩56页未读 继续免费阅读

下载本文档

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

文档简介

C+程序设计第三章,授课教师:李战izhanchunwh,2,本章内容,3,引例,编程计算输出33+4.63+433,doublep=1,x=3;intn=3;while(n-)p*=x;coutpendl;,33,?4.63,?xn,4,调用power(3.0,3),函数power(3.0,3),return27.0,主程序后续语句,doublepower(doublex,intn)/求x的n次幂doublep=1;while(n-)p*=x;returnp;intmain()intn=3;doublex1=3,x2=4.6,x3=43;doubles;s=power(x1,n)+power(x2,n)+power(x3,n);cout“s=sb)t=a;elset=b;returnt;,函数头,函数数据类型=返回值数据类型,7,3.1.2函数的定义,无参函数,/打印一个表头voidTableHead()cout*endl;cout*example*endl;cout*bc;area=TriangleArea(a,b,c);if(area=-1)cout(a,b,c)不能构成三角形!endl;elsecout三角形(a,b,c)面积为:areaab;coutab中较大数为max(a,b)endl;return0;,main()函数,调用max(2.5,4.7),函数max(2.5,4.7),return4.7,主程序后续语句,14,编写函数把华氏温度转化为摄氏温度,公式为:C=(F-32)5/9;在主函数中计算输出30、35、40、45、50、55、60华氏温度对应的摄氏温度对照表。某大桥按照车辆的类型收取过桥费用,自行车免费,摩托车2元,小汽车5元,大客车8元,大货车10元。请编写函数按照车辆的类型计算相应的过桥费用,在主函数中输入车辆的类型然后计算输出费用。,15,3.2函数的参数传递、返回值及函数声明,3.2.1函数的参数传递及传值调用3.2.2函数返回值3.2.3函数声明,16,【例3.2】实参和形参对应关系的示例。,调用power(4.6,3),函数power(4.6,3),return97.336,主程序后续语句,floatpower(floatx,intn)/求x的n次幂floatp=1;while(n-)p*=x;returnp;intmain()intn=3;floatx=4.6;charc=a;coutpower(x,n)=power(x,n)endl;coutpower(c,n)=power(c,n)endl;coutpower(n,x)=power(n,x)endl;return0;,17,【例3.2】实参和形参对应关系的示例。,调用power(a,3),函数power(97,3),return912673,主程序后续语句,floatpower(floatx,intn)/求x的n次幂floatp=1;while(n-)p*=x;returnp;intmain()intn=3;floatx=4.6;charc=a;coutpower(x,n)=power(x,n)endl;coutpower(c,n)=power(c,n)endl;coutpower(n,x)=power(n,x)endl;return0;,18,调用power(3,4.6),函数power(3,4),return81,主程序后续语句,floatpower(floatx,intn)/求x的n次幂floatp=1;while(n-)p*=x;returnp;intmain()intn=3;floatx=4.6;charc=a;coutpower(x,n)=power(x,n)endl;coutpower(c,n)=power(c,n)endl;coutpower(n,x)=power(n,x)endl;return0;,【例3.2】实参和形参对应关系的示例。,19,3.2.3函数声明,语法上对程序文件中函数的排列次序要求满足先定义后使用。对于函数,只要在调用之前作函数声明(FunctionDeclaration),则函数定义放在任何位置程序都能正确编译运行。,函数声明的引入:,函数声明的格式:,函数声明是一条以分号结束的语句:数据类型函数名(形式参数表);,20,例如【例3.3】中求三角形面积的函数声明为:floatTriangleArea(floata,floatb,floatc);或floatTriangleArea(float,float,float);但下面的函数原型是错误的:intTriangleArea(float,float,float);/错误,返回值类型不同floatTriangleArea(int,int,int);/错误,参数类型不同floatTriangleArea(float,float);/错误,参数个数不同,floatTriangleArea(floata,floatb,floatc)if(a+b=c)|(a+c=b)|(b+c=a)return-1;floats;s=(a+b+c)/2;returnsqrt(s*(s-a)*(s-b)*(s-c);,21,3.2.3函数声明,【例3.4】输出所有满足下列条件的正整数m:10m1000且m、m2、m3均为回文数。,分析:回文指左右对称的序列。如121、353等就是回文数。判断整数是否回文数用函数实现,其思想是将该数各位拆开后反向组成新的整数,如果该整数与原数相等则为回文数。,mm*mm*m*m111211331101102011030301111123211367631,运行结果:,22,boolpalindrome(int);/函数声明intmain()intm;coutsetw(10)msetw(20)m*m“setw(20)m*m*mendl;for(m=11;m0);for(j=0;ji;j+)n=n*10+digitj;return(n=m);,【例3.4】输出回文数,24,3.3全局变量和局部变量,3.3.2全局变量3.3.3局部变量,25,3.3.2全局变量,在所有函数之外定义的变量称为全局变量。,全局变量存放在全局数据区,因编译器自动将该区清为全0,如果用户在定义时不显式给出初始化值,则等效初始化为全0。,全局变量可定义在程序开头,也可定义在中间位置,该全局变量在定义处之后的任何位置都是可以访问的,称为可见的。,全局变量引入:,26,打印200,调用func(),函数func(),200*2=400,打印400,n=100,n=100*2=200,【例3.5】多个函数使用全局变量的例子。intn=100;voidfunc()n*=2;intmain()n*=2;coutnendl;func();coutnendl;return0;,27,3.3.3局部变量,定义在函数内或块内的变量称为局部变量。,程序中使用的绝大多数变量都是局部变量。,局部变量在程序运行到它所在的块时建立在栈中,该块执行完毕局部变量占有的空间即被释放。故亦称为自动变量。,局部变量在定义时可加修饰词auto,但通常省略。局部变量在定义时若未初始化,其值为随机数。,局部变量引入:,28,打印main()中的t=3.5,调用fun(),函数fun(),打印fun()中的t=5,打印main()中的t=3.5,t=5,voidfun()autointt=5;/fun()中的局部变量,auto可省略coutfun()中的t=tendl;intmain()floatt=3.5;/main()函数中的局部变量coutmain()中的t=tendl;fun();coutmain()中的t=tb;cout=a)intt;/具有块域t=a;a=b;b=t;/交换a,b的值couta=atb=bendl;return0;,上述程序若在最后一个cout语句处增加:couttendl;则编译时会提示错误,因为变量t的作用域只在if语句中,其它地方不可见。,3.5.1块域,33,由VC+运行,结果如下:输入两整数:35调用前:实参a=3,b=5调用中交换前:形参a=3,b=5交换后:形参a=5,b=3调用后:实参a=3,b=5交换失败,3.5.1块域,局部变量具有局部作用域,使得程序在不同块中可以使用同名变量。这些同名变量各自在自己的作用域中可见,在其它地方不可见,【例3.8】设计函数完成两数交换,用主函数进行测试。,34,200300,内i=500,内j=600,内n=500+600=1100,1100500600,100,200+300=500,500,500200300,外部i=200,外部j=300,【例3.9】显示同名变量可见性。intn=100;#includeusingnamespacestd;intmain()inti=200,j=300;coutntitjendl;/内部块inti=500,j=600,n;n=i+j;coutntitjendl;/输出局部变量ncout:nendl;/输出全局变量nn=i+j;/修改全局变量coutntitjendl;return0;,35,3.6存储类型与标识符的生命期,3.6.1存储类型3.6.2生命期,36,自动存储类型自动变量为用auto说明的变量,通常auto缺省。局部变量都是自动变量,生命期开始于块的执行,结束于块的结束,其原因是自动变量的空间分配在栈中,块开始执行时系统自动分配空间,块执行结束时系统自动释放空间。故自动变量的生命期和作用域是一致的。,3.6.1存储类型,37,3.6.1存储类型,静态存储类型static说明的变量称为静态变量。位置不同区别局部静态变量和全局静态变量,也称内部静态变量和外部静态变量。静态变量均存储在全局数据区,如果程序未显式给出初始化值,则等效初始化为全0。静态变量占有的空间要到整个程序执行结束才释放,故静态变量具有整个程序执行期间的生命期。,38,局部静态变量是定义在块中的静态变量,编译系统在全局数据区为其开辟空间并保存数据,如果显式给出初始化值,则在该块第一次执行时完成,且只进行一次。,【例3.10】自动变量与局部静态变量的区别,3.6.1存储类型,39,【例3.10】自动变量与局部静态变量的区别intst()staticintt=100;/局部静态变量t+;returnt;intat()intt=100;/自动变量t+;returnt;intmain()inti;for(i=0;i5;i+)coutat()t;coutendl;for(i=0;i5;i+)coutst()t;coutendl;return0;,1,2,3,4,5,101,101,101,101,101,3.6.1存储类型,40,1,2,101,3,4,5,102,103,104,105,【例3.10】自动变量与局部静态变量的区别intst()staticintt=100;/局部静态变量t+;returnt;intat()intt=100;/自动变量t+;returnt;intmain()inti;for(i=0;i5;i+)coutat()=t;coutendl;for(i=0;i5;i+)coutst()t;coutendl;return0;,3.6.1存储类型,41,3.7函数的递归调用,自己调用自己,42,可以看出是用阶乘定义阶乘,这种自己定义自己的方法称为递归定义。,递归的引入,递归是一种描述问题的方法,或称算法。递归的思想可以简单地描述为“自己调用自己”。例如用如下方法定义阶乘:,43,递归定义的阶乘函数:intfac(intn)inty;if(n=0|n=1)y=1;elsey=n*fac(n-1);returny;只要设计主函数调用阶乘函数,即可实现计算阶乘。,递归的引入,递归函数必须定义递归终止条件(Stoppingcondition),避免无穷递归(InfiniteRecursion)。,44,#includeintfac(intn)inty;coutnt;if(n=0|n=1)y=1;elsey=n*fac(n-1);coutyt;returny;intmain()coutn4!=fac(4)endl;returno;,n=4,cout4;y=4*fac(3);,fac(4)=,cout2;y=2*fac(1);,n=2,cout1;y=1;cout1;return1;,n=1,n=3,cout3;y=3*fac(2);,cout24;return24;,cout6;return6;,cout2;return2;,24,递归的引入,【例3.12】求4!,45,递归过程分析,递归函数的执行分为“递推”和“回归”两个过程这两个过程由递归终止条件控制,即逐层递推,直至递归终止条件,然后逐层回归。每次调用发生时都首先判断递归终止条件,46,3.8函数的一些高级议题,3.8.1函数重载3.8.2默认参数3.8.3内联函数,47,3.8.1函数重载,重载的引入C+中,如果需要定义几个功能相似,而参数类型不同的函数,那么这样的几个函数可以使用相同的函数名,这就是函数重载,48,因此在定义重载函数时必须保证参数类型不同,仅仅返回值类型不同是不行的。函数重载的好处在于,可以用相同的函数名来定义一组功能相同或类似的函数,程序的可读性增强。,3.8.1函数重载,重载匹配规则(1)如果有严格匹配的函数,就调用该函数;(2)参数内部转换后如果匹配,调用该函数;(3)通过用户定义的转换寻求匹配。,49,3.8.1函数重载,3+5=,调用sum(3,5),函数sum(3,5),return8,2.2+5.6=,调用sum(2.2,5.6),函数doublesum(2.2,5.6),return7.8,3.5+4+8=,调用sum(3.5,4,8),函数floatsum(3.5,4.0,8.0),return15.5,结束,8,7.8,15.5,intsum(inta,intb)returna+b;Doublesum(doublea,doubleb)returna+b;floatsum(floata,floatb,floatc)returna+b+c;intmain()cout3+

温馨提示

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

评论

0/150

提交评论