第0章 C++重点知识点总结Word下载.docx
《第0章 C++重点知识点总结Word下载.docx》由会员分享,可在线阅读,更多相关《第0章 C++重点知识点总结Word下载.docx(128页珍藏版)》请在冰豆网上搜索。
是类似于结构体的一种构造类型,与结构体不同的是构成共同体的数据成员共用同一段内存单元。
枚举:
将变量的值一一列举出来,每个枚举成员(枚举符)都与一个整数相对应。
按默认方式,枚举符所赋的值从0开始递增。
枚举的值也可以用整型的表达式赋值进行初始化。
如果某个枚举中所有枚举符的值均非负,该枚举的表示范围是[0:
2K-1],其中2K是能使所有枚举符位于此范围内的最小的2的幂;
如果存在负的枚举符值,该枚举的取值范围就是[-2K:
2K-1]。
指针类型:
指针类型变量用于存储另一变量的地址,而不能用来存放基本类型的数据。
它在内存中占据一个存储单元。
类类型:
类是体现面向对象程序设计的最基本特征,也是体现C++与C最大的不同之处。
类是一个数据类型,它定义的是一种对象类型,由数据和方法组成,描述了属于该类型的所有对象的性质。
2.2变量与常量
2.1.1变量:
指在运行期间其值可以改变的量。
变量有三个特征:
变量类型、变量名、变量值。
命名:
遵循标识符命名规则。
标识符是对实体定义的一种定义符,用来标识用户定义的常量名、变量名、函数名、文件名、数组名、和数据类型名和程序名等。
只能由字母、数字和下划线组成,且以字母或下划线开头。
命名时注意以下几点:
1.C++的关键字不能用作用户自定义的实体名;
2.以下划线开头的名字是保留给实现或者运行环境,用于特殊目的,在应用程序里不要采用这样的名字;
3.大写与小写字母是区分的;
4.见名知义。
5.维持统一的命名风格。
定义:
格式:
<
类型名>
<
变量名>
[[=<
表达式>
],…]
typedef:
为某种类型声明一个新名字,而不是定义一种新类型。
格式:
typedef<
已有类型名>
新类型名>
2.1.2常量:
程序执行期间其值不变的量。
主要有下列几类常量。
布尔常量
字符常量
用单引号括起的一个字符。
在内存中,字符数据以ASCII码存储,如字符‘a’的ASCII码为97。
以转义字符‘\’开始的字符常量后跟不同的字符表示不同的特殊字符。
字符串常量
由一对双引号括起来的零个或多个字符序列。
字符串可以写在多行上,不过在这种情况下必须用反斜线‘\’表示下一行字符是这一行字符的延续。
字符串常量实际上是一个字符数组,组成数组的字符除显示给出的外,还包括字符结尾处标识字符串结束的符号‘\0’,所以字符串“abc”实际上包含4个字符:
‘a’、‘b’、‘c’和‘\0’。
注意字符常量与字符串常量在表示、存储、运算方面的区别。
整型常量
可以用十进制、八进制或十六进制表示。
十进制常量:
一般占一个机器字长,是一个带正负号的常数(默认情况下为正数)。
八进制常量:
由数字0开头,其后由若干0-7的数字组成,如0378,0123等。
十六进制常量:
以0x或0X开头,其后由若干0-9的数字及A-F(或小写a-f)的字母组成,如0x123,0x3ab。
浮点型常量
只能以十进制形式表示。
共有两种表示形式:
小数表示法和指数表示法。
如:
11.3、.2、2.3e10、-2.3E-1等。
枚举常量
枚举声明形式:
enum<
枚举名>
{<
枚举符表>
};
枚举符可以有两种形式:
枚举符名>
/<
=<
整形常量>
符号常量
定义形式:
const<
符号常量名>
[,…];
[]表示可选项,以下都采用这种标记。
定义的符号常量必须初始化。
一个符号常量可看作是一个只读变量,由const定义的常量的值不可以改变。
const的最常见的用途是作为数组的界和作为分情况标号。
2.3运算符与表达式
在程序中,表达式是计算求值的基本单位,它是由运算符和运算数组成的式子。
运算符是表示进行某种运算的符号。
运算数包含常量、变量和函数等。
C++语言的运算符按其在表达式中与运算对象的关系(连接运算对象的个数)可分为:
单目运算、双目运算、三目运算。
C++运算符一览表
名称
运算符
举例
优先级
结合性
作用域区分符
:
x
1
左结合性
分量运算符
.->
p.next,p->
next
2
函数调用运算符
()
fac()
下标运算符
[]
p[10]
后增量、后减量
前增量、前减量
++--
p++
--p
3
右结合性
求字节运算符
sizeof
sizeof(int)
正号、负号
+-
-1,+3
指针运算符
*和&
*p,&
分配、回收空间运算符
Newdelete
p=newint;
deletep;
强制类型转换运算符
(type)
(int)x
算术运算符
*/%
3%5(取模)
4
5
左移、右移
>
>
8>
3,8<
6
关系运算符
=>
=
==!
3<
3!
=5
7
8
位运算符
&
(按位“与”)
^(按位“异或”)
|(按位“或”)
1&
1^2
1|2
9
10
11
逻辑运算符
||
!
x&
y
x||y
12
13
条件运算符
?
:
a>
b?
x:
14
赋值运算符
=及其扩展(+=-=*=/=%=等)
a=2
a+=2
15
逗号运算符
a=1,b=2,c=3
16
表2.1C++运算符一览表
2.4简单输入与输出
在C++中,I/O使用了流的概念-字符(或字节)流。
每一个I/O设备传送和接收一系列的字节,称之为流。
输入操作可以看成是字节从一个设备流入内存,而输出操作可以看成是字节从内存流出到一个设备。
要使用C++标准的I/O流库的功能,需要包括两个头文件:
iostream.h用于提供基本的输入输出功能,iomanip.h用于提供格式化的功能。
2.4.1I/O的书写格式(基本数据类型的输入输出)
头文件iostream.h包含有cin和cout对象,对应于标准输入流和标准输出流。
流读取运算符“>
”表示流的输入,可以从cin输入流中读取字符;
流插入运算符“<
”表示流的输出,可以向cout输出流插入字符。
cout<
”helloworld.”<
endl;
//输出helloworld,然后换行
inti,j;
cin>
i>
j;
//输入i,j的值
2.4.2使用控制符(基本数据类型输入输出的格式控制)
C++中提供了大量的用于执行格式化输入输出的格式控制符,具体名称及作用请参看表2.2。
控制符
描述
所在头文件
dec
置基数为10
iostream.h
hex
置基数为16
oct
置基数为8
setfill(c)
设填充字符为c
setprecision(n)
设显示小数精度为n位
setw(n)
设域宽为n个字符
setiosflags(ios:
fixed)
固定的浮点显示
iomanip.h
scientific)
指数表示
left)
左对齐
right)
右对齐
skipws)
忽略前导空白
uppercase)
16进制数大写输出
lowercase)
16进制数小写输出
showpoin)
显示小数点
showpos)
显示符号(正负号)
showbase)
指定在数值前输出进制(0表示八进制,0x或0X表示十六进制)
表2.2I/O流的常用控制符
【典型例题】
例题1:
对以下各种数据类型比较所占用存储空间的大小:
(1)char、int、shortint、longint、double、longdouble.
(2)signedint、unsignedint.
解答:
(1)本题主要考查的知识点是各种类型所占用的存储空间的大小以及相应的表数范围。
在32位计算机中,char占1个字节,shortint占2个字节,int占4个字节,longint占4个字节,double占8个字节。
sizeof运算符用于求解某种数据类型的大小。
short和long在修饰整型时可以省略int。
答案为:
(2)对于一种确定的数据类型有符号数与无符号数所占的存储空间相同,表数范围不同。
修饰符signed和unsigned只能用于修饰字符型和整型。
例题2:
下列哪一项能用作用户自定义的标识符:
(a)const(b)2var(c)myname(d)var2
本题主要考查标识符命名规则。
C++关键字不能用于用户自定义标识符,(a)中const是关键字;
第一个字符必须是字母或下划线,(b)中2var是以数字开头;
不能含有空格,(c)中myname含有空格。
d。
例题3:
指出下列程序中的错误:
__________。
intmain()
{
constintx;
x=100;
return0;
}
本题主要考查对符号常量的理解。
const定义的符号常量必须初始化,由const定义的常量的值不可以改变。
所以本题有两处错误:
第一、没有对符号常量x进行初始化;
第二、给符号常量赋值是错误的。
例题4:
给下列表达式加上全部的括号(假设所用变量均已定义):
(1)a+b-c--%b
(2)a>
b:
c>
d?
a:
c<
a?
c:
d
(3)a+=a+b||e
(4)a&
b+c++
(5)-a&
b-c
(6)k=b=c=a
本题主要考查表达式中运算符的优先级与结合性。
请参阅表2.1。
为了避免出错,建议读者在书写表达式时完整书写括号。
(1)答案为:
(a+b)-((c--)%b)
(2)答案为:
(c>
(c<
d))
(3)答案为:
a+=((a+b)||e)
(4)答案为:
a&
(b+(c++))
(5)答案为:
(-a)&
(b-c)
(6)答案为:
k=(b=(c=a))
例题5:
请根据下列题意写出相应的表达式。
(1)有a、b、c、max四个变量a、b、c中的最大值,并将结果放入max中。
(2)年龄在1到100之间(包含1和100,年龄用变量age表示)。
(3)公式
。
(4)判断一年是否为闰年,年用year表示。
满足下列两个条件之一即为闰年:
能被4整除但不能被100整除
能被400整除。
(1)主要考查对条件表达式的理解和书写。
max=a>
(a>
c?
c):
(b>
c)。
(2)主要考查对逻辑表达式的理解和书写。
1<
=age&
age<
=100。
(3)主要考查如何在计算机中表示一个数学公式。
(a+b)*h/2。
(4)主要考查对逻辑表达式的理解和书写。
(year%4==0&
year%100!
=0)||(year%400==0)。
例题6:
下列选项中两个表达式的运算结果相同的是()。
(a)3/2和3.0/2.0(b)3/2和3.0/2(c)3/2.0和3.0/2.0(d)3/2.0和3/2
本题考查数据类型及表达式中数据类型的隐式转换。
3/2中两个操作数都为整型,运算结果仍为整型即1;
3.0/2和3/2.0中一个操作数为整型另一个为浮点型,运算时整型隐式转换为浮点型,运算结果也为浮点型即1.5;
3.0/2.0两个操作数均为浮点型,结果也为浮点型即1.5。
(c)。
例题7:
下列程序的运行结果为:
______________。
#include<
iostream.h>
voidmain()
{
inta=2,b=4,i=0,x;
x=a>
b&
++i;
cout<
"
x:
x<
i:
i<
}
本题主要考查“短路”表达式的运算。
对于表达式中的“与”运算而言,只要有一个操作数为假,结果为假。
所以当第一个操作数为假时,不在求解其它操作数。
对于表达式中的“或”运算而言,只要有一个操作数为真,则结果为真。
所以当第一个操作数为真时,不在求解其它操作数。
本题中a>
b为假,所以表达式a>
++i为假,而++i没有执行。
故i为0。
答案为:
i:
例题8:
求解下列各表达式的值(其中x的值为100)。
(1)(a=1,b=2,c=3)
(2)1|3<
(3)'
a'
+3&
0%1
(4)x%2?
“odd”:
”even”
(1)逗号表达式的值是其最后一个表达式的值。
3。
(2)<
运算符的优先级高于|运算符,所以先算3<
5结果为96(二进制1100000),然后与1做按位与运算则结果为97(二进制1100001)。
97。
(3)参与本题的运算符,按优先级由高到低依次是:
运算符、算术运算符、逻辑运算符。
'
+3时字符型首先隐式转换成整型然后相加结果为100,!
0%1即1%1结果为0,100&
0结果为0。
0。
(4)算术表达式的优先级高于条件表达式,所以先算x%2结果为0,0?
”odd”:
”even”结果为”even”。
本题完成判断一个数是奇数还是偶数,若该数为奇数,则表达式的值为”odd”,为偶数,则表达式的值为”even”。
”odd”。
例题9:
下列程序运行结果为:
_______________。
iomanip.h>
{
inta=23;
doubleb=23.123456789;
a<
\t'
b<
setprecision(0)<
fixed)<
setprecision(7)<
scientific)<
setprecision(6);
showbase);
hex<
dec;
setw(10)<
setfill('
*'
)<
left)<
'
);
本题主要考查对格式化输入输出的掌握。
本题主函数中第三行输出a,b,’\t’为转义字符,其含义是跳过一个制表位。
不设置输出宽度时,默认输出6位有效数字,超出部分四舍五入。
所以该行输出为:
2323.1235。
setprecision(n)设置显示精度,最少显示一位有效数字。
如果不重新设置,则其保持效力,所以使用完后要还原为6位默认值。
第四行中设置setprecision(0)与setprecision
(1)作用相同,结果显示一位有效数字即为:
2e+001。
fixed)为固定的浮点显示,其后跟setprecision(n)表示小数点后显示精度为n。
所以第五行输出结果为:
23.1234568。
scientific)为指数显示,当其整数部分宽度大于设置的显示精度(默认为6位)时,以指数形式显示结果。
否则根据设置的(或默认的)显示精度显示n位有效数字。
所以第六行输出结果为:
23.12346。
showbase)为指定在数值前输出进制。
hex置基数为16,且该操作保持效力,所以使用完后应该恢复为默认值10进制。
第九行输出结果为:
0x170x17。
setw(n)设域宽为n个字符,setfill(c)设填充字符为c,setiosflags(ios:
left)为左对齐。
第十一行输出结果为:
23********。
2323.1235
2e+001
23.1234568
23.12346
0x170x17
23********
第3章
C++程序的流程控制
顺序控制语句
选择控制语句
循环控制语句
跳转语句
3.1顺序控制语句
指按照语句在程序中出现的先后次序一条一条的顺次执行。
包含声明语句,表达式语句,输入输出语句等。
3.1.1表达式语句
任何一个表达式(上一章中给出了详细介绍)后面加上一个分号就构成了表达式语句(没有分号的不是语句)。
常见的表达式语句有以下几种:
空语句、赋值语句、函数调用语句等。
空语句:
指只有一个分号而没有表达式的语句,它不作任何操作和运算。
格式为:
;
空语句被用在程序的语法上要求一条语句而逻辑上却不需要的时候。
函数调用语句:
是由函数调用表达式加一个语句结束标志(分号“;
”)构成的语句。
函数的定义和使用请参见第五章中的详细介绍。
3.1.2输入/输出语句
C++程序没有输入/输出语句,它的输入/输出功能由函数(scanf、printf)或流控制来实现。
printf和scanf是标准的输入输出函数,主要在C程序设计中使用,其声明包含在头文件stdio.h中。
在C++中,I/O流完全取代了它们,使用I/O流输入输出时,必须包含头文件iostream.h。
从键盘输入语句格式为:
表达式1[>
表达式2>
…];
向屏幕输出语句格式为:
表达式1[<
表达式2<
注意:
连续输入多项数据时应键入空白字符(包括空格键、回车键和Tab键)将相邻的两项数据分开。
而连续输出时,cout不会在相邻数据项间加分隔符,为了增强显示效果,用户可通过控制符自定义显示宽度,换行等(部分控制符在iomanip.h头文件中声明)。
3.1.3复合语句
C++语言允许把一组语句用一对花括号括起来,构成一个复合语句。
复合语句被视为一个独立的单元它可以出现在程序中任何单个语句可以出现的地方复合语句不需要用分号作为结束。
注意空语句;
和空复合语句{}是等价的。
3.2选择控制语句
针对于不同情况采用不同的处理方式的问题,用选择结构来实现。
选择语句包含:
if语句和switch语句。
3.2.1if语句
if语句:
if(<
条件表达式>
)<
语句>
作用:
当<
为真时,执行<
,否则直接执行if语句后边的语句。
这里的<
可以是一条语句,也可以是几条语句,但对于多条语句的情况必须用{}将几条语句括起来构成复合语句,在if语句中当做一个整体处理。
if…else语句:
)
语句1>
else
语句2>
为假时,执行<
这里<
和<
可以是一条语句也可以是复合语句。
说明:
①if语句有时可以用条件表达式替代。
②if语句支持多种形式的嵌套使用,但一般嵌套层次不超过三层。
另外约定else总是与它上边最近的一个if配对。
为了防止语法或逻辑错误的发生,建议在较复杂的情形中使用花括号区分。
3.2.2switch语句
switch(<
){
case<
常量表达式1>
:
语句序列1>
常量表达式2>
语句序列2>
…
常量表达式n>
语句序列n>
[default:
语句序列n+1>
]
作用:
计算<
判断它与哪个<
常量表达式>
匹配,执行第一个相匹配的<
后的语句,直到遇到break转去执行switch语句以外的语句;
如果均不匹配则执行default后定义的