C++强化材料.docx
- 文档编号:8898037
- 上传时间:2023-05-15
- 格式:DOCX
- 页数:254
- 大小:208.46KB
C++强化材料.docx
《C++强化材料.docx》由会员分享,可在线阅读,更多相关《C++强化材料.docx(254页珍藏版)》请在冰点文库上搜索。
C++强化材料
目录
第一部分C++的基本概念和基本语句……………………2
第二部分构造类型和指针类型数据……………………14
第三部分函数和编译预处理……………………………31
第四部分类和对象
(1)…………………………………39
第五部分类和对象
(2)…………………………………51
第六部分综合练习题一…………………………………64
第七部分综合练习题二…………………………………75
第八部分信息技术基础题…………………………………90
第九部分04、05年真题………………………………123
第一部分C++的基本概念和基本语句
一、数据类型、运算符和表达式
知识点:
1、数据类型:
C++提供了十分丰富的数据类型,除基本类型外,还提供了导出(构造)数据类型:
基本类型:
整型,说明符为int,占用4个字节;
字符型,说明符为char,占用1个字节;
单精度型,说明符为float,占用4个字节;
双精度型,说明符为double,占用8个字节;
无值型,说明符为void,占用0个字节。
在四种基本类型前还可以加上以下修饰符:
signed(有符号型),unsigned(无符号型),short(短型),long(长型)
2、标识符:
以字母或下划线开始的字母、数字以及下划线组成的字符序列称为标识符。
标识符的第一个字符必须是字母或下划线,有效长度为1~247个字符,标识符不允许是关键字。
例如:
MyName,_1234都是合法的标识符,6ab,$ab,a3.5都是不符合标识符的定义的。
3、常量:
在程序执行过程中,值保持不变(也不能被改变)的量称为常量。
(1)字面常量:
根据类型的不同可分为整型常量,实型常量,字符型常量和字符串型常量。
①整型常量:
可用十进制,八进制、十六进制来表示。
八进制整数以0开头,由数字0~7组合而成;十六进制整数以0x开头,由0~9,A~F组合而成。
长整型以L或l结尾,无符号整数以U或u结尾。
②实型常量:
十进制小数形式和指数形式。
十进制小数形式由数字0~9和小数点组成,指数形式(科学表示法),以10的多少次方表示。
注意,在E或e的前面必须有数字,且在E或e之后的指数部分必须是整数。
例如:
123E12,0.23e-2都是合法的实型常量。
而e10,.e5,1.0e3.5都是不合法的实数。
③字符型常量:
单引号括起来的单个字符。
例如:
‘a’,‘&’等都是合法的字符常量,‘ab’,“a”都是不合法的字符型常量。
C++还提供了另一种表示字符型常量的方法,即所谓的“转义序列”。
转义序列就是以转义符”\”开始,后跟一个字符或一个整型常量(字符的ASCII值)的办法来表示一个字符。
若转义字符后边是一个整型常量,则必须是一个八进制或十六进制数,其取值范围必须在0~255之间。
该八进制数可以以0开头,也可以不以0开头;而十六进制数必须民0X或0x开头。
常用的转义序列字符有:
’\\’表示字符“\”,‘\’’表示单引号,‘\”’表示双引号,‘\n’表示换行符等。
④字符串常量:
用双引号括起来的若干个字符。
例如:
“ab3d”,“a”都是合法的字符串常量。
字符串常量与字符常量的存放格式不一样,在字符串常量的尾部,存储时都要存放一个“0”,“0”表示字符串的结束符。
当双引号要作为字符串中的一个字符时,必须采用转义序列表示法;单引号作为字符串中的一个字符时,可直接出现在字符串常量中,也可以采用转义序列表示法。
(2)标识符常量:
标识符常量是用标识符表示的常量。
定义标识符常量后,可以像字面常量一样使用该标识符。
可用两种方法定义标识符常量:
一种是使用编译预处理命令方法,另一种是利用常量说明语句。
①编译预处理命令
例:
#definePI3.1415926
②使用常量说明符const
例:
constfloatPI=3.1415926;
在程序中标识符常量必须先定义后引用,并且标识符常量在程序中只能引用,不能改变其值。
4、变量
在程序的执行过程中,其值可以改变的量称为变量。
根据其取值的不同,分为不同类型的变量:
整型变量、实型变量、字符型变量、构造型变量和指针型变量等。
例如:
inta;//定义整型型变量a,并为a分配4个字节的存储单元,变量说明语句必
须以分号结束。
变量要求说明在前,使用在后。
变量说明语句可以出现在程序中语句可出现的任何位置,同一变量只能作一次定义性说明。
首次引用变量时,变量必须有一个确定的值。
对变量赋初值的三种方法:
①在变量说明的同时对变量赋初值,例如:
charch1=‘a’,charch2=‘b’;
②使用赋值语句赋值,例如:
floatx,y;x=1.234;y=2.56;
③通过输入流cin对变量赋初值,例如:
inta;cin>>a;
5、运算符与表达式:
(1)算术运算
C++中的算术运算符有两个单目运算符(只有一个操作数的运算符):
+(正号)、-(负号);五个双目运算符(有两个操作数的运算符):
+(加)、―(减)、*(乘)、/(除)、%(取余)。
对于加减乘除,当操作数有一个是实型时,则作实数运算,运算结果为实数;当它们都为整数时则作整数运算,运算结果为整数。
特别注意的是除法运算符“/”,若两边的操作数均为整型数时,则作整除运算。
对于求模运算符“%”,其两边的操作数必须是整数,结果是两数相除后的余数。
例如:
5/4//结果为1,因为两个操作数都是整数,所以结果也为整数;
5.0/4//结果为1.25,因为左操作数为实数,故结果为实数。
当两个整数做加法、减法或乘法运算时,产生溢出(超出对应类型数据的表示范围)系统并不认为是一个错误,但这时的计算结果已经不正确了。
(2)关系运算
C++提供六种关系运算符:
>(大于)、<(小于)、>=(大于等于)、<=(小于等于)、==(等于)、!
=(不等于)。
前面4种(>,<,>=,<=)优先级相同,后两种(==,!
=)优先级相同,前4种高于后两种。
结合性都为右结合。
关系运算符完成两个操作数的比较运算,即比较两个操作数的数值大小。
运算的结果为一整数,当关系成立时,其运算结果为整数1;当关系不成立时,其运算结果为整数0。
关系运算的结果可作为一个整数参与表达式的运算。
(3)逻辑运算
C++中提供三种逻辑运算符:
①逻辑非(!
),一元运算符,对操作数进行取反操作。
例如:
当操作数的值为0时,运算结果为1;当操作数的值为非0时,运算结果为0。
②逻辑与(&&),二元运算符,仅当两个操作数的值都为非0时,其运算结果才为1;否则为0。
③逻辑或(||),二元运算符,仅当两个操作数的值都为0时,其运算结果才为0;否则为1。
在计算过程中,要注意&&的优先级低于!
优先级,但高于||的优先级。
!
为左结合,而其它两个为右结合。
在逻辑运算中要注意逻辑表达式的副作用:
①对于a&&b&&c,只有a为非0时,才需要计算b的值,因为当a为0时,不管后面的项如何,都能得到该表达式的值就为0。
同样只有在a和b都为非0的情况下才需要计算c的值。
②对于a||b||c,只要a为非0,就不需要判断b和c的值,而只有当a、b都为0时才需要计算c项。
(4)赋值运算
C++中赋值运算符分为两种:
单一赋值运算符(=)和复合赋值运算符(+=,–=,*=,/=,%=,&=,^=,|=,<<=,>>=),都为双目运算符,结合性为左结合,其运算法则为:
将左操作数与右操作数进行相应的运算,再将结果赋给左操作数。
对于赋值运算符,其左操作数必须为变量。
例如:
inta,b,c=2;
a=b=c+=10;//等价于a=(b=(c+=10))
a=3+b=c;//错误,因为该表达式等价于a=((3+b)=c),3+b不是变量
(5)sizeof()运算符
sizeof()运算符是用来计算某种类型或数据所占用的字节数,它为单目运算符。
该运算符与其它类型的基本运算符稍有不同,它的操作数必须在括号内,其使用格式为:
sizeof(<类型>)
或sizeof(<表达式>)
例:
sizeof(char)//其值为1
floatb=3.4;sizeof(b+3.4)//其值为8,因为b+3.4的结果为双精度型数
(6)自增、自减运算
自增运算符“++”和自减运算符“--”都具有两种形式,且它们都是单目运算符,操作数必须为变量,一般是整型变量,但也可以是实型或字符型变量。
++i(前置自增:
先将i的值加1,再将变化后的i值参与运算)
i++(后置自增:
先将i参与运算,再将i的值加1)
--i(前置自减:
先将i的值减1,再将变化后的i值参与运算)
i--(后置自减:
先将i参与运算,再将i的值减1)
(7)逗号运算
逗号运算符的优先级为所有运算符中最低的,结合性为右结合。
逗号表达式的一般形式为:
<表达式1>,<表达式2>,…,< 表达式n>
其运算顺序为按从左到右的顺序依次求出各表达式的值,并把最后一个表达式的值作为整个逗号表达式的值。
以下三个表达式的结果是不同的:
y=x=(a=3,6*3);//x=y=18;a=3;
y=x=a=3,6*3;//x=y=a=3;
y=(x=a=3,6*3);//x=a=3;y=18;
(8)条件运算
条件运算符“?
:
”为三目运算符,要求有三个操作对象,使用格式为:
<表达式1>?
<表达式2>:
<表达式3>
计算过程为:
先计算<表达式1>,若其值不等于0,则计算<表达式2>,并将计算的值作为该条件表达式的值;否则求解<表达式3>的值,并将该值作为条件表达式的值。
其优先级高于赋值和逗号运算,左结合。
(9)常用运算符的优先级
高!
++——负号
算术运算
关系运算
逻辑运算
条件运算
赋值运算(含复合赋值)
低逗号运算
(10)类型转换
在求表达式值的过程中,对于双目运算符,通常会出现两个操作数的类型不一致的情形,这时就要求将这两个操作数转换为同一类型,然后再进行运算。
①不同类型数据的混合运算:
若某一个二元运算符的左右两个操作数的类型不同,系统先把精度低的操作数变换成与另一操作数相同精度的操作数后再进行运算。
其转换规则如下:
当操作数为字符型或短整型时,系统自动变换成整型参加运算;
当操作数为实型时,系统自动地变换成双精度型实数参加运算;
当两个操作数不同时,将表示范围较小的数据类型转换成与另一操作数相同的类型后再参
与运算,转换关系为:
int→unsigned→long→float→double
②赋值时的类型转换
若赋值运算符右边的数据类型与左边变量的类型不一致但属于类型兼容(类型可转换)时,系统自动进行类型转换。
其转换规则如下:
将实型数赋给整型变量时,只取实数型的整数部分赋给整型变量,舍去小数部分;
将整型数赋给实型变量时,将整数变换成实型数后再赋给实型变量;
将字符型数据赋给整型变量时,对无符号型字符变量低八位不变,高位补0后赋值;对于有符号型字符变量,若字节符号位为0时,与无符号字符类型的转换规则相同;,当该字节的符号位为1时,将高位全部置1后再赋值。
③强制类型转换
强制类型转换是指把一个表达式的值强制转换为指定的类型。
格式如下:
(<类型名>)<表达式>或<类型名>(<表达式>)
这种方法的功能是:
先求表达式的值,再将该值强制转换为<类型名>所指定的类型。
重点与难点:
1、数学表达式在C++中的表达;
2、不同类型常量的合法表示;
3、标识符的命名规则;
4、算术、关系、逻辑运算符的优先级、结合性和运算规则;
5、sizeof()的使用;
6、逻辑运算中逻辑表达式的副作用;
7、类型的自动转换和强制类型转换;
8、算术运算中溢出问题的处理。
习题分析:
1、数学式
在C++程序中对应的正确表达式是:
()
A.sqrt(x>0?
sin(x):
-sin(x))B.sqrt(fabs(sin(x)))
C.sqrt(sqrt(sinx*sinx))D.fabs(sqrt(sin(x)))
答案为:
B。
2、在数学式
中,变量x和y的取值为整数,而变量a和b的取值为实数,在C++程序中对应的正确表达式是()
A.3/5*x*y/a/bB.3*x*y/5/a/bC.3*x*y/5*a*bD.3/a/b/5*x*y
答案为:
D。
注意整数和整数相除得到的结果仍为整数。
要保证表达式的值为实数,必须使第一个除法运算其中一个操作数为实数。
3、设有四个常数:
①4e0.5,②‘\87’,③0x5a,④“\””,其中符合C++语法规则的常量是()
A.②③B.②④C.③④D.①②
答案为:
C。
其中①式指数部分必须是整数,②转义字符序列中八进制值只允许出现数字0-7。
所以只有③和④是合法的。
4、下列符号中能用作C++标识符的是()
A.5abcB.ifC.–abcD._abc
答案为:
D。
标识符的定义中明确指出标识符必须以字母或下划线开始的字母、数字、下划线串,同时不允许为关键字。
选项(A)以数字开始,选项(B)是关键字,选项(C)以短横线为开始,只有(D)是合法的标识符。
5、能用作用户自定义的标识符为()。
A.friendB.–varC.3Xyz-D.Float
答案为:
D。
按照标识符的命名规则,选项(A)为关键字,选项(B)以短横线开始,选项(C)中含有短横线。
由于在C++中是严格区分大小写的,所以“Float”和“float”是两个不同的符号,float是关键字,而Float则是合法的标识符。
6、设有说明“inta=3,b=5,m;”,则执行表达式“m=a<=3&&a+b<8”后,m的值为()
A.trueB.falseC.0D.1
答案为:
C。
此表达式共涉及了三种运算:
赋值、关系和逻辑运算。
按照优先级,应先计算关系表达式a<=3的值,关系成立结果为1,考虑到逻辑与(&&)运算的副作用,当左操作数的值为1时才计算右操作数的值,a+b<8关系不成立结果为0,所以整个逻辑表达式的值为0。
最后执行赋值运算,将0值赋给m。
7、设有说明“intx=5,y=7,z=8;”,执行表达式“z+=x++||y++||++z”后,则x、y、z的值分别为()。
A.6、7、9B.6、8、10C.6、8、8D.6、8、1
答案为:
A。
按照逻辑或(||)运算的优化,只有当左操作数值为0时才计算右操作数的值。
表达式中涉及了自增、逻辑和赋值三种运算,按照优先级首先计算自增运算x++,取出x的值5参加运算,然后x自增1为6;所以第一个自增表达式的值为5,就不再计算后面的两个自增表达式了,直接得到整个逻辑表达式的值为1,通过复合赋值操作赋给z,所以z的值为9。
8、设有说明“inta,b;”,执行语句“b=(a=3*5,a*4),a+15;”后,b的值为()
A.15B.30C.60D.90
答案为:
C。
在赋值运算、逗号运算和算术运算中,逗号运算处于最低优先级,而赋值其次,最高的是算术运算。
所以a=15,(a=3*5,a*4)表达式的值为60,赋给b,整个表达式等价于“(b=(a=3*5,a*4)),a+15”。
9、设有说明“intx=10,y=4,f;floatm;”,执行表达式“f=m=x/y”后,则f,m的值分别是()
A.2、2.5B.3、2.5C.2.5、2.5D.2、2.0
答案为:
D。
赋值运算的结合性为左结合,首先计算算术表达式x/y的值,因为x,y都是整型,所以进行的是整除运算得结果为2,而m是实型,按照自动类型转换,系统先将整数2转换成实型2.0赋给m后,再将实型数2.0转换为整型赋给整型变量f。
10、设有说明语句“intk=7,x=12;”,则能使值为3的表达式是()。
A.x%=(k%=5)B.x%=(k-k%5)C.x%=k-k/5D.(x%=k)-(k%=5)
答案为:
D。
“%”为取模(取余)运算,选项A、B、C表达式的值均为0,选项D表达式的值为3。
11、实型变量x的取值范围为闭区间[-2,10]或开区间(15,34),则正确表示x取值范围的逻辑表达式是()。
A.-2<=x<=10||15 C.-2<=x<=10&&15 答案为: B。 若将x在闭区间[-2,10]表示成-2<=x<=10,首先计算x>=-2,其运算的结果(0或1)和10进行比较。 若x为20,x>=-2关系成立得结果为1,1<=10关系成立得1,与题意相驳。 12、设有说明“intx,y,z,m=10,n=5;”,执行下面三个语句: x=(--m==n++)? --m: ++n; y=m++; z=n; 则x,y,z的值分别为: A.797B.597C.6115D.101110 答案为: A。 条件运算的优先级是高于赋值运算的,--m的值为9,m的值为9,n++的值为5,n的值变为6,(--m==n++)关系表达式的值为0,取++n作为x的值,所以x的值为7,z的值也为7,y的值为9。 13、设有语句“inta=258,b;unsignedcharc;b=c=a;“,则b的值是2。 a为整型数,占用4个字节的存储空间,在系统中存储为00000000000000000000000100000010,c为无符号的字符型,占用一个字节的内存空间。 将变量a的值赋给变量c,只能将a的低8位赋给变量c,所以c的值为00000010,转化为十进制数为2。 再将c的值赋给变量b,所以b的值为2。 14、设有语句“chars[]=“Rep\0Ch”;intm=sizeof(s);”,则m的值是7。 sizeof()运算符是用来用来计算某种类型或数据所占用的字节数,s所占用的字节数由字符中所含字符的个数加上字符串的结束标记,所以m的值是7。 二、简单的输入/输出 知识点: C++中的输入/输出功能是由I/O流来实现的。 C++提供了两个标准的I/O流,即流cin和流cout,流cin实现输入操作,流cout实现输出操作。 要使用C++提供的输入/输出时,必须在程序的开头增加一行: #include 1、输入流cin的使用 格式: cin>><变量名1>《>><变量名2>>>…>><变量名n>》; 其中运算符”>>”称为提取运算符,其作用是暂停程序的执行,等待用户从键盘输入数据,用户输入的数据赋给相应的变量。 ①输入整数和实数 当从键盘上输入多个整数和实数时,要将这些整数或实数之间用空格或回车符隔开。 注意: 从键盘上输入数据的个数、类型和顺序,必须与cin中列举的变量一一对应。 ②输入字符数据 cin不能将输入的空格和回车符赋给字符型变量。 若要把从键盘上输入的每一个字符包括空格和回车键都作为一个输入字符赋给字符型变量,必须使用函数cin.get()。 其格式为: cin.get(<字符型变量>); 2、输出流cout的使用 格式: cout<<<表达式1>《<<<表达式2>…<<<表达式n>》 其中”<<”称为插入运算符,它的作用是将其后面的表达式的值输出到显示屏上当前光标所在的位置。 可以通过setw(n)命令来指定输出项的宽度,括号中的n值指出紧跟其后的输出项占用的字符位置个数,并向右对齐,使用该命令必须在程序中包含头文件 难点与重点: 1、在输入字符数据时,使用cin和cin.get()区别 2、转义序列字符的输出 习题分析: 1、C++中cin是() A.一个标准的语句B.预定义的类C.预定义的函数D.预定义的对象 答案为: D。 cin和cout都是预定义的对象。 三、流程控制语句 知识点: 1、C++的语句结构类型 C++中的语句可归纳为六类: ①表达式语句: 在表达式的后面加上一个分号,就构成表达式语句。 ②函数调用语句: 在函数调用之后加一个分号,就构成函数调用语句。 ③空语句: 只由一个分号构成的语句称为空语句。 ④复合语句: 用花括号{}把一个或多个语句括起来构成了一个复合语句。 复合语句从逻辑上来看,C++把它作为一个语句来处理,它可以出现在只允许出现一个语句的任何位置。 ⑤注释语句: C++中有两种类型的注释语句,一种是用注释符“//”,从“//”到它所在行的行尾之间的所有字符都被作为注释语句处理;另一种是利用一对注释符“/*”和“*/”,在“/*”和“*/”之间的文字都被作为注释处理。 ⑥流程控制语句: 有可能改变程序执行顺序的语句称为流程控制语句。 包括: 条件语句、循环语句、开关语句、分支选择语句、转向语句等。 2、程序的三种基本结构: 顺序结构: 按程序中语句的先后顺序依次执行各个语句; 分支结构: 根据给定的条件判断在两条或多条可能的路径中选择一条路径执行; 循环结构: 根据某一种条件,重复执行某一个语句或若干个语句序列。 3、分支结构语句 ①条件语句 单选条件语句格式: if(<表达式>)<语句> 二中择一语句格式: if(<表达式>)<语句1> else<语句2> 嵌套条件语句格式: if(<表达式1>)<语句1> elseif(<表达式2>)<语句2> elseif… … else<语句n> 其中<表达式>可以是符合C++语法规则的任一表达式,可以是算术表达式、关系表达式、逻辑表达式或逗号表达式。 注意: 作为判断条件的表达式必须用括号括起来。 当表达式的值为非0时就执行<表达式>后的语句,否则就执行if语句的下一条语句(单选条件语句)或else后的语句。 对于嵌套的if语句,C++规定了else与if的配对规则为: else总是与其前面最近的还没有配对过的if进行配对。 ②开关语句 switch语句根据给定的条件,选择执行其中某一个分支中的语句序列。 其一般格式为: switch(<表达式>) {case<常量表达式1>: 《语句序列1》 《break;》 case<常量表达式2>: 《语句序列2》 《break;》 … case<常量表达式n>: 《语句序列n》 《break;》 《default: <语序列句n+1>》 } <表达式>叫做“switch控制表达式”,即根据其取值情况决定执行哪一个分支的语句,<表达式>的值只能为整型、字符型或枚举型。 <常量表达式i>只能为整数、字符或枚举类型的常数,<语序列句i>它可以含有多个语句,也可以没有任何语句,当有多条语句时,不需要用大括号“{}”括起来。 执行过程如下: 先计算switch控制表达式的值,然后将该值与每个case分支中的常量表达式的值进行比较,如果相等,则执行该分支后面的语句序列,当执行到break语句时退出该switch语句,否则转到下一分支后的语句序列继续执行;如果控制表达式的值与每个case分支中的常量表达式的值都不相等,则执行default分支中的语句序列;如果既没有匹配的case,又没有default分支,则不执行该switch结构中的任何语句。 4、循环结构语句 ①while()语
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C+ 强化 材料