收藏 分销(赏)

C++程序设计.ppt

上传人:xrp****65 文档编号:13223914 上传时间:2026-02-05 格式:PPT 页数:345 大小:1.43MB 下载积分:10 金币
下载 相关 举报
C++程序设计.ppt_第1页
第1页 / 共345页
C++程序设计.ppt_第2页
第2页 / 共345页


点击查看更多>>
资源描述
C+,程序设计,计算机学院,张宏,第,1,章 概述,1、,C/C+,语言发展历史,60年代后期:麻省理工、贝尔实验室、通用电器,设计了第二代操作系统,MULTICS,,但进展缓慢,PDP-11的UNIX,1969年,在贝尔退出,MULTICS,研制项目后,,Ken Thompson,和,Dennis M.Ritchie,想申请经费买计算机从事操作系统研究,但多次申请得不到批准,项目无着落,,Thompson,在一台无人用的,PDP-7,上,重新摆弄原先在,MULTICS,项目上设计的“空间旅行”游戏。其工作吸引了,Dennis M.Ritchie,,为了使游戏能够在,PDP-7,上顺利运行,他们陆续开发了浮点运算软件包、显示驱动软件,设计了文件系统、实用程序、,shell,和汇编程序。,因此他们,重写了一个简化的,MULTICS,并加进了自己的一些思想(用汇编语言作为编程工具),被,Brian,Kerighan,开玩笑的称为,UNICS(,UN,I,plexed,I,nformation and,C,omputer,S,ervice),Dennis Ritchie,及所在部门的加入,完成两件事情,从,PDP-7,移植到,PDP-11/20,,后来又移植到,PDP-11/45,PDP-11/70,Thompson,决定用自己设计的语言“,B”,来重新写,UNIX,(,Brain Kernighan,开发),其后,,Ritchie,对,B,进行了改进,取名为,C,,接着又写了,C,的编译器,74年,,Thompson,和,Richie,发表了一篇关于,UNIX,的论文。,84年被授予图灵奖。,Brain Kernighan,Thompson,和,Richie,78年,Brain Kernighan Dennis Ritchie,出版了,程序设计语言,CK&R C 83,年,ANSI,开始制定,C,标准,87开始实施,,ANSI,随着计算机应用的复杂化,传统的软件设计方法显出了一些弊端,出现了面向对象的开发方法,80年代,Smalltalk。,83,年美国新泽西州贝尔实验室,Bjarne,Stroustrup,开发了,ith,classes(,的原形),Visual C+:,功能强大的软件开发工具可以开发任何规模和类型的软件,2,、,C,C+,的特点,C,语言是一种结构化的程序设计语言,语言本身简洁、使用灵活方便。,它既有高级语言的特点,又具有汇编语言的特点。运算符丰富,除了提供对数据的算术逻辑运算外,还提供了二进制的位运算。,程序的可移植性好。用,C,语言在某一种型号的计算机上开发的程序,基本上可以不作修改,而直接移植到其它型号和不同档次的计算机上运行。,程序的语法结构不够严密,程序设计的自由度大。,C+,是,C,语言的一个超集,大多数的,C,程序代码略作修改或不作修改就可在,C+,的集成环境下运行或调试。,C+,是一种面向对象的程序设计语言。它使得程序的各个模块的独立性更强,程序的可读性和可理解性更好,程序代码的结构性更加合理。这对于设计和调试一些大的软件,尤为重要。,用,C+,设计的程序,扩充性强。,C+,不是万能的,根据应用场合选定开发工具,3,、一个简单的,C+,程序,/*,C+,程序的基本结构*/,/,C+,程序的简单例子,#,include,void,main(void,),float r,area;/,说明两个变量:半径,r,和圆面积,area,cout,r;/,从键盘上输入半径变量,r,的值,area=3.1415926*r*r;/,计算圆面积,/*,输出半径和圆面积*,/,cout,半径,=r n;/,输出变量,r,的值,cout,圆面积,=area n;,主函数,函数体开始,函数体结束,输出流,在屏幕上打印引号内的字符串,分号,一条完整语句的结束符,包含文件,注释或说明,输入流,简单,C+,程序,高级语言编译过程,源程序,(,文本文件,),CPP,目标文件,(,二进制文件,),*.,OBJ,可执行文件,(,二进制文件,),*.,EXE,库文件,(各种函数),在,Visual C+IDE,集成环境中,可直接从源程序编译连接生成可执行程序,F7 build,编译,连接,compile,link,4、程序基本要求,正确性。,可读性和可理解性。,程序结构好,程序中有合适的注释,程序书写格式规范,可维护性。,构思好,程序简短,执行速度快。,重视课堂,讲解、演示、课堂练习,明确问题,列举尽可能多的问题,越具体越好。,“这是什么意思?”;“为什么这样?”;“如果这样改变一下,将会怎样?”,及时收集问题,重点解决。,勤于实践,分析问题;找到解决方案;纸面上编程实现;纸面上测试程序、并确定测试数据;,重视实践:上机测试、修改、再测试;不断总结、提高、完善。,实例分析,分析典型实例,通过研究实例掌握技能。,先读懂程序;反复修改、运行、观察;再模仿完成自己的设计。,牢记概念,熟练掌握。,途径与方法,成绩评判,成绩如何评判?,考勤与作业,包括上课、上机等,,20%,期末考试,闭卷笔试,,80%,第,2,章数据类型与变量,1,、关键字与标识符,关键字(保留字):,程序语言中专用的已有含义的词字,auto,bool,breakcase,catchcharclassconst,const_cast,continuedefaultdelete,do double,dynamic_cast,else,enum,explicitextern falsefloatforfriend,goto,ifinline,int,longmutablenamespacenewoperator privateregisterreturn,reinterpret_cast,shortsigned,sizeof,staticprotectedpublic,static_cast,struct,switchtemplatethisthrowtruetry,typedef,typeid,typename,unionunsignedusingvirtualvoidvolatilewhile,wchar_t,第,2,章数据类型与变量,1,、关键字与标识符,关键字(保留字):,程序语言中专用的已有含义的词字,标识符:,以字母或下划线开始的字母、数字、以及下划线,组成的字符序列。,标点符号:,#、(、)、,、:、;、.,分隔符号:,空白符、,Tab,键、运算符等,数据类型:,字符,char,,整型,int,,,浮点(单,双精度,float,double,),修饰:,signed,unsigned,long,short,可加在,char,或,int,前,第,2,章数据类型与变量,1,、关键字与标识符,标识符:,以字母或下划线开始的字母、数字、以及下划线,组成的字符序列。,注意:,1,),VC+,要求不超过,247,个字符。,2,)严格区分大小写。,3,)关键字不能作为标识符,。,第,2,章数据类型与变量,1,、关键字与标识符,标点符号:,#、(、)、,、:、;、.,分隔符号:,空白符、,Tab,键、运算符等,数据类型:,字符,char,,整型,int,,,浮点(单,双精度,float,double,),修饰:,signed,unsigned,long,short,可加在,char,或,int,前,第,2,章数据类型与变量,1,、关键字与标识符,数据类型:,字符,char,,整型,int,,,浮点(单,双精,float,double,),修饰:,signed,unsigned,long,short,可加在,char,或,int,前,C/C+,保证:,long,的精度不低于,int,int,的精度不低于,short;double,的精度不低于,float,布尔型,bool,(,C+,的基本类型),取值,true,(真,,1,),,,false,(假,,0,),常量:,1)整型,十进制:11 +1234 -23,八进制:012 05678 023 (以0开始),十六进制:0,x4 0 x1a 0XABCD10F (,以0,x,或0,X,开始),长整型:12,l 123L,无符号:12,U 2345u,0 x123ADUL ,十六进制的长整型无符号数,2)实型常量,0.12 3.0 0.0,.24 -78.,(后两种不提倡写),123,E12 0.23e-2 (,科学表示法),注意:指数部分不能为小数,E或,e,之前不能空,3),字符常量,用一对单引号括起来的字符,a A&,C/C+,中具有特殊意义的字符,转义字符,名称,a,响铃,b,退格,f,换页,n,换行,r,回车,t,水平制表,v,纵向制表,反斜杠,单引号,”,双引号,4),字符串常量,用双引号括起来的若干字符。,串长:,串中字符个数,“,This C+,Programing,”,长度:19,“”长度:0,“,abc,”,长度:4,“你好”长度:4,在,C/C+,中,系统自动在每个字符串后面加一个字节的全0(用0表示),所以,“,a,”,与,a,是有差别的。,“,a”:,字符串,a,用两个字节存储,a:,字符,a,,用一个字节存储,变量:,在语言中用来存储数据或中间的运算结果,使用前必须说明。,说明后就相当有了一个实体,但其值是不确定的。,说明:,类型 变量名列表;,int,a;,float,a,b,c,d,;,1,)可以在说明时给一个初值,int,a=4,b=5;,2,)也可以在以后用赋值语句给变量一个值,3,)可以通过输入语句从标准输入设备输入,#include,void main(),int,a,b,=8;,float x;,bool,b1=true,b2=false;,cout,ax;,cout,a=a,b=b ,x=xn;,cout,b1=b1 ,b2=b2,变量名1 变量名2 变量名,n;,功能:从控制台输入数据送到相应变量,,数据间用一个以上的空格或,Tab,符隔开,数据的转化由系统自动完成。,注意:输入以行为单位,只有按下,Enter,键后,数据才提供给计算机。,格式,cout,表达式1 表达式2.表达式,n;,功能:依此计算表达式的值后输出,输出时根据值类型自动显示正确的形式,对于字符型数据,如果为可显示的,ASCII,码,则显示,对应字符。,可以用强制类型转换,B,、,cout,控制台输出,#,include,void main(),int,a=3;,double b=3.1415;,char c1,c2;,c1=A;c2=65;,cout,a bn;,cout,c1+c2n;,cout,(int)c1 c2+1,endl,;,3 3.1415,A B,输出:,65 67,在表达处式可放格式控制符(函数),hex:,后,面的数据以十六进制输出,直到有新的指定为止,endl,:,换,行,setw,(,整数):置位宽(增加,iomanip.h,),右对齐,仅影响后一个输出,dec,:,后,面的数据以十进制输出,直到有新的指定为止,#,include,#include,void main(),int,x=10,y=20,u=30;,cout,setw(10)x setw(10)y setw(10)u,endl,;,cout,hexsetw(10)x setw(10)y setw(10)u,endl,;,cout,dec,setw(10)x setw(10)y setw(10)u,endl,;,命名常量,用关键字,const,来修饰的变量。例如:,const double pi=3.14159;,const float e=2.71828f;,const,是英文,constant,的缩写,表示不可变。,命名常量只能在说明时指定其值,一旦初始化后就不能用赋值语句再修改其值。,#include,void main(),double,r,s,;,const double PI=3.1415926;,cout,r;,s=r*r*PI;,cout,sn;,如果去掉,#include,void main(),double,r,s,;,const double PI=3.14;,cout,r;,PI=3.1415926;,s=r*r*PI;,cout,s,访问成员运算符,+-,后缀自增、自减,单目,右向左,2,new delete,动态分配或释放内存,单目,左向右,+-,前缀自增、自减,*,间接访问运算符,&,取地址,+-,正、负号,!,逻辑非,按位求反,sizeof,(),求对象,/,值或类型的字节长度,typeid,(),求表达式的类型名,(,type,)expr,或,type,(expr),强制类型转换,xxx_cast,C+,标准的强制类型转换,3,.*,*,成员指针运算符,双目,左向右,优先级,运 算 符,功能及说明,目数,结合性,4,*,/%,乘、除、取余,双目,左向右,5,+(,加,)-(,减,),加、减,双目,左向右,6,左移位、右移位,双目,左向右,7,=,小于、小于等于、大于、大于等于,双目,左向右,8,=!=,等于、不等于,双目,左向右,9,&,按位与,双目,左向右,10,按位异或,双目,左向右,11,|,按位或,双目,左向右,12,&,逻辑与,双目,左向右,13,|,逻辑或,双目,左向右,14,?:,条件运算符,三目,左向右,15,=+=-=*=/=%=,=&=|=,赋值运算符,双目,右向左,16,逗号运算符,双目,左向右,1、算术运算:,+、-(正号、负号,单目运算),+、-、*、/、%(双目运算),+、-、*、/按通常的算术规定。,注意:,对于除,若两个操作数都是整数,结果为整数(商部分),%的两个操作数必须都是整型数,结果为余数,通常称为取模运算。,2、关系运算符,、=、=、!=,运算结果是0或非0,,C,没有逻辑真、假值,规定:,C/C+,中:用0代表假,非0代表真,(许多情况下为1),3、逻辑运算,!、&、|,4、位运算,、&、|、,5、,sizeof,(),用于求给出的类型或变量在系统中存储时所需要的字节数,int,a,b,;,sizeof(a,),存储变量,a,所,需要的字节数,sizeof(int,),存储,int,型数据系统所需要的字节数,6,、表达式,用运算符、括号等将操作数连接起来的,能求出一个值的式子,1)算术表达式:能求出一个整数或实数,2)关系表达式:结果为真或假(0或非0),3)逻辑表达式:结果为真或假(0或非0),判断某年,year,是否为闰年,1)能被400整除,或,2,)能被4整除,但不能被100整除,year%400=0,year%4=0&year%100!=0,(,year%400=0)|(year%4=0&year%100!=0),当,c4,时,分别求以下表达式的值,(,c=1)&(c=3)&(c=5),(c=1)|(c=2)|(c=5),(c!=2)&(c!=4)&(c=1)&(c=5),1,0,0,例,1,:,例,2,:,4)赋值表达式:将一个表达式的结果赋给一个变量,变量=表达式,a=5+6*b,允许连续赋值,a=b=c=7*9,5,)逗号表达式,a=3,a=(3+4,5*6,2+1);,(,a=3*5,a*4),a+5,a=15,6,)条件运算符,?,:,ab?6+a:7,7,)复合赋值,+=、-=、*=、/=、%=、=、&=、|=、=,a+=5,等同于,a=a+5,a*=5+b,等同于,a=a*(5+b),不是,a=a*5+b,8,)不同数据类型的运算:,向高精度靠,赋值截高位,8 250 2,31 7 372(11 111 010),3,从,char,变为,int,符号扩展,变为:,11111111 11111111 11111111 11111010,32,bit(4 byte),运算:(,11111111 11111111 11111111 11111010)补=,11111111 11111111 11111111 11111010(内部表示),显示:由,C+,系统转换成原码,取反(11111111 11111111 11111111 11111010)+1,=-110,(,-6,),注意副作用问题:,signed char c1=250;,int,a;,a=c1;,cout,a,endl,;,9,)强制类型转换,通过强制类型转换可将某种类型的数据看成另一种类型数据,例:,int,a=5,c=2;,double d;,d=a/c;/d,中为2,d=(,double)a/c,;/d,中为2,.5,此时将,a,作为,double,型数据处理,在C+中,(,double)a,也可以写成,double(a,),在C中只允许前一种写法,1、表达式语句:表达式后加上分号,2、空语句:只有一个分号组成,3、自增、减语句:+、-,自增、减语句注意前缀与后缀,三、,表达式语句、空语句和自增、减语句,int,i=5,j=6,k,l;,i+;,k=i+;,l=+j;,cout,i j k l,endl,;,7 7 6 7,关于后置自增、自减的优先级问题,例:,int,i=3,j=4;,int,k=2+i+j+;,coutk=k;i=i;j=jendl;,执行结果,k=9;i=4;j=5,等价式:,int,k=2+(i+)+(j+);,例子及注意点:,1.,a=-3&0 xf,运算后,a,的值是:,A)-13,B)13,C)-3,D)3,2.,a=3,运算后,a,的值是:,-4,3.#,define MAXINT(1(,sizeof(int,)*8-1)-1,定义了所能表示的最大整数,无符号最大整数 0,4.,设有整型变量,a、b、c,其中,a,b,的值分别是10与20,在执行语句,c=,a+|b,+,后,a=,(1),b=,(2),c=,(3),对逻辑运算,一旦确定了真假,其后的逻辑运算不在执行,5.,int,a=1,b;,b=(,a+)+(a+)+(a,+);,b=?a=?,避免上述的写法,第,4,章 基本语句,说明语句:引入新名称,如变量说明语句。,表达式语句:一个表达式带一个分号,(,如赋值语句等,),。,选择语句:根据某个条件来执行不同的代码:,if,和,switch,循环语句,:,根据条件重复执行代码:,while,、,do-while,和,for,跳转语句:控制流跳转:,break,、,continue,、,goto,、,throw,空语句,:,单个分号,;,满足特殊语法需要,复合语句:用一对,括号括起的多条语句,与选择和循环配合,异常处理语句,try-catch,与,throw,配合,标号语句,:,与,goto,语句配合,结构化编程的基本结构,结构化程序设计有,3,种基本结构:,顺序结构、选择结构和循环结构。,每一种基本结构都由若干语句组成,每个结构都能在内部嵌套更小的多个结构。一个结构可以看成一个功能(模)块,每个模块的设计应遵循以下原则:,每个模块都应该是单入口、单出口。,每个模块都有机会执行,即不能让有的模块永远都得不到执行。,每个模块都不能有死循环,即不能只进不出。,顺序结构选择结构循环结构,1、选择语句,),if(,表达式)语句;,),if(,表达式)语句;,else,语句;,书写注意:,为增加程序书写的美观和可读性,,else,同,if,一般不写在一行上,,else,在垂直方向上对齐;,表达式在大部分情形下,是一个逻辑表达式;这里的语句,语句,语句可以是任何的语句,功能:计算表达式,若为真(非),,)执行语句,否则执行后续操作,)执行语句,否则执行,语句2,一、选择语句,2,、,if,的嵌套问题,B)b=1;,if(a=0),if(a,=0),b=0;,else b=-1;,对于,else,的配对规定:,else,同最近的,if,配对,当前面所述表达式又是,if,语句时,例,A)b=1;,if(a=,b?a:b,;,等同于条件语句:,注意:)条件表达式有一个结果值,通常和赋值结合,max=a,b?a:b,;,2),一个条件表达式一定可用一个条件语句代替,反之不一定,if(ab)max=a;,else max=b;,3),为增加程序可读性,程序员习惯为表达式加一对括号(),尽管不是必需的,max=(a,b)?a:b,;,)和可为任何合法的,C/C+,表达式,二、,exit,和,abort,C+,的库函数,其功能终止程序的执行,返回操作系统。,需要加入#,include,、exit(),函数,exit(),函数的格式为:,exit();,其中表达式的值只能是整型数。通常把表达式的值作为终止原因,按,UNIX,的传统,,exit(0),代表正常结束,其它比如,exit(1),代表错误结束,代表错误码。,2,abort(),格式为:,abort(),函数的使用格式为:,abort();,两者差异:,前者在结束程序前要做一系列的结束工作,比如关闭文件等,后者无此功能。,#,include,#include,#include,void main(),double,a,b,c,r1,r2;,cout,abc;,if(,b,*b-4*a*c,0),cout,No resultend;,exit(0);,r1=(-,b+sqrt(,b,*b-4*a*c,)/2/a;,r2=(-,b-sqrt(,b,*b-4*a*c,)/2/a;/(2*a),cout,r1=r1,r2=r2,endl,;,#,include,#include,#include,void main(),double a,b,c,r1,r2;,double delta;,cout,a,b,c,;,delta=b*b-4*a*c;,if(delta,0),cout,No result,endl,;,exit(0);,delta,=,sqrt(,delta,);,r1=(-b+,delta,)/2/a;,r2=(-b-,delta,)/2/a;,cout,r1=r1,r2=r2=90),cout,=80),cout,=70),cout,=60),cout,D,else,cout,E;,switch(),case :,case :;,.,case :;,default:,功能:,计算表达式的值,(此处值只能是整型,字符型或枚举型),用计算的值同 依此开始比较,相等则执行后面开始的语句;,若没有一个匹配,但有,default,,则执行,default,后的语句,否则什么也不做。,注意:1),default,的位置可在任何地方,但按惯例都放在后面,2)若干个入口可共用一段代码,)匹配某个常量后,执行相应的语句,直到,switch,语句的结束或遇到,break,语句,break,语句:在,switch,中的作用是结束,switch,),按编程序惯例,在最后一个分支后也加上,break;,switch(fn/10),case 10:,case 9:,cout,A;,break;,case,8:,cout,B;,break;,case 7:,cout,C;,break;,case 6:,cout,D;,break;,default:,cout,E;,break;,四、循环控制语句,例:求1到5的累加:,sum=1+2+3+4+5;,求1到20的累加:,sum=1+2+3+4+5+6,/,c/c,+,的续行符号,+7+8+9+10+11+12+13+14+15+16+17+18+19+20;,1、,while,循环,格式:,while(exp,),语句;,功能:若表达式,exp,不为0,则执行语句,sum=0;,i=1;,while(i,=100),sum+=i;,i+;,2、,do_while,循环,格式:,do,语句,while(exp,);,功能:执行语句,检测,exp,的值是否为0,是则终止循环,否则重复上述过程。,习惯上写成:,do,语句;,while(exp,);,sum=0;,i=1;,do,sum+=i;,i+;,while(i,=100);,3、,for,循环,格式:,for(,表达式1;表达式2;表达式3),语句;,功能:表达式1;,while(,表达式2),语句,表达式3;,;,注意:(1)表达式1,表达式2,表达式3,中任一个均可省,但其后的分号不能省,(2)表达式2省去,相当于表达式2永为非0,根据语句特点:,表达式1用来初始化,,有时会用一个逗号表达式;,表达方式2,用来进行循环结束测试;,表达方式3,用于修改循环变量;,在循环次数已知的情况下,多用,for,循环,for(sum,=0,i=1;i=100;i+),sum+=i;,4、,break,和,continue,break:,执行,break,立即结束循环。,continue:,结束本次循环,对,while,,do_while,进行表达式测试,对,for,执行表达式3,for(i,=1,sum=0;i1000;i+),if(i%3)continue;,/i%3!=0,sum+=i;,for(i,=1,sum=0;i1000;i+),if(i%3=0)break;,sum+=i;,3+6+9+,+999,1+2,5、,goto,语句及标号,goto,标号;转到标号处执行,标号名按标识符定义;标号定义:标号:,标号的定义可在,goto,前也可在后,但标号不能定义在本函数外,不能从分程序外转到块分程序内,而只能从分程序内转到分程序外,a1:,:,goto,a1:,:,kk,:,:,:,goto,kk,;,kk,:,goto,语句在程序中少用,现一般只用在出错处理时,从分程序内直接跳,出,以提高效率。,6、循环嵌套,在,while,do_while,for,循环中的语句又是循环语句时出现嵌套,层数没有限制,例:乘法九九表打印,1*1=1,1*2=2 2*2=4,1*3=3 2*3=6 3*3=9,1*4=4 2*4=8 3*4=12 4*4=16,1*5=5 2*5=10 3*5=15 4*5=20 5*5=25,1*6=6 2*6=12 3*6=18 4*6=24 5*6=30 6*6=36,1*7=7 2*7=14 3*7=21 4*7=28 5*7=35 6*7=42 7*7=49,1*8=8 2*8=16 3*8=24 4*8=32 5*8=40 6*8=48 7*8=56 8*8=64,1*9=9 2*9=18 3*9=27 4*9=36 5*9=45 6*9=54 7*9=63 8*9=72 9*9=81,#,include,#include,void main(),int,i,j,;,for(i=1;i=9;i+),for(j,=1;j=i;j+),cout,j*i=setw(2)j*i;,cout,endl,;,#,include,void main(),int,i,j,;,for(i,=0;i7;i+),for(j,=0;j7-i;j+),cout,;,for(j,=0;j=,i;j,+),cout,(,char)(a+i,);,cout,endl,;,第,5,章 函数与编译预处理,函数:用于完成某一特定的任务的一段程序。,函数 可有效的支持程序逐步求精的思想:,一个大问题总可以由一些子问题组成,而这些子问题又可分解为更小的一些问题组成。当一个子问题分解到足够简单可以用一段代码描述时,就将该段代码作为一个函数。这些函数组合在一起,互相配合完成一个子任务,这些小的若干函数组成一些更大的函数。最终解决原始问题。一个函数中的语句行数不宜太多。,C/C+,是由函数构成的,,函数是,C/C+,的基本模块,。,一个程序必须有且只有一个,main(),函数,,C/C+,从,main(),函数开始执行。,有关基本概念,(,1)库函数,C/C+,系统已提供的函数,提供了丰富的功能。多少随系统而定,有一部分对所有的,C/C+,系统都有,格式也相同,称为,标准函数,,还有一部分与系统有关。使用说明:,A),资料,B),联机帮助,(2)用户自定义函数,用户根据所需解决的问题而编写,函数定义,是编写的一段代码(并不执行),函数定义后就可使用它。称为,函数调用,函数定义的格式:,函数返回值说明 函数名(参数表),分程序,说明(1)函数返回值指函数返回的值的类型,也有称为:函数类型,(2)函数返回值如果是,void,,意为无值返回,(3)函数返回值说明若没有,指函数返回整型,数。也就是:,若函数返回整型类型的数据,,可省略函数返回值说明,否则不能省,(4)若参数表空,称为无参函数,否则称为有,参函数。,(5)无参函数参数表可写成(,void),或写成(),*,How do you do!,*,要求显示器输出:,#,include,#define NUM 11,void main(),int,i;,for(i,=0;i,NUM;i,+),cout,*;,cout,endl,;,cout,“How do you do!”,endl,;,for(i,=0;i,NUM;i,+),cout,*;,cout,endl,;,*,How do you do!,*,要求显示器输出:,#,include,#define NUM 11,void print(),int,i;,for(i=0;i,NUM;i,+),cout,*;,cout,endl,;,void main(),print();,cout,“How do you do!”,endl,;,print();,在书写时,为美观和易读,函数与函数间用若干空行隔开,在出现函数调用时,程序控制转到函数,函数执行结束后,回到,调用点(主函数),继续执行后续语句。,函数调用,函数定义,#,include,int,max(,int,a,int,b),if(a,b)return a;,else return b;,void main(),int,a,b,c,t;,cin,abc;,t=,max(a,b,);,t=,max(t,c,);,cout,t,endl,;,cout,max(a,b+10),endl,;,若从键盘输入:9 4 23,输出是:?,函数定义,,a,b,称为函数的形式参数,一般称为形参,每个形参前有形参的类型说明(不能写成,int,a,b,),形参之间用逗号隔开;,return,格式为:,return 或,return,,功能是立即结束函数,返回。,若有表达式,先计算表达式,然后带值返回,函数调用:(1)计算表达式值(该值称为实参)(2)转到函数首先值传递给对应的形参,然后开始执行函数体,注意:形参与值参数原则上个数、类型应该相一致(特殊情况除外),#,include,void main(),int,a,b,t,;,cin,ab;,print(a,b,);,t=,max(a,b,);,cout,t,endl,;,void,print(int,a,int,b),for(i,=0;i,max(a,b);i,+),cout,*;,cout,y)?x:y,;,void print(,int,int,);,int,max(int,int,);,int,max(,int,int,);,int,max(,int,int,),void print(,int,int,);,注意问题:,1,、,C/C+,语言中,所有函数都是平行独立的,无主次、相互包含之分,。,函数可以嵌套调用,不可嵌套定义。,2、,函数原型,,函数若还没有定义,就先使用,就需要给出函数原型,此时只要提供函数返回值类型,函数名,形参类型即可。,3、,在,C/C+,中,函数的参数传递都是值传递,#,include,void,change(int,x,int,y),int,tmp,;,tmp,=y;,y=x;,x=,tmp,;,cout,x=xy=y,endl,;,void main(),int,x=3,y=4;,cout,x=x x=y,endl,;,change(x,y,);,cout,x=x y=y,endl,;,例:,在每次调用一个函数时间,系统内部产生一个栈架(栈:插入删除只允许在一端进行的一种表),将函数执行结束后的位置记下,然后依此计算实参表达式并将结果放在栈架中,函数内说名的变量也在栈架中得到空间,函数在执行相应的代码时,在栈架中取对应的数据或变量。函数结束后,从栈架中取到返回的位置,并退去本函数此次的栈架。,#,include,void,change(int,x,int,y),int,tmp,;,tmp,=y;,y=x;,x=,tmp,;,cout,x=xy=y,endl,;,void main(),int,x=3,y=4;,cout,x=x x=y,endl,;,change(x,y,);,cout,x=x y=y,endl,;,main,的返回地址,3(,x),4(,y),main,栈架,change,的返回地址,3(,x),4(,y),子程序栈架,tmp,change,的返回地址,3(,x),4(,y),子程序栈架,4(,tmp,),change,的返回地址,3(,x),3(,y),子程序栈架,4(,tmp,),change,的返回地址,4(,x),3(,y),子程序栈架,4(,tmp,),小结:,(1)计算实在参数表中各表达式,(2)将表达式的值依此赋给各形式参数,(3)执行函数体,(4)当遇到,return,语句时,将控制返回到调用函数;,(5)当,return,语句中包含有表达式时,则计算表达式返回值,(6)当无,return,语句时,则执行到函数体末后返回调用函数,(7)参数以传值方式调用,函数的递归调用:,若在函数定义时,调用了自己,称递归调用,unsigned long,fact(unsigned,long n),if(n=1)return 1;,else return n*fact(n-1);,#,include,void main(),unsigned long n;,cin,n;,cout,fact(n,),endl,;,Hanoi,塔,hanoi(n,a,b,c,)/n,个盘,a,从移到,c,,允许利用的中间杆是,b,hanoi(n-1,a,c,b);,a c;,/,cout,”c,endl,;,hanoi(n-1,b,a,c);,当只有一个盘时,上述不成立。应直接从,a,移到,c,A B C,#,include ,void,hanoi(int,n,char,a,char,b,char,c),if(n,=1),cout,c,endl,;,else hanoi(n-1,a,c,b);,cout,cn;,hanoi(n,A,B,C,);,Hanoi,塔,A B C,#,include ,void,hanoi(int,n,char,a,char,b,char,c),if(n,=1),cout,c,endl,;,else hanoi(n-1,a,c,b);,cout,c,endl,;,hanoi(n-1,b,a,c);,hanoi(3,A,B,C);,void hanoi(3,A,B,C),if(n,=1),cout,c,endl,;,else hanoi(n-1,a,c,b);,cout,c,endl,;,hanoi(n-1,b,a,c);,void hanoi(3,A,B,C),hanoi(2,A,C,B);,A,搬到,C;,hanoi(2,B,A,C);,Hanoi,塔,A B C,hanoi(3,A,B,C),hanoi(2,A,C,B);,A,搬到,C;,hanoi(2,B,A,C);,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);,Hanoi,塔,A B C,hanoi(3,A,B,C),hanoi(2,A,C,B);,
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 百科休闲 > 其他

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

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

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

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

gongan.png浙公网安备33021202000488号   

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

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

客服