大大缩短了软件开发周期, 并使
C++语言是目
它设计的出发点就是为了能更直接
面向对象的编程语言将客观事物看作具
第 一 章 概述
1-1 简述计算机程序设计语言的发展历程。
解:
迄今为止计算机程序设计语言的发展经历了机器语言、汇编语言、高级语言等阶段,
言是一种面向对象的编程语言,也属于高级语言。
1-2 面向对象的编程语言有哪些特点?
解:
面向对象的编程语言与以往各种编程语言有根本的不同,
的描述客观世界中存在的事物以及它们之间的关系。
有属性和行为的对象, 通过抽象找出同一类对象的共同属性 (静态特征) 和行为(动态特征) ,
形成类。 通过类的继承与多态可以很方便地实现代码重用,
得软件风格统一。因此,面向对象的编程语言使程序能够比较直接地反问题域的本来面目,
软件开发人员能够利用人类认识事物所采用的一般思维方法来进行软件开发。
前应用最广的面向对象的编程语言。
1-3 什么是结构化程序设计方法?这种方法有哪些优点和缺点?
解:
结构化程序设计的思路是: 自顶向下、 逐步求精; 其程序结构是按功能划分为若干个基本模
块;各模块之间的关系尽可能简单, 在功能上相对独立; 每一模块内部均是由顺序、选择和
循环三种基本结构组成; 其模块化实现的具体方法是使用子程序。
结构化程序设计由于采用
了模块分解与功能抽象, 自顶向下、 分而治之的方法, 从而有效地将一个较复杂的程序系统
设计任务分解成许多易于控制和处理的子任务,便于开发和维护。
虽然结构化程序设计方法具有很多的优点,
据和处理数据的过程分离为相互独立的实体。
进行相应的修改,每一种相对于老问题的新方法都要带来额外的开销,程序的可重用性差。
由于图形用户界面的应用, 程序运行由顺序运行演变为事件驱动, 使得软件使用起来越来越
方便, 但开发起来却越来越困难, 对这种软件的功能很难用过程来描述和实现,
程的方法来开发和维护都将非常困难。
1-4 什么是对象?什么是面向对象方法?这种方法有哪些特点?
解:
从一般意义上讲, 对象是现实世界中一个实际存在的事物,
它可以是有形的, 也可以是无形
的。对象是构成世界的一个独立单位, 它具有自己的静态特征和动态特征。 面向对象方法中
的对象, 是系统中用来描述客观事物的一个实体,
它是用来构成系统的一个基本单位, 由一
组属性和一组行为构成。
面向对象的方法将数据及对数据的操作方法放在一起,
--对象。对同类型对象抽象出其共性,形成类。类中的大多数数据,只能用本类的方法进行
处理。类通过一个简单的外部接口,与外界发生关系,对象与对象之间通过消息进行通讯。
这样,程序模块间的关系更为简单,程序模块的独立性、数据的安全性就有了良好的保障。
通过实现继承与多态性, 还可以大大提高程序的可重用性, 使得软件的开发和维护都更为方
便。
面向对象方法所强调的基本原则, 就是直接面对客观存在的事物来进行软件开发,
日常生活中习惯的思维方式和表达方式应用在软件开发中,使软件开发从过分专业化的方
法、规则和技巧中回到客观世界,回到人们通常的思维。
1-5 什么叫做封装?
解:
当数据结构改变时, 所有相关的处理过程都要
但它仍是一种面向过程的程序设计方法,
它把数
作为一个相互依存、 不可分离的整体
C++语
使用面向过
将人们在
0
1.易于物理实现; 2.二进制数运算简单;
封装是面向对象方法的一个重要原则,就是把对象的属性和服务结合成一个独立的系统单
位,并尽可能隐蔽对象的内部细节。
1-6 面向对象的软件工程包括哪些主要内容?
解:
面向对象的软件工程是面向对象方法在软件工程领域的全面应用,它包括面向对象的分析
(OOA)、面向对象的设计( OOD)、面向对象的编程( OOP)、面向对象的测试( OOT)和面
向对象的软件维护( OOSM)等主要内容。
1-7 简述计算机内部的信息可分为几类?
解:
计算机内部的信息可以分成控制信息和数据信息二大类;控制信息可分为指令和控制字两
类;数据信息可分为数值信息和非数值信息两类。
1-8 什么叫二进制?使用二进制有何优点和缺点?
解:
二进制是基数为 2,每位的权是以 2 为底的幂的进制,遵循逢二进一原则,基本符号为
和 1。采用二进制码表示信息,有如下几个优点:
3.机器可靠性高; 4.通用性强。其缺点是它表示数的容量较小,表示同一个数,二进制较其
他进制需要更多的位数。
1-9 请将以下十进制数值转换为二进制和十六进制补码:
(1) 2 ( 2)9 ( 3) 93
(4) -32 (5)65535 ( 6) -1
解:
(1) ( 2) 10 = (10) 2 = ( 2) 16
(2) ( 9) 10 = (1001) 2 = ( 9) 16
(3) ( 93)10 = ( 1011101)2 = (5D) 16
(4) ( -32) 10 = (11100000 ) 2 = ( E0)16
(5) ( 65535) 10 = ( 11111111 11111111 )2 = (FFFF) 16
(6) ( -1) 10 = (11111111 11111111 )2 = (FFFF) 16
1-10 请将以下数值转换为十进制:
(1)( 1010) 2 ( 2)( 10001111) 2 ( 3)( 01011111 11000011 ) 2
(4)( 7F) 16 (5)( 2D3E) 16 ( 6)( F10E) 16
解:
(1)( 1010) 2 = ( 10)10
(2)( 10001111) 2 = ( 143) 10
(3)( 01011111 11000011 ) 2 = ( 24515) 10
(4)( 7F) 16 = ( 127) 10
(5)( 2D3E) 16 = ( 11582) 10
(6)( F10E)16 = ( 61710)10
1-11 简要比较原码、反码、补码等几种编码方法。
解:
原码: 将符号位数字化为 0 或 1,数的绝对值与符号一起编码, 即所谓 "符号──绝对值表
示" 的编码。
正数的反码和补码与原码表示相同。
负数的反码与原码有如下关系:
符号位相同 (仍用 1 表示 ),其余各位取反 (0 变 1, 1 变 0)。
C++简单程序设计
C,二是支持面向对象的方法。 C++是一
C++比 C 更安全, C++的编译系统能检查出更
补码由该数反码的最末位加 1 求得。
第 二 章
2-1 C++语言有那些主要特点和优点?
解:
C++语言的主要特点表现在两个方面,一是全面兼容
个更好的 C,它保持了 C 的简洁、高效、接近汇编语言、具有良好的可读性和可移植性等特
点,对 C 的类型系统进行了改革和扩充,因此
多的类型错误。 C++语言最重要的特点是支持面向对象。
2-2 下列标识符哪些是合法的 ?
Program, -page, _lock, test2 , 3in1, @mail , A_B_C_D
解:
Program, _lock, test2, A_B_C_D 是合法的标识符,其它的不是。
2-3 例 2.1 中每条语句的作用是什么?
#include
void main(void)
{
cout<<"Hello!\n";
cout<<"Welcome to c++!\n";
}
解:
#include // 指示编译器将文件 iostream.h 中的代码
// 嵌入到该程序中该指令所在的地方
void main() // 主函数名, void 表示函数没有返回值
{ // 函数体标志
cout<<"Hello!\n"; // 输出字符串 Hello! 到标准输出设备(显示器)上。
cout<<"Welcome to c++!\n"; // 输出字符串 Welcome to c++!
}
在屏幕输出如下:
Hello!
Welcome to c++ !
2-4 使用关键字 const 而不是 #define 语句的好处有哪些?
解:
const 定义的常量是有类型的,所以在使用它们时编译器可以查错;而且,这些变量在调试
时仍然是可见的。
2-5 请写出 C++语句声明一个常量 PI,值为 3.1416;再声明一个浮点型变量 a,把 PI 的值赋
给 a。
解:
const float PI = 3.1416;
float a = PI;
2-6 在下面的枚举类型中, Blue 的值是多少?
enum COLOR { WHITE, BLACK = 100, RED, BLUE, GREEN = 300 };
解:
Blue = 102
2-7 注释有什么作用? C++中有哪几种注释的方法?他们之间有什么区别
?
"//" ,从 "//" 开始,直到它所在行的行尾,所有字符都被
x = 5 + 7是一个表达式,它的值为 12。
以便于阅读。 编译系统在对源程序进行编译
而且由于编译时忽略注释
适当地使用注释, 能够提高程
C 语言方法,使用 "/*" 和"*/"
解:
注释在程序中的作用是对程序进行注解和说明,
时不理会注释部分, 因此注释对于程序的功能实现不起任何作用。
部分, 所以注释内容不会增加最终产生的可执行程序的大小。
序的可读性。在 C++中,有两种给出注释的方法:一种是延用
括起注释文字。另一种方法是使用
作为注释处理。
2-8 什么叫做表达式? x = 5 + 7 是一个表达式吗?它的值是多少?
解:
任何一个用于计算值的公式都可称为表达式。
2-9 下列表达式的值是多少?
1. 201 / 4
2. 201 % 4
3. 201 / 4.0
解:
1. 50
2. 1
3. 50.25
2-10 执行完下列语句后, a、b、c 三个变量的值为多少?
a = 30;
b = a++;
c = ++a;
解:
a: 32 ; b:30 ; c:32;
2-11 在一个 for 循环中,可以初始化多个变量吗?如何实现?
解:
在 for 循环设置条件的第一个 ";" 前,用,分隔不同的赋值表达式。
例如:
for (x = 0, y = 10; x < 100; x++, y++)
2-12 执行完下列语句后, n 的值为多少?
int n;
for (n = 0; n < 100; n++)
解:
n 的值为 100
2-13 写一条 for 语句,计数条件为 n 从 100 到 200,步长为 2;然后用 while 和 do, while
语句完成同样的循环。
解:
for 循环:
for (int n = 100; n <= 200; n += 2);
while 循环:
int x = 100;
while (n <= 200)
n += 2;
do, while 循环:
int n = 100;
do
{
n += 2;
} while(n <= 200);
2-14 if ( x = 3 ) 和 if (x = = 3) 这两条语句的差别是什么?
解:
语句 if(x = 3)把 3 赋给 x,赋值表达式的值为 true ,作为 if 语句的条件;语句 if(x == 3)首先判
断 x 的值是否为 3,若相等条件表达式的值为 ture ,否则为 false。
2-15 什么叫做作用域?什么叫做局部变量?什么叫做全局变量,如何使用全局变量?
解:
作用域是一个标识符在程序正文中有效的区域。
量;全局变量,就是具有文件作用域的变量。
局部变量, 一般来讲就是具有块作用域的变
2-16 已知 x、y 两个变量,写一条简单的 if 语句,把较小的的值赋给原本值较大的变量。
解:
if (x > y)
x = y;
else // y > x || y == x
y = x;
2-17 修改下面这个程序中的错误,改正后它的运行结果是什么?
#include
void main()
int i
int j;
i = 10; /* 给 i 赋值
j = 20; /* 给 j 赋值 */
cout << "i + j = << i + j; /* 输出结果 */
return 0;
}
解:
改正:
#include
int main()
{
int i;
int j;
i = 10; // 给 i 赋值
j = 20; /* 给 j 赋值 */
cout << "i + j = " << i + j; /* 输出结果 */
return 0;
}
程序运行输出:
i + j = 30
2-18 编写一个程序,运行时提示输入一个数字,再把这个数字显示出来。
解:
源程序:
#include
int main()
{
int i;
cout << "请输入一个数字: ";
cin >> i;
cout << "您输入一个数字是 " << i << endl;
return 0;
}
程序运行输出:
请输入一个数字: 5
您输入一个数字是 5
2-19 C++有哪几种数据类型?简述其值域。编程显示你使用的计算机中的各种数据类型的字
节数。
解:
源程序:
#include
int main()
{
cout << "The size of an int is:\t\t" << sizeof(int) << " bytes.\n";
cout << "The size of a short int is:\t" << sizeof(short) << " bytes.\n";
cout << "The size of a long int is:\t" << sizeof(long) << " bytes.\n";
cout << "The size of a char is:\t\t" << sizeof(char) << " bytes.\n";
cout << "The size of a float is:\t\t" << sizeof(float) << " bytes.\n";
cout << "The size of a double is:\t" << sizeof(double) << " bytes.\n";
return 0;
}
程序运行输出:
The size of an int is: 4 bytes.
The size of a short int is: 2 bytes.
The size of a long int is: 4 bytes.
The size of a char is: 1 bytes.
The size of a float is: 4 bytes.
The size of a double is: 8 bytes.
2-20 打印 ASCII码为 32~127 的字符。
解:
#include
int main()
{
for (int i = 32; i<128; i++)
cout << (char) i;
return 0;
}
程序运行输出:
!"#$%G'()*+ , ./0123456789:;<>?@ABCDEFGHIJKLMNOP_QRSTUVWXYZ[\]^'abcdefghijklmnopqrs
tuvwxyz<|>~s
2-21 运行下面的程序,观察其输出,与你的设想是否相同?
#include
int main()
{
unsigned int x;
unsigned int y = 100;
unsigned int z = 50;
x= y - z;
cout << "Difference is: " << x;
x = z - y;
cout << "\nNow difference is: " << x <
int main()
{
int myAge = 39; // initialize two integers
int yourAge = 39;
cout << "I am: " << myAge << " years old.\n";
cout << "You are: " << yourAge << " years old\n";
myAge++; // postfix increment
++yourAge; // prefix increment
cout << "One year passes...\n";
cout << "I am: " << myAge << " years old.\n";
cout << "You are: " << yourAge << " years old\n";
cout << "Another year passes\n";
cout << "I am: " << myAge++ << " years old.\n";
cout << "You are: " << ++yourAge << " years old\n";
cout << "Let's print it again.\n";
cout << "I am: " << myAge << " years old.\n";
cout << "You are: " << yourAge << " years old\n";
return 0;
}
解:
程序运行输出:
I am 39 years old
You are 39 years old
One year passes
I am 40 years old
You are 40 years old
Another year passes
I am 40 years old
You are 41 years old
Let's print it again
I am 41 years old
You are 41 years old
2-23 什么叫常量?什么叫变量?
解:
所谓常量是指在程序运行的整个过程中其值始终不可改变的量,
可以为常量命名, 这就是符号常量; 在程序的执行过程中其值可以变化的量称为变量,
是需要用名字来标识的。
2-24 变量有哪几种存储类型?
解:
变量有以下几种存储类型:
auto 存储类型:采用堆栈方式分配内存空间,属于一时性存储,其存储空间可以被若干变
量多次覆盖使用;
register 存储类型:存放在通用寄存器中;
extern 存储类型:在所有函数和程序段中都可引用;
static 存储类型:在内存中是以固定地址存放的,在整个程序运行期间都有效。
2-25 写出下列表达式的值:
1. 2 < 3 && 6 < 9
2. ! ( 4<7 )
3. ! ( 3 > 5) || (6 < 2 )
解:
除了用文字表示常量外, 也
变量
1. true
2. false
3. true
2-26 若 a = 1, b = 2, c = 3,下列各式的结果是什么 ?
1. a | b - c
2. a ^ b & -c
3. a & b | c
4. a | b & c
解:
1. -1
2. 1
3. 3
4. 3
2-27 若 a = 1,下列各式的结果是什么 ?