《C++知识点(整理版)(共18页).doc》由会员分享,可在线阅读,更多相关《C++知识点(整理版)(共18页).doc(18页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、精选优质文档-倾情为你奉上一、C+标识符的命名规则1.所有标识符必须由一个字母(az或AZ)或下划线(_)开头;2.标识符的其它部分可以用字母、下划线或数字(09)组成;3.大小写字母表示不同意义,即代表不同的标识符,如前面的cout和Cout;二、如何正确地声明变量及其初始化2.C+中变量定义的格式:类型名变量名1,变量名2,变量名n;如:intnum1,num2;(2.1)在C+中,每个变量在使用前必须被定义,以便编译器检查变量使用的合法性。变量定义只是给变量分配相应的空间。(2.2)C+允许在定义变量的同时给变量赋初值。变量未被赋值前,值为未知格式:类型名变量名=初值;或者:类型名变量名
2、(初值);如:intcount=0;或intcount(0);都是定义整型变量count,并为它赋初值0。可以给被定义的变量中的一部分变量赋初值,如:intsum=0,count=0,num;(2.3)一旦定义了一个变量,可以将一个常量赋给该变量。变量赋值过程是“覆盖”过程,用新值去替换旧值如inta;a=123;或a=0x123;都是正确的(2.4)在C+中,定义变量时没有赋初值,然后直接引用该变量是危险的!3.数据类型(datatype):数据的编码方式、值域和可执行的操作。数据类型包括两个方面:数据的取值范围、可用的操作。C/C+中的数据类型分为两大类:基本数据类型:整型、浮点型、字符型
3、和布尔型构造数据类型:字符串、数组、结构、联合和枚举(3.1)整型(int):以补码形式存储。基本型int ;长整型long:long/longint(3.1.1)整数运算时要注意数据的表示范围。如整数用两个字节表示,正整数32767加1的结果为-32768。这称为整数运算的溢出,系统不检查这样的错误,程序员必须自己保证程序中不出现这样的错误。(3.1.2)在某些应用中,不可能出现负数,则整型数中有一半的数值范围是被浪费的。因此在C/C+中可以将所有的数都看成正整数,称为无符号数。无符号数的定义:在各种整数类型前加上关键词unsigned,变成unsignedint,unsignedshort
4、,unsignedlong(3.2)实型:以浮点表示,操作类似于整型,浮点数无法精确表示。(3.2.1)浮点类型的分类: 单精度float ;双精度double(3.3)字符型(char):存放一个字母或符号,占一个字节,存放的是字符的内码。可执行比较、连接等运算。具有双重属性:整数属性和字符属性,整数属性:字符类型即单字节的整数类,字符属性:数据值即为相应字符的Ascii码。字符类型名:char。可分为可打印字符:小写字母、大写字母、数字、标点符号、空格等;非打印字符:换行和报警字符或响铃等控制字符(3.4)布尔型(bool):只有“真”、“假”两个值。可执行判断运算。如boolflag=t
5、rue;(3.5)字符串(string):是类类型,用双引号“ ”表示,可执行字符串比较,连接应用时要加#include如stringstr=“dfhdsf”;三、如何声明常量4.常量:值的直接表示。如1、3、1.57、“A等,又称直接量。(4.1)整型常量可用十进制、八进制和十六进制表示:如十进制:123,-234;八进制:0123十六进制:0x123,0x3a2f(4.2)浮点数常量有两种表示法:(1)十进制表示:1.23,3.14;(2)科学计数法:尾数e指数123e2=123002.25e-3=0.00225;注意:尾数不能为空,指数必须为整数(4.3)字符常量:”a,“S,”2等用一
6、对单引号括起来的数据。字符串常量用双引号(4.4)命名常量:为值指定一个描述性的文字,增加程序的可读性。在C+语言中,用const修饰,如constdoublePI=3.14;见PI即知3.14。注意一般变量名需大写,如PI。二、算术运算符号及其运行规则a) 整数除整数b) % 求模运算5.算术运算符:+(加)-(减)*(乘)/(求商)%(求余)(5.1)“-”可为二元运算符,也可为一元运算符,其余所有的算术运算符都是二元运算符。(5.2)优先级:高*/%,低+-(5.3)整型与整型数运算,结果为整型,如5/2=2;整型与浮点数运算,结果为浮点数,如5/2.0=2.5;字符与整型数运算,结果为
7、整型;字符与浮点数运算,结果为浮点数。浮点数与浮点数运算,结果为浮点数。“%”运算符:取余,其两边都必须是整型数。6.关系运算符:,=,=,=,!=(6.1)优先级:高于赋值运算符,低于算术运算符。关系运算符内部:=和!=较低(6.2)关系表达式:用关系运算符将二个表达式连接起来称为关系表达式。关系表达式的结果是true或false。“等于”运算符是由两个等号组成。常见的错误是在比较相等时用一个等号。=(相等),=(赋值)7.逻辑运算符:&(and)|(or)!(not)(7.1)优先级:!高于关系运算符高于&高于|(7.2)逻辑表达式:由逻辑运算符连接起来的表达式,其结果为“真(true)”
8、或“假(false)”逻辑表达式在执行时,先处理左边。如左边已能决定此逻辑表达式的结果,则右边不执行。因此,在&逻辑表达式中,应把false可能性较大的条件放在左边,在|表达式中,应把true可能性较大的条件放在左边,这样可以减少程序执行的时间8赋值运算符:=的优先级比算术运算符低(8.1)赋值语句:把一个值赋给一个变量。如x=y+z;x=3.14;赋值语句的左边是变量,右边是表达式。(8.2)赋值表达式格式:=如x=x+2。作用:将右边的表达式的值存入左边的变量,整个表达式的值是右边的表达式的结果。赋值运算符是右结合的(8.3)左值(lvalue):在C+中,能出现在赋值运算符左边的表达式称
9、为左值右值(rvalue):赋值运算符右边的表达式的值(8.4)赋值语句:赋值表达式后面加上分号。(8.5)将赋值表达式作为更大的表达式的一部分。如:a=(x=6)+(y=7)等价于分别将x和y的值设为6和7,并将6和7相加,结果存于变量a(8.6)其他运算符与赋值运算符结合的运算符称为复合赋值运算符。格式:变量op=表达式;等价于:变量=变量op表达式;常用的复合赋值运算符有:+=,=,*=,/=,%=如:balance+=deposit;balance-=surcharge;x/=10;salary*=2;(8.7)赋值和运算时的自动类型转换,在进行赋值操作时,会发生类型转换,将取范围小的
10、类型转为取值范围大的类型是安全的反之是不安全的,如果大类型的值在小类型能容纳的范围之内,则平安无事强制类型转换:(类型名)(表达式);或类型名(表达式);如z=(double)x/y;静态转换(static_cast):用于编译器隐式执行的任何类型转换格式:转换类型(表达式)如z=static_cast(x)/y;1.单个分号组成的语句成为空语句2.用括起来的一组语句称为复合语句。在逻辑上看成一个语句。v复合语句可以放在任何单语句出现的地方。3.在复合语句中可以定义变量,但必须定义在最前面。4.逗号表达式语句格式:表达式1,表达式2,,表达式nv逗号运算符的优先级是所有运算符中最低的如a的初值
11、为0,则表达式a+=1,a+=2,a+=3,a+=4,a+=5的结果为155.前置+i,-i(先执行i+1或i-1,再使用i值)6.后置i+,i-(先使用i值,再执行i+1或i-1)If语句c) 形式d) 三种If语句的执行流程9.控制语句:改变程序中语句的执行次序。(9.1)if语句:两个分支:条件测试为true时所执行的程序块叫做then子句,条件为false时执行的语句叫做else子句。格式(1)if(条件测试)语句;即else语句可省略格式(2)if(条件测试)语句1;else语句2;eg.if(grade=60)cout=60)cout“passed”; elsecout=90)co
12、ut=80)cout=70)cout=60)cout“D”;elsecout”E”;(9.2)条件语句使用注意条件的结果值应该是true或false,它们是C+中bool类型的值 条件可为任意表达式,不一定是关系表达式。0为false,非0为true。if语句可以没有else子句。合理的缩排。 if语句的then子句和else子句含有if语句,称为if语句的嵌套。egif(x100)if(x90)语句1;elseif(x80)语句2;else语句3;else语句4;歧义性:如最后一个else跟哪个if配对.。egif(y!=0) if(x!=0) result=x/y;elsecout“err
13、or:y=0”y?x:y;循环语句e) 形式f) 三种循环语句的区别g) 三种循环语句的执行流程10.循环语句:一个完整的循环结构一般由四部分组成:(10.1)For语句:主要用于计数循环v格式:for(表达式1;表达式2;表达式3)语句;or语句快;可以理解为:for(循环变量赋初值;循环条件;循环变量增值)符合循环条件时的执行语句v循环体可以是复合语句或空语句。v循环里所有语句的一次完全执行称为一个循环周期。v执行过程:先执行表达式1,再执行判断表达式2,如果为true,执行一次循环体(即一个循环周期),接着执行表达式3,然后重新执行判断表达式2,若为true,又执行一次循环体,重复直至判
14、断表达式2为false,,最后跳出整个循环。若开始执行条件表示2为false,循环体一次也不执行。vFor循环的三个表达式可以是任意表达式。三个表达式都是可选的。v如果循环不需要任何初始化工作,则表达式1可以缺省。如循环前需要做多个初始化工作,可以将多个初始化工作组合成一个逗号表达式,作为表达式1。如for(int i=0,;i=10;+i);v表达式2也不一定是关系表达式。它可以是逻辑表达式,甚至可以是算术表达式。当表达式2是算术表达式时,只要表达式的值为非0,就执行循环体,表达式的值为0时退出循环。v如果表达式2省略,即不判断循环条件,循环将无终止地进行下去。无终止的循环称为“死循环”,最
15、简单的死循环是for(;);(10.2)While语句:与for循环等价,可相互代替。v格式:while(表达式)语句;or语句块;v执行过程:先计算出条件表达式的值。如果是false,循环终止;如果是true,整个循环体将被执行,而后又回到while语句的第一行,再次对条件进行检查,若为true,接着执行循环体,重复直到条件为false,,跳出整个循环。v用途:用于循环次数不定的循环。循环是否结束取决于某一个变量的值(标记控制重复)v在for和while语句之后一般没有分号,有分号表示循环体就是分号之前的内容(空循环体)(10.3)Do-While语句v格式:do语句;or语句块;while
16、(表达式);v执行过程:首先执行语句,然后判断表达式的值。如果表达式为0,继续向下执行,否则,再次执行语句,再次判断表达式的值v用途:用于至少执行一次的循环。注意后面有分号;11跳转语句:vbreak语句:跳出整个循环或switch语句。若有多重循环,跳出含break最近的循环体。vcontinue语句:跳出当前本次循环,接着判断是否执行下次循环周期。12几种典型的循环。注意格式及应用v输入验证循环:以下两种等价,右边一个常用cout请输入半径:;/提示输入 docoutradius;area=PI*radius*radiuswhile(radius0);/当radius02.while(tr
17、ue)/或while(1)for()coutnum;if(num=-1)break;/if(num=标志)跳出;sum+=num;/处理数据v查询循环累加循环p=0;charans;/用于用户响应for(inti=1;i=N;i+)coutradius;area=PI*radius*radius累乘循环:p=1coutarea=areaendl;for(inti=1;i=N;i+)coutdoyouagain?ans;/询问输入while(ans=Y|ans=y);/询问循环v编译(compiler):将高级语言的程序翻译成机器语言,分为解释执行,编译执行v连接(link):将目标程序与已有的
18、其它目标程序连接起来,产生一个可执行的程序v输出流是传给显示器的数据流,将变量或表达式的内容显示在显示器上格式输出一个变量的值:couta;输出多个变量的值:coutabc;输出表达式的结果:cout“Helloworldn”endl上述情况的组合:couta“+”b“=”a+b变量1变量2变量n;如cina;当程序执行到cin时会停下来等待用户的输入,后面一定是变量名,不可加引号用户可以输入数据,用回车()结束。当有多个输入数据时,一般用空白字符(空格、制表符和回车)分隔。如:a为整型,d为double,则对应于cinad,用户的输入可以为1213.2or12(tab键)13.2or1213
19、.2如何定义一个带默认值参数的函数如何调用一个带默认值参数的函数h) 参数使用默认值i) 参数不使用默认值函数v过程单元是程序的基本单位。在过程化的语言中,过程单元就是程序中某个模块的表示。在面向对象的语言中,过程单元说明对象对各种事件是如何响应的。v每个程序都必须有一个名为main的函数,它是程序的入口。主程序由一个或多个函数组成v程序主体(主函数main():主要包含如下模块:(definitioninput-proocess-ouput)(1)变量定义:为程序中的数据准备存储空间(declarationordefinition)(2)输入阶段:接受所需输入的信息。它由两部分组成:显示提示
20、信息和接收输入(input)(3)计算阶段:完成所需的计算(process)(4)输出阶段:输出计算的结果(output)v函数的主要构成:函数声明,函数定义,函数调用v可以把函数想象成数学中的函数。如f(x)=2x参数表是一组自变量x,返回类型是函数值的类型;函数声明就是设函数为f(x),函数定义(函数头+函数体)就是函数表达式如2x,函数调用就是带值计算如f(2)=22。v函数声明:类似于变量声明,所有函数在使用前必须被声明。又称函数的原型,功能:说明函数和外界的交流,反映函数调用的全部信息。包括下列内容:函数名,函数的参数类型,函数的返回类型它的形式为:返回类型函数名(参数表);返回类型
21、:是函数的输出值的类型,void函数没有返回值函数名:是函数的名字。程序可以通过函数名执行函数体的语句参数表:是函数的输入,无参数列表,可不写,但是括号必须有。参数表中的参数说明之间用“,”分开,每个参数说明可以是类型,也可以是类型后面再接一个参数名。如:intmax(int,int);intmax(inta,intb);intmain()v函数定义:函数头+函数体,相当于一个小程序。函数头:说明函数和外界的交流,与函数声明一样,参数表要有形参,void除外函数体:一系列独立的程序步骤;,必须定义在函数体最前面形式:返回类型函数名(参数表)/函数头codehere;/函数体Eg:intmax(
22、inta,intb)/函数定义if(ab)return(a);elsereturn(b);v函数调用形式:函数名(实际参数表);一般出现在主调函数中或其他调用函数中。eg.max(x,y);v函数执行过程:(1)在主程序中计算每个实际参数值。(2)调用时将实际参数的值赋给对应的形式参数。在赋值的过程中完成自动类型转换。(3)进入函数体依次执行函数体的每个语句,直到遇见return语句或函数体结束(4)计算return后面的表达式的值,如果表达式的值与函数的返回类型不一致,则完成类型的转换。(5)用函数的返回值置换函数,继续主程序的执行。Egintmax(inta,intb);/函数声明intm
23、ain()intx,y;cinxy;coutb)return(a);elsereturn(b);v注意:(1)形式参数和实际参数的个数(number)、排列次序(order)、类型(type)要完全相同。(2)实际参数可以是常量、变量、表达式,甚至是另一个函数调用(3)传递方式:值传递,执行函数调用时,将实参值传递给形参,并替换形参同名的实体(4)值传递:函数获得了主调程序参数变量值的拷贝。被调程序可以改变这些拷贝,但这对主调程序的环境没有影响。(5)请注意:C+中不允许函数定义嵌套,即在函数定义中再定义一个函数是非法的。一个函数只能定义在别的函数的外部,函数定义之间都是平行的,互相独立的。例
24、如:下面的代码在主函数中非法嵌套了一个f()函数定义:voidmain()voidf()/函数参数的传递比较:1.按值传递以按值传递方式进行参数传递的过程为:首先计算出实参表达式的值,接着给对应的形参变量分配一个存储空间,该空间的大小等于该形参类型的长度,然后把已求出的实参表达式的值一一存入到为形参变量分配的存储空间中,成为形参变量的初值,供被调用函数执行时使用。这种传递是把实参表达式的值传送给对应的形参变量,故称这种传递方式为“按值传递”。这种方式被调用函数本身不对(主调函数中)实参进行操作,也就是说,即使形参的值在函数中发生了变化(主调函数中)实参的值也完全不会受到影响,仍为调用前的值。例
25、:按值传递。voidswap(int,int);/函数定义voidmain()inta=3,b=4;couta=a,b=“bendl;swap(a,b);/函数调用couta=a,b=bendl;voidswap(intx,inty)/函数定义intt=x;x=y;y=t;此程序的运行结果为:a=3,b=4a=3,b=42.地址传递如果在函数定义时将形参的类型说明成指针,对这样的函数进行调用时就需要指定地址值形式的实参。这时的参数传递方式即为地址传递方式。这种地址传递与上述的按值传递不同,它把实参的存储地址传送给对应的形参,从而使得形参指针和实参指针指向同一个地址。因此,被调用函数中对形参指针
26、所指向的地址中内容的任何改变都会影响到实参。例:地址传递。voidswap(int*x,int*y);/函数声明voidmain()inta=3,b=4;couta=a,b=“bendl;swap(&a,&b);、couta=a,b=“bendl;voidswap(int*x,int*y)intt=*x;*x=*y;*y=t;此程序的运行结果为:a=3,b=4a=4,b=33.引用传递按值传递方式容易理解,但形参值的改变不能对实参产生影响;地址传递方式虽然可以使得形参的改变对相应的实参有效,但如果在函数中反复利用指针进行间接访问,会使程序容易产生错误且难以阅读。如果以引用作为参数,则既可以使得
27、对形参的任何操作都能改变相应的实参的数据,又使函数调用显得方便、自然。引用传递方式是在函数定义时在形参前面加上引用运算符“&”。例引用传递。voidswap(int&,int&);voidmain()inta=3,b=4;couta=a,b=“bendl;swap(a,b);couta=a,b=“bendl;voidswap(int&x,int&y)intt=x;x=y;y=t;此程序的运行结果为:a=3,b=4a=4,b=3函数的嵌套调用:函数体由前述可知,C+函数不能嵌套定义,即一个函数不能在另一个函数体中进行定义。但在使用时,允许嵌套调用,即在调用一个函数的过程中又调用另一个函数。例如:
28、func1(inta,floatb)floatc;c=func2(b-1,b+1);/嵌套调用,func1调用func2intfunc2(floatx,floaty)/函数体/func1和func2是分别独立定义的函数,互不从属。如何定义一个递归函数j) 汉诺塔k) 求最大公约数l) 计算阶乘函数的递归调用:一个函数直接或间接地调用自身,这种现象就是函数的递归调用。递归调用有两种方式:直接递归调用和间接递归调用。直接递归调用即在一个函数中调用自身,间接递归调用即在一个函数中调用了其他函数,而在该其他函数中又调用了本函数。利用函数的递归调用,可将一个复杂问题分解为一个相对简单且可直接求解的子问题
29、(“递推”阶段);然后将这个子问题的结果逐层进行回代求值,最终求得原来复杂问题的解(“回归”阶段)。例:求n的阶乘。(函数递归调用的例程。)longf(intn)if(n0)cout“error!“endl;return(-1);elseif(n=1)return(1);elsereturn(n*f(n-1);/自己调用自己voidmain()longf(intn);intn;coutinputn:n;coutn!=f(n)endl;此程序的运行结果为:pleaseinputn:5n!=120程序的内存区域:一个程序将操作系统分配给其运行的内存块分为4个区域。(1)代码区,存放程序的代码,即程
30、序中各个函数中的代码块。(2)全局数据区,存放程序全局数据和静态数据。(3)堆区,存放程序的动态数据。(4)栈区,存放程序的局部数据,即各个函数中的数据。如何使用变量(变量的作用是什么?)2.局部变量。在一个函数内部说明的变量是内部变量,它只在该函数范围内有效。也就是说,只有在包含变量说明的函数内部,才能使用被说明的变量,在此函数之外就不能使用这些变量了。所以内部变量也称“局部变量”。关于局部变量的作用域还要说明以下几点:1主函数main()中定义的内部变量,也只能在主函数中使用,其它函数不能使用。同时,主函数中也不能使用其它函数中定义的内部变量。因为主函数也是一个函数,与其它函数是平行关系。
31、这一点是与其它语言不同的,应予以注意。2形参变量也是内部变量,属于被调用函数;实参变量,则是调用函数的内部变量。3允许在不同的函数中使用相同的变量名,它们代表不同的对象,分配不同的单元,互不干扰,也不会发生混淆。4在复合语句中也可定义变量,其作用域只在复合语句范围内。3.全局变量(1)在函数外部定义的变量称为外部变量。以此类推,在函数外部定义的数组就称为外部数组。(2)外部变量不属于任何一个函数,其作用域是:从外部变量的定义位置开始,到本文件结束为止。(3)外部变量可被作用域内的所有函数直接引用,所以外部变量又称全局变量对于全局变量还有以下几点说明:(1)外部变量可加强函数模块之间的数据联系,
32、但又使这些函数依赖这些外部变量,因而使得这些函数的独立性降低。从模块化程序设计的观点来看这是不利的,因此不是非用不可时,不要使用外部变量。定义但不初始化,则自动赋以(整型和实型)或0(字符型)(2)在同一源文件中,允许外部变量和内部变量同名。在内部变量的作用域内,外部变量将被屏蔽而不起作用。(3)外部变量的作用域是从定义点到本文件结束。如果定义点之前的函数需要引用这些外部变量时,需要在函数内对被引用的外部变量进行说明。外部变量说明的一般形式为:extern数据类型外部变量,外部变量2;注意:外部变量的定义和外部变量的说明是两回事。外部变量的定义,必须在所有的函数之外,且只能定义一次。而外部变量
33、的说明,出现在要使用该外部变量的函数内,而且可以出现多次。静态局部变量1.定义格式:static数据类型内部变量表;2.存储特点(1)静态局部变量属于静态存储。在程序执行过程中,即使所在函数调用结束也不释放。换句话说,在程序执行期间,静态内部变量始终存在,但其它函数是不能引用它们的。(2)定义但不初始化,则自动赋以(整型和实型)或0(字符型);且每次调用它们所在的函数时,不再重新赋初值,只是保留上次调用结束时的值!(3)何时使用静态局部变量需要保留函数上一次调用结束时的值。变量只被引用而不改变其值。一维数组m) 如何正确地声明一维“静态”数组并初始化i. 初始化列表的长度与数组大小的关系ii.
34、 数组大小必须是整型常量n) 如何使用数组元素i. 通过“索引值”访问数组中的具体元素ii. 对“索引值”的说明(整型值、从0开始)o) Josephus问题p) 筛选质数13.数组:v数组是一组同类元素,它有两个特征: 数组元素是有序的 数组元素是同类的v定义数组要定义三个基本内容: 数组名字 数组元素的类型 数组的大小v定义格式:类型数组名元素个数;其中,元素个数必须是常量。如:intintarray10;但intn=10;intintarrayn;是错的v常用的方法是将元素个数定义为一个常量。如:ConstintNumOfElement=10;intintarrayNumOfElemen
35、t;相当于intintarray10;v声明数组时可以对数组初始化floatx5=-1.1,0.2,33.0,4.4,5.05;v初始化表的长度短于要被初始化的数组元素数目,那么剩余元素被初始化为0。v带有初始化的数组可以不定义长度inta=1,2,3,4,5;则默认数组大小为5v数组元素的使用是通过数组名及元素的序号来指定,如intarray2。当数组的大小为n时,元素的序号为0n-1。v元素的序号称为下标。程序中,下标可为整数、整型变量或结果为整型的任意表达式v定义数组就是定义了一块连续的空间,空间的大小等于元素数*每个元素所占的空间大小。v数组元素按序存放在这块空间中。vC+语言不检查数
36、组下标的超界。如定义数组intintarray10;合法的下标范围是09,但如果你引用intarray10,系统不会报错。如数组intarray的起始地址是1000,则引用intarray10,则系统对1040号内存进行操作。而1040可能是另一个变量的地址v解决方法:由程序员自己控制。在对下标变量进行操作前,先检查下标的合法性。v由一系列字符组成的一个单元称为字符串v字符串:v在C+中,字符串常量用一对双引号括起来。如”Hello,world”v字符串变量:用字符类型的数组来表示v字符串的本质是一系列的有序字符,因此可以用一个字符数组来保存这组字符。用数组名表示这个字符串v由于数组名是数组的起始地址,因此该字符串从该地址开始存储。但到哪里为止?C+用0表示字符串的结束。v字符串所需的存储空间比实际的字符串长度大1v如要将字符串”Hello,world”保存在一个数组中