《C++程序设计》知识点总结完整版.docx
《《C++程序设计》知识点总结完整版.docx》由会员分享,可在线阅读,更多相关《《C++程序设计》知识点总结完整版.docx(42页珍藏版)》请在冰豆网上搜索。
《C++程序设计》知识点总结完整版
C++知识点总结
第1章C++的初步知识
*1.1C和C++语言属于计算机高级语言,支持面向过程的程序设计方法。
*1.2C++兼容C,是C的加强版,增加了面向对象(OOP)机制。
*1.3用高级语言编写的程序称作源程序,C++源程序的扩展名为CPP,C源程序的扩展名为C。
*1.4源程序被编译或解释为机器语言方可执行。
C和C++均采用编译方式,源程序经编译、连接后形成机器语言的目标程序文件。
*1.5用户最终执行的是目标程序文件,它是二进制可执行文件,扩展名为EXE。
*1.6执行目标程序与源程序无关,但是,要修改目标程序,必须先修改源程序,然后,重新编译、连接,产生新的目标程序或覆盖原目标程序。
1.7C和C++均支持模块化程序设计,C以函数为基本模块,C++增加了类模块。
*1.8C和C++均支持结构化程序设计,有三种基本结构:
顺序、分支、循环。
*1.9每个C或C++源程序可由若干个文件组成,程序总是从主函数main开始执行,因此,每个源程序有且仅有一个主函数。
*1.10C和C++区分字母的大小写。
*1.11C和C++语句以分号结尾,仅有分号的语句称作空语句。
*1.12表达式后缀分号称作表达式语句。
*1.13用花括号{}括起来的一组语句统称复合语句。
复合语句可省略其后分号,但复合语句内的语句不可省略分号(除非它也是复合语句)。
*1.14C的注释以/*开头,结束于*/,可跨行。
C++增加了以//开头,至行尾结束的注释。
*1.15C和C++能直接对内存进行操作,从而实现对硬件的操作。
1.16广义地说,求解问题的方法和步骤称作算法。
就程序设计而言,对数据的操作方法和步骤称作算法。
*1.17算法和数据结构是程序的两大要素。
1.18掌握三种基本结构的图示。
第2章数据类型和表达式
*2.1掌握基本类型的类型名、缩写、存储量、取值范围。
类型名
类型标识符
存储量
取值范围
有符号短整数
signedshortint
2字节
-32768~32767
无符号短整数
unsignedshortint
2字节
0~65535
有符号长整数
signedlongint
4字节
-2147483648~2147483647
无符号长整数
unsignedlongint
4字节
0~4294967295
有符号字符
signedchar
1字节
-128~127
无符号字符
unsignedchar
1字节
0~255
单精度
float
4字节
±(3.4E-38~3.4E38)
双精度
double
8字节
±(1.7E-308~1.7E308)
长双精度
longdouble
8字节
±(1.7E-308~1.7E308)
逻辑值
bool
1字节
0~1
*2.2由正号、负号、数字以及合法前缀和后缀组成的有效数称作整数(小含小数点、E、e的数)。
*2.3含有小数点或E或e的数为双精度实型。
*2.4整型、实型、字符型、布尔型统称数值型。
*2.5整数后缀U或u为无符号整型。
整数后缀L或l为长整型,实数后缀L或l为长双精度。
在VC6.0中,整数默认为长整数,长双实数归入双精度,因此,整数和实数的后缀L均可省略。
*2.60X或0x打头的整数为十六进制整数。
0打头的整数为八进制整数。
*2.7浮点数“尾数E阶码”表示“尾数×10阶码”,其中,阶码必须是整数。
*2.8用一对单引号括起来的单个普通字符或转义字符称作字符常量,以其ASCII码存储。
记住数字和字母的ASCII码。
字符是1字节整数,但默认输出形式是字符。
ASCII码在32~126范围内的字符称作普通字符(参见附录A),其它字符称作控制字符。
普通字符可从键盘直接输入到程序中,而控制字符要用转义字符的形式输入。
*2.9掌握转义字符:
\n、\t、\\、\'、\"、\八进制数、\x十六进制数。
\n的ASCII码为10,其功能等同于回车键。
\t的ASCII码为9,其功等同于Tab键。
在文本输出状态,输出窗口通常为80列,等分成10区。
2.10如果\与其后字符不组成转义字符,则\无效。
*2.11\引导的数默认为八进制,无需0打头,\至多与前3位八进制数字结合。
*2.12如果\引导的是十六进制数,\至多与前2位十六进制数结合。
*2.13用一对双引号括起来的若干个普通字符或转义字符称作字符串常量,简称字符串。
*2.14字符串中字符个数称作字符串长度,简称串长。
*2.15字符串按字符的ASCII码依次存储,并自动追加1个ASCII码为0的“空字符”'\0'作为结束标志,因此,字符串的存储量比串长多一个字节。
*2.16符号常量名、变量名、函数名、数组名、类型名、类名等统称标识符。
*2.17标识符的命名规则为:
以字母或下划线打头,由字母、下划线、数字组成。
标识符不要与关键字同名。
*2.18符号常量定义格式为:
#define符号常量所代表的文本
其功能是:
在预处理时,自动用所代表的文本替换符号常量。
*2.19变量必须命名和定义类型(或者说,声明类型)。
定义变量类型的语句格式为:
类型名变量名,变量名,…;
*2.20定义变量时为其赋值,称作赋初值。
*2.21在定义变量时,如果附加了关键字const,所定义变量称作常变量或只读变量。
常变量必须赋初值,之后不允许修改其值。
符号常量在预处理时被所代表的文字替换,不参与编译,不占内存。
常变量有类型,占内存。
*2.22逐步掌握附录B中运算的功能、优先级、配对方向、结合方向。
*2.23在C和C++中,整数的商为整数,舍去余数(不做四舍五入)。
*2.24在C和C++中,只能用圆括号(所谓的小括号)来规定或改变运算的优先级。
圆括号可以嵌套,里层优先。
*2.25不同类型数据作运算时,低精度数据自动向高精度转化后再做运算。
在VC6.0中,char、short、unsignedshort型数据均自动转化为long型后再做运算。
精度由低到高排列为:
long=>unsignedlong=>float=>double。
*2.26自增运算“++”和自减运算“--”均是单目运算,只能作用于变量,可作用于左、右两侧,均使变量相应自增或自减1。
作用于左侧时,算术式的值为变量改变后的值,否则为改变前的值。
自增、自减运算均为左配对,与其在变量哪侧无关。
运算优先级与其作用于变量的哪侧有关。
*2.27强制类型转换运算的格式和功能如下:
格式:
(类型名)(表达式)
功能:
把指定表达式的值强制转换为指定类型。
2.28如果转换运算所作用的表达式中没有运算或优先级均高于转换运算,可省略表达式的括号。
2.29C++中可省略类型名括号,但C中不可省。
*2.30实数转整数将舍去小数部分(不做四舍五入),整数转实数将舍去超出数位(做四舍五入),整数间的转换涉及到补码。
*2.31会用类型转换实现“四舍五入”。
例如,“(int)(x*100+.5)/100.”是保留x的2位小数。
*2.32赋值运算的格式和功能如下:
格式:
变量=表达式
功能:
把赋值号“=”右侧表达式的值赋给左侧的变量,并以左侧变量为整个赋值表达式的值。
*2.33如果赋值号两侧的类型不一致,右侧表达式的值将被自动转换为左侧变量的类型。
转换规则与强制类型转换相同。
*2.34在C和C++中,
□=□☉◇等价于□☉=◇
其中,□是同一个变量,◇是表达式,☉=称作复合(或组合)赋值运算符,☉是下述运算符之一:
+、-、*、/、%、>>、<<、&、^、|
*2.35用逗号分隔(或者说连接起来)的一组表达式统称逗号表达式。
格式:
表达式,…,表达式
功能:
从左至右依次计算逗号表达式中各表达式的值,并以最后一个表达式的值的作为整个逗号表达式的值。
*2.36将数学式改为C表达式时应注意:
①乘号*不可省略;②正确改写角码、运算符、括号等;③正确书写函数名;④把握好运算优先级,分数线改为/时,分子、分母相应加括号;⑤正确拆分不等式组;⑥通常,整数除法应改用实数除法。
第3章程序设计初步
*3.1赋值表达式后缀分号称作赋值语句。
*3.2头文件iostream.h、iostream、iomanip均提供了cin、cout等C++标准输入输出流对象,它们的格式和功能如下:
格式cout<<表达式…<<表达式;
功能从右至左依次计算各表达式,然后,从左至右依次输出各表达式的值。
格式cin>>变量…>>变量;
功能把输入数据从左至右依次赋给各变量。
<<称作输出运算,如果其后的表达式中有比它优先级低的运算,应适当加括号。
>>称作输入运算。
输入数据间用空格、回车键分隔,并用回车键确认所输入数据。
3.3头文件iomanip.h提供了许多用于实现特殊输入和输出格式的所谓控制符(参见表3.1),它内嵌了头文件iostream。
*3.4头文件iostream和stdio.h均提供了putchar、getchar、printf、scanf等输入输出函数。
putchar和getchar的格式和功能如下:
格式putchar(表达式)
功能输出以指定表达式的值为ASCII码的字符,并自动追加一个回车符。
格式getchar()
功能输入一个字符,并以该字符为函数值(字符型)。
注意:
getchar可提取空格及回车、Tab等控制字符,只提取输入中相应位置上一个字符,因此,输入字符间无须分隔,否则也被视为输入字符。
3.5printf函数的格式和功能如下:
格式printf(格式控制串,输出表列)
功能①从右至左依次计算输出表列中各表达式;②从左至右依次输出格式控制串中的字符,其中,%引导的格式控制符由输出表列中相应表达式的值所取代。
输出表列是一组用逗号分隔的表达式(又称输出项,可以为0项)。
格式控制串可以是表达式,其中,格式符用于控制输出表列中相应表达式的输出格式(参见第04讲:
程序设计初步)。
3.6scanf函数的格式和功能如下:
格式scanf(格式控制串,地址表列)
功能①从右至左依次计算地址表列中各表达式的值;②从标准输入设备提取数据,并从左至右依次存储到所指定的存储单元。
格式控制串可以是表达式。
地址表列是一组用逗号分隔的地址,可用是表达式,常用形式为:
&变量
其中&是地址运算符,它表示取其后变量的起始存储地址。
scanf可提取空格以及回车、Tab等部分控制字符,但必须以字符提取(而非字符串)。
scanf函数格式符与printf函数的格式符的功能相似(参见第04讲:
程序设计初步)。
scanf的合法格式符不分大小写、实型格式符均等效。
*3.7在C和C++中,逻辑值均为整数,真即1,假即0。
高版本C++中新增了逻辑类型bool,它只有1和0这两个1字节整数,可分别表为true和false。
字符和数作为逻辑量时,非0即真。
指针作为逻辑量时,非空即真。
逻辑运算如下表所示:
右元
!
右元
左元
右元
左元&&右元
左元||右元
假(0)
1
假(0)
假(0)
0
0
真(非0)
0
假(0)
真(非0)
0
1
真(非0)
假(0)
0
1
真(非0)
真(非0)
1
1
*3.8关系式的值为逻辑值。
*3.9对于形如
□||□||…
的逻辑式,从左至右计算□的逻辑值,遇真即止。
*3.10对于形如
□&&□&&…
的逻辑式,从左至右计算□的逻辑值,遇假即止。
*3.11if语句的格式和功能如下:
格式if(条件)语句1else语句2
功能如果条件成立,执行语句1,否则执行语句2。
如果语句2为空语句,可同else一起省略。
注意:
else不可独立使用,它与其前最近一个尚未配对的if配对,为避免岐义,通常只在else中嵌套if语句。
*3.12条件表达式的格式和功能如下:
格式条件?
表达式1:
表达式2
功能如果条件成立,取表达式1的值,否则取表达式2的值。
条件表达式可以嵌套,:
与其前最近一个尚未配对的?
配对。
*3.13掌握目前所学运算的优先级(见附录B)。
3.14switch语句的格式和功能如下:
格式
switch(表达式){
…
case常量i:
语句组i
…
default:
语句组n+1
}
功能如果表达式的值等于常量i,则从语句组i开始执行,否则执行语句组n+1。
switch()中表达式的值必须是整数(可以是字符或逻辑值),“default:
语句组n+1”可缺省,每个语句组称作一个分支。
为使各分支独立,通常以break、return、exit等语句结尾。
*3.15break语句的格式和功能如下:
格式break;
功能结束本层switch或循环语句。
*3.16while语句的格式和功能如下:
格式while(表达式)循环体
功能当表达式的值为真时,重复执行其后循环体。
循环体是循环语句的内嵌语句,可以是空或复合语句(下同)。
*3.17do-while语句的格式和功能如下:
格式do循环体while(表达式)
功能重复执行循环体,直到表达式的值为假。
*3.18for语句的格式和功能如下:
格式for(表达式1;表达式2;表达式3)循环体
功能①计算表达式1;②当表达式2的值为真时,重复执行循环体和计算表达式3。
表达式1、表达式2、表达式3均可缺省,但保留分号。
缺省表达式2为永真。
*3.19continue语句的格式和功能如下:
格式continue;
功能结束本层循环体。
3.20掌握以下算法:
计算分段函数、打印字符图形、递推(迭代)、累加、阶乘、辗转相除法、穷举(枚举)、判断素数、分解整数因子、分解数字。
*3.21分段函数的一般形式为:
if(条件1)f=算式1;
elseif(条件2)f=算式2;
…
…elseif(条件n-1)f=算式n-1;
elsef=算式n;
或:
f=条件1?
式1:
条件2?
式2:
…:
条件n-1?
式n-1:
式n
3.22分支结构的一般格式:
if(条件1)操作1;
elseif(条件2)操作2;
…
…elseif(条件n-1)操作n-1;
elsef=操作n;
*3.23输出实心字符图形的一般格式为:
for(i=1;i<=行数;i++){
for(j=1;j<=第i行前置空格数;j++)cout<<'';
for(j=1;j<=第i行字符数;j++)输出所用字符
cout<}
3.24如果某问题已表述为“当◇时重复执行□”,即可用下述语句实现:
while(◇)□
3.25如果某问题已表述为“对于i=a~b重复执行□”,即可用下述语句实现:
for(i=a;i<=b;i++)□或for(i=b;i>=a;i--)□
3.26如果某问题已表述为“i从a开始,当◇时重复执行□”,即可用下述语句实现:
for(i=a;◇;i++)□
3.27对于已知项数和通项的累加,通用格式为:
和的类型S=0;
for(i=1;i<=项数;i++)S+=第i项;
3.28对于已知通项和结束条件的累加,通用格式为:
和的类型S=0;
for(i=1;!
结束条件;i++)S+=第i项;
3.29对于已知项数和各项递推式的累加,通用格式为:
和的类型S=0,T=初始项;
for(i=1;i<=项数;i++)
S+=T,推下项T;
3.30对于已知结束条件和各项递推式的累加,通用格式为:
和的类型S=0,T=初始项;
for(i=1;!
结束条件;i++)
S+=T,推下项T;
*3.31辗转相除法的要点:
当b=0时,a和b的最大公约数是a,否则转换为求b和a%b的最大公约数。
3.32穷举法又称枚举法,它是在有限或可列集中搜索满足条件的解。
穷举法的要点:
①确定解的搜索范围,并按某种规律排序(尽可能不重复);②确定所满足的条件,并在上述搜索范围内求解。
注意:
应适当利用条件缩小搜索范围,或缩小搜索范围以减少条件。
*3.33对于2以上的整数n,n是素数2~
中没有n的因子。
3.34对于正整数n,分解整数因子的过程为:
i从2开始,当i是n的因子时,去除n中1重i因子(n/=i),否则i++,直到n=1为止。
*3.35对于非负整数n,n的个位数=n%10,n的十位数=n/10%10,n的百位数=n/100%10,一般地,n的10k位数=n/10k%10。
第4章函数
*4.1从用户使用角度看,函数分为系统函数和用户自定义函数。
*4.2自定义函数的格式为:
格式函数值的数据类型函数名(形参表){函数体}
其中,函数值的默认数据类型为int,形参要逐个定义数据类型。
*4.3如果函数没有返回值,函数值的数据类型应定义为void。
*4.4return语句的格式和功能为:
格式一return表达式;或return(表达式);
格式二return;
功能结束函数,返回调用者。
格式一带返回值,其数据类型与函数值的类型必须相同或兼容,兼容时,返回值被自动转换为函数值的类型。
格式二没有返回值,函数值类型应定义为void。
*4.5函数一般调用格式为:
格式函数名(实参表)
其中,实参按从右至左的次序计算,并传递给相应形参。
*4.6函数参数的传递方式分为传值和引用。
对于前缀&的形参,它与对应实参共用内存,称作引用(C++方有此功能)。
对于未前缀&的形参,它与对应实参不共用内存,仅传值。
*4.7对于无参函数,实参表和形参表的括号仍不可缺省。
*4.8如果函数调用在其定义之前,调用前应作相应声明,声明格式为:
格式函数值类型名函数名(形参表);
其中,形参可省略,但形参的类型不可省略。
*4.9函数不可嵌套定义(函数定义中嵌套定义其它函数),但允许嵌套调用(函数定义中调用其它函数或自身)。
*4.10在函数的定义中直接或间接调用自身,称作函数的递归调用,简称递归。
4.11递归有三大要点:
①递归条件(或回归条件);②非递归操作(回归操作);③递归操作。
*4.12递归函数的核心结构为:
结构一if(回归条件)回归操作else递归操作
结构二if(递归条件)递归操作else回归操作
4.13C语言要求,函数中定义变量、数据结构的语句必须在其它语句之前。
C++没有此限制。
*4.14变量的属性分为:
①数据类型;②作用域;③存储类别;④存在期。
*4.15函数形参及函数或复合语句内定义的变量称作局部变量,它从定义处生效,只在该函数或复合语句内有效。
因此,不同函数或复合语句中的局部变量可以同名,但同名不同义。
*4.16在所有函数之外定义的变量称作全局变量,从定义处生效。
4.17对于函数,之前定义的全局变量均称作外部变量。
对于复合语句,之前定义的全局变量和同一函数中之前定义的局部变量均称作外部变量。
*4.18如果局部变量与外部变量同名,则同名外部变量被屏蔽。
*4.19局部变量的存储类别分为:
动态(auto,又称自动)、静态(static)、寄存器(register)。
*4.20局部变量存储类别的定义格式为:
格式存储类别数据类型局部变量表;
其中,存储类别和数据类型的位置可交换,默认存储类别为auto,默认数据类型为int,但不能同时缺省。
*4.21auto型局部变量占用动态数据区,当函数调用结束时释放所占内存。
register占用CPU中的寄存器,但寄存器不够用时,占用动态数据区。
*4.22全局变量和static型局部变量占用静态数据区,默认初值为相应数据类型的0。
*4.23static型局部变量的定义和初值化只执行一次,即使离开其作用域也不释放所占内存。
4.24定义全局变量时,如果加前缀static,称作内部全局变量,不能被其它文件调用,否则,称作外部全局变量,允许其它文件调用。
使用其它文件中定义的外部全局变量,需作extern声明。
4.25定义函数时,如果加前缀static,称作内部函数,不能被其它文件调用,否则,称作外部函数,允许其它文件调用。
使用其它文件中定义的外部函数,需作extern声明。
*4.26预处理命令在程序编译前执行,其主要功能是“文本置换”。
每个宏定义必须独占一行。
预处理不是语句,不可随意跟分号。
*4.27不带参数宏定义的格式和功能如下:
格式#define宏名文本
功能在预处理时,将程序中之后出现的这个宏名均用指定的文本置换。
4.28带参数的宏定义的格式和功能如下:
定义格式#define宏名(形参表)文本
使用格式宏名(实参表)
功能在预处理时,将程序中之后出现的这个带参数的宏均用指定文本置换,其中,形参被相应的实参直接置换(实际上是两次置换)。
形参没有类型的概念,没有函数值的概念,对实参不作运算。
4.29终止宏定义的格式为:
#undef宏名
4.30允许重新定义宏所代表的文本,新定义只作用于其后的宏名。
4.31“文件包含”处理(加载文件命令)
格式一#include<文件名>
格式二#include"文件名"
功能把指定文件加载到此处。
如果没有指定文件路径,前种格式直接到存放C头文件的目录中查找,后种格式先在程序文件所在目录中查找,如果未找着,方到存放C头文件的目录中查找。
4.32条件编译命令的格式和功能如下:
格式一#ifdef宏名程序段1#else程序段2#endif
格式二#ifndef宏名程序段1#else程序段2#endif
格式三#if常量表达式程序段1#else程序段2#endif
功能如果指定的宏名已定义(格式一)、宏名未定义(格式二)、条件为真(格式三),保留程序段1,否则保留程序段2。
最终,整个程序段仅剩程序段1或程序段2。
当程序段2为空时,#else可省略。
格式三中的条件必须是常量式。
第5章数组
*5.1定义数组语句的一般格式和功能为:
格式数据类型数组名[第1维长度]…[第n维长度]
功能为数组分配相应大小的连续内存,用于依次存储数组元素,并将起始地址赋给数组名。
*5.2数组的各维长度必须是常量(表达式),其整数位有效(不作四舍五入)。
5.3数组的起始地址又称基址。
把基址赋给数组名是在分配内存时由系统完成的,之后不允许修改。
*5.4数组元素又称下标变量,下标变量的使用格式为:
格式数组名[第1维下标]…[第n维下标]