C++程序设计提纲及习题集上.docx
《C++程序设计提纲及习题集上.docx》由会员分享,可在线阅读,更多相关《C++程序设计提纲及习题集上.docx(21页珍藏版)》请在冰豆网上搜索。
C++程序设计提纲及习题集上
第一章绪论
内容摘要:
一.计算机工作原理
1.冯·诺依曼提出的三大基本思想
2.计算机内部存储信息的形式(原码、反码、补码和ASCII码)
3.存储程序的思想
二.程序设计语言的基础知识
1.机器语言的概念
2.汇编语言的概念
3.语言处理程序的概念与功能
4.面向过程的高级语言
5.面向对象的可视化语言
三.C++调试程序的步骤
四.面向对象方法的基本概念
1.OOP的概念
OOP(Object-orientedProgramming),即面向对象的程序设计方法,并不是一种程序设计语言,而是一种新的概念-关于数据、过程和它们之间关系的一种新的思考方法,它所依赖的最基本的概念是封装性和可重用性。
OOP所具有的新意是数据与过程的统一,即把数据和过程看作一个整体对象。
2.OOP技术的基本元素
·对象
对象是OOP技术的核心。
所谓对象,从理论上说就是对客观世界事物的表示和描述;从程序设计的角度,就是数据以及对这些数据进行操作代码封装在一起所构成的独立实体,它是类的一个实例。
对象是在程序执行过程中由其所属的类动态生成的,一个类可以生成多个不同的对象。
对象里的数据只能由对象的代码来访问,而代码是对象私有的,不能被其它对象所修改。
·消息
消息是要求某个对象执行某个功能操作的规格说明,对象只有接收到消息时,其行为才能被激活。
在C++中,消息实质上对应对象成员函数的调用。
·方法
方法是指实现对象所具有的功能操作的代码,体现了对象的一种行为。
方法由方法名和对应的一组代码组成,对象中可包括多个方法,不同的对象对同样的消息会做出不同的响应。
在C++中,方法实质上是对象中的成员函数。
·类
类是对一组对象的抽象归纳,亦即:
对一组具有相同数据成员和相同操作成员对象的定义或说明。
·继承
继承是类与类之间的一种相互关系,即联结类与类之间层次关系的模型,类继承其超类的特点,属于子类中的对象,自然也有所属父类的性质和功能。
继承的一个重要作用是在多个对象中免除了重复部分的代码。
继承是一个能自动传播代码的工具。
五个基本元素之间的关系:
对象是由数据和代码组成的不可分割的整体。
消息传递给对象,然后激活在对象中的方法和代码。
对象可按类划分,它们的许多性质和功能可以从其上层类中得到继承。
3.OOP技术的特点
·OOP的封装性减少了模块间的相互影响,从而简化了系统的复杂性。
·隐藏的方法代码和消息激活方式使程序设计者的工作从以程序性为主变革到非程序性为主
·OOP中的继承性避免了系统中的冗余现象。
·OOP中的封装性和代码的可重用性原理是提高软件开发生产率的关键。
五.C++语言与OOP的基本特征
1.封装在C++中的实现
把一个数据结构同操作的函数(行为或方法)组合在一起,封装借助新的数据类型-类实现的。
2.可重用性在C++中实现
以类的继承和派生的方式实现程序的重用机制。
3.多态性
通过函数与运算符重载,通过派生类中虚函数的多重定义,实现多种情况下的多态特征,明显提高程序水平。
4.通过模板等特征实现了类型和函数定义的参数化,进一步提高抽象的层次。
习题
一.简答题
1.解释语言处理程序的概念和功能。
2.解释面向对象程序语言中的“类”、“对象”、“继承”的概念。
3.面向对象的程序设计语言有哪些基本特征?
在C++中如何实现的。
二.填空题
1.C++程序设计语言中处理数据的函数实质上是OOP中的[1],它与[2]被封装在一个单元中。
2.C++程序设计语言源自于[3],它在[4]的基础上增加了面向对象的特征。
3.面向对象程序语言是通过[5]来访问数据的。
4.C++语言是面向[6]的语言,C语言是面向[7]的语言。
5.用C++语言书写的源程序要经过[8]处理方式将其处理成目标程序,目标程序要经过[9]处理过程,最终形成可执行程序。
6.若一整数的原码为01100100,则其反码是[10]、补码为[11]。
7.若一整数的原码为11100100,则其反码是[12]、补码为13]。
8.补码的补码是[14]。
9.计算机惟一能够识别的程序是[15]语言程序。
10.存储程序的思想是指计算机在执行某一程序代码时,首先将该程序代码调入[16],然后进行自动执行的过程。
第二章C++语言初步
一.C++语言的基本符号
1.字符集
字符集是构成C++语言程序的基本元素。
用C++语言编写程序时,除字符型数据外,其它所有的成分都只能由字符集中的字符构成。
C++字符集有:
·英文字母:
A-Z;a-z
·数字字符:
0-9数字
·特殊字符:
空格!
#%^*—(下划线)+=-~<>/\'";.,()[]{}
2.词法记号
词法记号是最小的词法单元,由一个或多个基本符号组成。
·关键字
关键字是C++预定义的单词,具有专门的含义。
如:
voidchar#includebooldefaultconstauto等
·标识符
标识符是程序员在程序中声明的单词,命名程序正文中的一些实体。
如:
函数名、变量名、数组名、类名、对象名等。
C++标识符的构成原则:
I.以字母或下划线开始
II.由字母、数字、下划线构成
III.标识符区分英文字母的大小写
IV.不能是C++关键字
·文字
文字是在程序中直接用符号表示的数据,包括数字、字符、字符串和布尔文字。
·操作符(运算符)
操作符是用于表示各种运算(加工)的符号。
如:
*,/,+等。
·分隔符
分隔符用于分隔各个词法记号或程序正文,它不表示任何操作,仅用于构造程序。
如:
(),{},空格等。
·空白
程序在编译时,编译器将程序正文分解为词法记号和空白。
空白:
空格符、制表符、换行符和注释。
空白用于指示词法记号的开始和结束位置,其余的空白将被忽略。
因此,在程序正文中凡是空格的地方,都可换行。
C++中的注释:
I.用“/*”与“*/”括起来的文字。
II.从“//”开始,直到它所在行尾的所有文字。
注释在程序中的作用是对程序进行注解和说明,编译时,注释被当作空白而忽略掉。
二.C++程序的基本框架
1.函数
·main()是C++程序中惟一必不可少的函数
·C++程序由main()或一个main()及其它函数组成
·C++程序的执行是从main()的第一条语句开始的,而与main()在程序中的书写位置无关
·main()函数在执行过程中,可调用其它函数,但不能被其它函数所调用。
其调用只能被操作系统自动调用,它是C++程序运行的入口。
·main()函数的返回值类型只能为void、int类型。
·main()函数可带参数。
2.译的预处理命令
·文件包含命令
格式:
#include#include"filename"
说明:
◆每一include命令只能指定一个包含文件
◆被包含文件的格式为文本文件且内容只能是C++的源程序
◆文件的包含可以嵌套
◆文件包含实质上是将多个文件的内容组合成一个源程序,作为一个整体进行编译,与链接的概念不同
·宏定义
不带参数的宏定义与带参数的宏定义
说明:
◆宏名习惯用大写字母命名,以示与变量的区别
◆使用宏名代替一个字符串,可以减少程序重复书写的工作量
◆在进行宏替换时,只作简单的字符串转换,并不作正确性检查
◆宏定义不是C++的语句,不必加分号。
如果加分号,则连同分号一起置换
◆宏名的有效范围为定义命令之后到源文件结束,可用#undef命令终止宏定义的作用域
◆在进行宏定义时,可以用已定义的宏名,层层置换
◆在字符串内所出现的宏名,属于字符串的内容,不进行置换
◆宏定义与变量不同,只作字符串替换,不分配内存空间
◆带参数宏的展开只是将语句中的宏名后括号内的实参字符串代替形参,其并没有类型的意义
◆宏替换不占运行时间,只占编译时间
三.C++中的I/O语句
1.I/O流
·C++中,将数据从一个对象到另一个对象的流动抽象为流。
·输入流:
数据从输入设备(键盘)、文件到内存(变量)的流动
·输出流:
数据从内存(变量)到输出设备(显示器)、文件的流动
·数据输入/输出的实现:
通过I/O流来实现的
·cin:
是系统预定义的流对象,用来处理标准输入(键盘输入)
·cout:
是系统预定义的流对象,用来处理标准输出(屏幕输出)
2.插入符与提取符
·插入符作用在cout上可实现屏幕输出,提取符作用在cin上可实现键盘输入
·在进行键盘输入时,空格或回车作为数据的分隔符
·在进行键盘输入时,以回车作为数据输入的结束标记
3.简单的I/O格式控制
要求:
必须有#include
格式控制:
dec十进制整型格式endl插入换行
hex十六进制整型格式setw(int)设置数据输出域宽
oct八进制整型格式setprecision(int)设置输出小数位数
第三章基本数据类型及基本运算
内容摘要:
一.基本数据类型及派生类型
1.数据类型的概念
数据类型研究的是数据存储属性及其操作属性,C++中数据都是有类型的,也就是讲,依据数据的操作属性与存储属性进行数据分类,是数据类型解决的问题。
数据类型的本质应从以下几个方面进行理解:
●每一项数据应惟一的属于某种类型
●每一数据类型意味着一个明确定义的值的集合
●同一类型的数据占用相同大小的内存空间
●同一类型的数据具有相同的运算操作集
学习数据类型达到的目的:
●解决数据在程序中如何表示
●解决数据在内存的存储-内存单元的分配(变量)
●解决数据加工的描述(运算符及表达式)
C++的数据类型
●基本类型:
系统预定义的类型
●导出类型:
同基本类型或自定义类型按某种规律构造的类型,如:
数组、枚举、结构体、共用体类型等。
2.基本类型
基本数据类型的特征:
●由系统定义与提供
●是构造其它类型的原始出发点
●几乎所有的高级程序设计语言都包含基本数据类型
整型数据类型
1)基本整型(int)
数据存储的形式:
补码
数据存储长度:
16位操作系统:
2字节;32位操作系统:
4个字节
取值范围:
或
2)短整型(类型修饰)
类型名:
shortint或short
数据存储长度:
不大于基本整型记住:
32位操作系统:
2个字节
3)长整型(类型修饰)
类型名:
longint或long
数据存储长度:
不小于基本整型。
记住:
32位操作系统:
4个字节
4)无符号整型(访问修饰)
其数据存储形式是将对应的整型类型的最高位不再处理为符号位,而是当作数据位,具体分类为:
实型数据类型
1)单精度实型
类型名:
float
存储长度:
4个字节
范围:
有效位:
7位
2)双精度实型
类型名:
double
存储长度:
8个字节
范围:
有效位:
位
字符型数据类型:
类型名:
char
存储长度:
1个字节
存储形式:
字符的ASCII码,与int类型通用
空类型:
类型名:
void
用途:
声明函数返回类型、函数的形参类型(无形参)、指针值类型
布尔类型(逻辑类型):
类型名:
bool
值:
逻辑真:
true-对应整型1;逻辑假:
false-对应整型0
存储长度:
1个字节
记住:
在C++中,将非零值解释为逻辑真,将零值解释为逻辑假
二.说明语句
1.语句
语句是C++程序中的基本功能单元,意味着某种处理动作或处理序列。
语句的分类:
⏹说明语句:
定义性说明语句:
创建对象、初始化对象
引用性说明语句:
对已创建对象进行引用性说明,不允许初始化
⏹表达语句:
由表达式加分号构成
⏹函数调用语句:
由函数调用加分号构成
⏹控制语句:
用于改变程序的执行顺序。
分为条件控制语句(分支、循环)与无条件控制语句(return、break、continue)
⏹复合语句:
由花括号括起来的语句序列,当作一组,也称块语句。
⏹空语句:
由独立的分号构成,表示空操作。
2.常量与变量
1)常量
概念:
在程序运行过程中不能改变的数值,可分为字面常量与符号常量(有名常量)。
常量有确定的类型。
各类字面常量的描述
整型常量(十进制、八进制、十六进制);实常量(小数形式、指数形式);字符常量(转义字符、\ddd、\xdd形式);字符串常量(字符串);布尔常量(true、false)。
注意:
◆实常量在C++中按double型处理,若强型按float型处理需加f后缀
◆字符数据可解释为1个字节的整型
◆字符串实质是字符数据的构造类型(连续存储)及其串长的概念
◆在整常量加L、u后缀分别表示长整型与无符号整型。
符号常量:
const修饰限定;无参数的宏定义
记住:
const常量分配相应的内存单元,但其值不允许改变。
而宏无类型、无内存单元,仅是字符串置换。
2)变量
实质:
◆赋给变量一标识符作为其名
◆指定变量存储数据的类型
◆定义变量,分配相应的内存单元
变量的值:
存放在对应内存单元的内容
变量的定义与初始化(两种形式)
3.关于字符型数据的输入/输出再讨论
问题的提出:
cin>>变量名;对字符型数据无法输入空格
问题的解决:
◆cin.get(c)可完成任意键盘输入的字符
◆变体:
cin.get(c).get(c)┉;可完成多字符输入
◆字符输出:
cout.put(c)
字符串的拼接:
任何两个由空格分隔的字符串常量自动合并拼接成一个字符串
4.用typedef进行类型定义
三.运算符
1.运算符要求掌握的要素
◆运算符的功能
◆运算符与操作数的关系(操作数的数目、操作数的类型)
◆运算符的优先级别(不同级运算符的运算顺序)
◆运算符的结合方向(同级运算符的运算顺序)
2.基本的运算符
算术运算符:
+-*/%
赋值运算符:
=
自增、自减运算符:
++--
关系运算符:
<<=>>=(同级,高)
==!
=(同级,低)
逻辑运算符:
!
(单目)&&||(优先级顺序)
位运算符:
<<>>~&^|(优先级顺序)
复合的赋值算符:
+=-=*=/=%=<<=>>=|=^=&=
条件算符、逗号运算符、求字节运算符、强制类型转换算符
说明:
⏹算术算符中的除运算符,若操作数都为整型,则结果为整型
⏹算术算符中的%运算符要求操作数为整型
⏹自增、自减算符只能作用于左值对象
⏹关系运算与逻辑运算的结果为整型数据,因此其表达式可作为其它表达式中的操作数
⏹在由&&和||运算符组成的逻辑表达中,只对能够确定整个表达式值所需要的最少数目的子表达式进行运算
⏹位运算符只能作用于整型数据与字符型数据,其结果为算术值
⏹并非所有的双目算符与赋值算符都能构成复合的赋值算符
⏹sizeof算符的运算对象若为数组名,其结果为数组所有元素字节数的总和
3.算符的优先级别
C++算符优先级别由高到低的顺序为:
元素/成员算符→单目算符→双目算符→条件算符→赋值算符→逗号算符
双目算符优先级别由高到低的顺序为:
算术算符→移位算符→关系算符→逻辑位运算符→逻辑运算符
4.运算符的结合性
右结合性:
单目算符、条件算符、赋值算符(复合赋值算符)
左结合性:
双目算符、逗号算符
5.表达式的值和类型
表达式的类型由运算符的类型与操作数的类型确定,其类型转换包括隐含(自动)转换(由系统自动完成)与强制类型转换
在下述三种情形下,若出现类型不同情况时,系统将进行隐含转换:
⏹赋值运算时,右值的类型与左值的类型不同时
⏹表达式中包含不同类型的操作数时
⏹函数调用,实参与形参的类型不一致时
记住,表达式中操作数类型自动转换原则如下:
⏹自动整型提升:
表达式中将逻辑型、字符型、短整型自动转换为整型
⏹不同类型进行运算时,将较小类型转换为较大类型
记住,整型从小到大的顺序为:
bool、char、signedchar、unsignedchar→short→unsignedshort→int→unsignedint→long→unsignedlong
浮点类型从小到大的顺序为:
float→double→longdouble
结论:
表达式的类型在完成整型提升后,为操作数中类型最高的类型
习题
一.名词解释
数据类型;变量;流;输入流;输出流;
二.选择题
1.下面四组变量命名,完全符合C++变量命名原则的是()
A.data_classB.2001_classC.int_classD.Class
char_namenamechar_nameName
data-nameageint_ageAge/20
char_teltelchar_telTel
2.下面四组变量名命中,不符合C++变量命名规则的是()
A.ccB.6xC.wlD.ye_78
Avercharyear78wo
3.下面四组标识符中属于C++关键字的是()
A.boolB.doubleC.sizeofD.包括A、B、C
forfloatif
constlongshort
staticvoidreturn
4.下面四组标识符中不属于C++关键字的是()
A.switchB.breakC.mainD.continue
falsecharcincase
5.假设有两个变量a=65432和b=a*2,在保证数据正确存储的前提下,以下变量类型定义错误的是()
A.inta;B.unsignedshorta;C.unsignedshorta;D.inta;
intb;signedintb;unsignedshortb;signedintb;
6.假设有变量a、b和p均已经定义如下,计算结果不精确的是()
inta=3,b=4;doublep;
A.p=(double)a/(a+b)B.p=a/(a+b)
C.p=double(a)/(a+b)D.p=double(a)/double(a+b)
7.以下程序运行时,最后一次num和static_num的输出值是()
A.num=0static_num=9B.num=1static_num=9
C.num=9static_num=9D.num=0static_num=10
#include
voidtest()
{
intnum=0;
staticintstatic_num=0;
cout<<"num="<<<"static_num="<num++;
static_num++;
}
voidmain()
{
for(inti=0;i<10;i++)
test();
}
8.以下程序的输出结果是()
A.t1=trueB.t1=8C.t1=falseD.t1=1
t2=falset2=0t2=truet2=0
t3=truet3=-1t3=falset3=1
#include
voidmain()
{
boolt1=8;
boolt2=0;
boolt3=-1;
cout<<"t1="<cout<<"t2="<cout<<"t3="<}
9.类型修饰符unsigned修饰类型错误的是()
A.charB.shortC.longintD.double
10.下列十六进制的整常数表示中,错误的是()
A.0xafB.0x1bC.2fxD.0xAE
11.下列double型常量的表示中,错误的是()
A.E15B..35C.3E5D.3E-5
12.下列字符常量表示中,错误的是()
A.'\105'B.‘*’C.'\4f'D.'\a'
13.下面表示引用的方法中,正确的是()
已知:
intm=10;
A.int&x=m;B.int&y=10;C.int&z;D.float&t=m;
14.下列算术算符中,能作用于实型数据类型的是()
A.++B.%C.>>D.&
15.下列各算术运算符是,不能作用于实型数据类型的是()
A./B.&&C.!
D.~
16.下列各运算符中,优先级最高的是()
A.+(加运算符)B.*(单目)C.<=D.*=
17.下列各运算符中,优先级最低的是()
A.?
:
B.|C.||D.!
=
18.下列各运算符中,结合性从左到右的是()
A.三目算符B.赋值算符C.比较算符`D.单目算符
19.下列表达式中,非法的是()
已知:
inta=5;floatb=5.5;
A.a%3+bB.b*b&&++aC.(a>b)+(int(b)%2)D.---a+b
20.下列表达式中,合法的是()
已知:
doublea=3.4;intb=3;
A.a<<2B.(a+b)|bC.!
a*=bD.a=5,b=3.1,a+b
21.下列关于类型转换的描述中,错误的是()
A.在不同类型操作数组成的表达式中,其表达式类型一定是最高类型double
B.逗号表达式的类型是最后一个表达式的类型
C.赋值表达式的类型是左值的类型
D.在由低向高的类型转换中是保值映射
22.假设有0xaf和0xa7两个十六进制数,若用^运算符,其运算结果是()
A.0xa2B.0xffC.0x5dD.0x5f
23.下列语句中不能完成算术表达式65*4/2操作的是()
A.inta=64,b=4,c=2;B.intz=64*4/2;
intz=a*b/2
C.inta=64,b=4,c=2;D.intz=64<<2>>1;
intz=a<>c;
24.假设有a和b两个数要求比较大小,然后将数值小的数乘以2并输出结果,以下程序段中不能完成此要求的是()
A.a
min=a:
min=b;min*=2;cout<<”min=”<B.if(a
C.a
min=a:
min=b;min=min<<1;cout<<”min=”<D.a
min=a:
min=b;min=min>>1;cout<<”min=”<25.以下程序的输出结果是()
A.falseB.5C.1D.true
#include