admin 管理员组

文章数量: 887021


2023年12月16日发(作者:transient英文解释)

练习题1

1.1 判断题

×1.C++语言和C语言都是面向对象的程序设计语言。

√2.面向对象方法具有封装性、继承性和多态性。

√3.C语言是C++语言的一个子集。C++语言继承了C语言。

×4.C++语言程序与C语言程序一样都是函数串。

×5.C++语言支持封装性和继承性,不支持多态性。

√6.C++语言比C语言对数据类型要求更加严格了。

√7.C++语言对C语言进行了一次改进,使得编程更加方便了。

×8.C++源程序在编译时可能出现错误信息,而在连接时不会出现错误信息。

√9.编译C++源程序时,出现了警告错(Warning)也可以生成可执行文件。

√10.C++语言程序的实现也要经过编辑、编译连接和运行3个步骤。

1.2 单选题

1.下列关于面向对象概念的描述中,错误的是( C )。

A.面向对象方法比面向过程方法更加先进

B.面向对象方法中使用了一些面向过程方法中没有的概念

C.面向对象方法替代了结构化程序设计方法

D.面向对象程序设计方法要使用面向对象的程序设计语言

2.下列各种高级语言中,不是面向对象的程序设计语言是( D )。

A.C++

C.VB

B.Java

D.C

3.下列关于类的描述中,错误的是( A )。

1

A.类就是C语言中的结构类型

B.类是创建对象的模板

C.类是抽象数据类型的实现

D.类是具有共同行为的若干对象的统一描述体

4.下列关于对象的描述中,错误的是( C )。

A.对象是类的一个实例

B.对象是属性和行为的封装体

C.对象就是C语言中的结构变量

D.对象是现实世界中客观存在的某种实体

5.下列关于C++程序中使用提取符和插入符的输入/输出语句的描述中,错误的是( C )。

A.提取符是对右移运算符(>>)重载得到的

B.插入符是对左移运算符(<<)重载得到的

C.提取符和插入符都是双目运算符,它们要求有两个操作数

D.提取符和插入符在输入/输出语句中不可以连用

1.3 填空题

1.C++语言具有面向对象方法中要求的三大特性: 封装性 、 继承性 和

多态性 。

2.C++程序中,有且仅有一个 主 函数。

3.C++程序是由 类 和 函数 组成的。

4.C++源程序的扩展名是 cpp 。

5.使用插入符进行标准输出文件输出时,使用的输出流对象名是 cout 。

2

1.6 通过对1.5题中3个程序的修改,回答下列问题

1. 从1.5题中第1题程序的修改中,总结出编程应该注意哪些问题。

答:C++程序要包含iostraem.h,main()函数前应加类型说明符void。

2. C++程序中所出现的变量是否必须先说明后使用?在函数体内说明变量时是否都要放在函数体的开头?

答:C++程序中所出现的变量必须先说明后使用。在函数体内说明变量时不一定要放在函数体的开头。

3. 使用cout和插入符(<<)输出字符串常量时应注意什么?

答:可输出一个字符串常量,也可输出多个字符串常量。每输出一个字符串常量要使用一次插入符(<<)。

4. 程序中定义过的变量,但没有赋值,也没有默认值,这时能否使用?

答:不能使用。因为它的值不确定。

5.一个程序编译通过并已生成执行文件,运行后并获得输出结果,这一结果是否一定正确?

答:不一定正确。可能还有算法错。

第2章 变量和表达式及数组

练习题2

2.1 判断题

√ 1.C++语言的合法字符集与C语言的完全相同。

× 2.标识符规定大小写字母没有区别。

× 3.C++程序中,不得使用没有定义或说明的变量。

√ 4.变量的存储类指出了变量的作用域和寿命。

3

√ 5.变量的数据类型指出了变量在内存中存放的字节数。

× 6.定义变量时,变量的存储类说明符不得省略。

× 7.自动类变量与内部静态类变量的作用域和寿命都是相同的。

× 8.自动类变量可以定义在函数体外,这时应加说明符auto。

× 9.外部类变量与外部静态类变量的作用域是相同的。

× 10.变量被定义后是否有默认值与存储类无关,与数据类型有关。

√ 11.C++程序中,通常使用const来定义符号常量,定义时必须指出类型。

× 12.变量被定义或说明后,它一定具有有意义的值。

× 13.字符串常量与字符常量的区别仅表现在定义形式上的不同,一个用双撇号,另一个用单撇号。

× 14.所有变量的可见性和存在性都是一致的。

√ 15.变量在它的作用域内一定是可见的,又是存在的。

√ 16.C++语言中除了包含C语言的所有运算符外,还规定自身的若干个运算符。

√ 17.增1和减1运算符以及赋值运算符都具有副作用。

× 18.增1和减1运算符不仅可以作用在变量上,也可以作用在表达式上。

× 19.关系运算符可以用来比较两个字符的大小,也可以比较两个字符串的大小。

× 20.移位运算符在移位操作中,无论左移还是右移,对移出的空位一律补0。

× 21.变量的类型高低是指它被存放在内存的地址值大小。

× 22.使用sizeof运算符可以求得某种类型和某个变量在内存中占的字节数,不能求得某个表达式的类型在内存中所占的字节数。

√ 23.在C++语言中,非保值转换应用强制类型转换。

4

√ 24.表达式中各操作数计算顺序取决于运算符的优先级和结合性。

√ 25.在C++程序中,变量值是可以改变的,变量的地址值是不能改变的。

√ 26.数组中所有元素的类型都是相同的。

× 27.定义数组时必须对数组进行初始化。

√ 28.数组某维的大小可以用常量表达式,不可用变量名。

× 29.定义一个数组没有对它进行初始化,则该数组的元素值都是无意义的。

√ 30.用来给数组进行初始化的初始值表内的数据项的个数必须小于等于数组元素个数。

× 31.在定义一个数组时,对其部分元素进行了初始化,没有初始化的元素的值都是无意义的。

√ 32.数组被初始化时是判越界的。

× 33.字符数组就是字符串。

√ 34.使用printf( )函数输出显示字符串时使用格式符%s,输出显示字符时使用%c或%d。

× 35.给数组元素赋值时只可用常量表达式。

2.2 单选题

1.下列变量名中,非法的是( C )。

A.A25

B.My_car

D.abc C.My-str

2.下列常量中,十六进制int型常量是( A )。

A.0x5f

C.046

B.x2a

D.7a

3.下列常量中,不是字符常量的是( B )。

5

A.'n'

C.'x'

B."y"

D.'7'

4.在函数体内定义了下述变量a,a的存储类为( D )。

int a;

A.寄存器类

C.静态类

B.外部类

D.自动类

5.下列关于变量存储类的描述中,错误的是( C )。

A.任何变量定义后都具有一个确定的存储类

B.变量的存储类确定了变量的作用域和寿命

C.定义变量时没有存储类说明符者一律为自动类

D.内部静态类变量和外部静态类变量的存储类说明符都是static

6.下列关于变量数据类型的描述中,错误的是( A )。

A.定义变量时int型数据类型可以省略

B.变量的数据类型可以决定该变量占内存的字节数

C.变量的数据类型是可以被强制的

D.变量的数据类型是有高低之分的

7.长双精度浮点型常量的后缀是( C )。

A.U

C.L

B.F

D.无

8.下列运算符中,不能用于浮点数操作的是( D )。

A.++

C.*=

B.+

D.&(双目)

9.下列运算符中,优先级最高的是( A )。

A.*(双目)

6

B.||

C.>> D.%=

10.下列运算符中,优先级最低的是( B )。

A.==

C.|

B.?:

D.&&

11.已知:int a(3);下列表达式中,错误的是( C )。

A.a%2==0

C.(a2)++

B.a--+2

D.a>>=2

12.已知:int b(5),下列表达式中,正确的是( D )。

A.b="a"

C.b%2.5

B.++(b1)

D.b=3,b+1,b+2

13.下列关于类型转换的描述中,错误的是( C )。

A.类型转换运算符是(<类型>)

B.类型转换运算符是单目运算符

C.类型转换运算符通常用于保值转换中

D.类型转换运算符作用于表达式左边

14.下列表达式中,其值为0的是( A )。

A.5/10

B.!0

C.2>4?0:1 D.2&&2||0

15.下列表达式中,其值不为逻辑值的是( A )。

A.算术表达式

C.逗号表达式

B.关系表达式

D.逻辑表达式

16.下列关于数组概念的描述中,错误的是( B )。

A.数组中所有元素类型是相同的

B.数组定义后,它的元素个数是可以改变的

7

C.数组在定义时可以被初始化,也可以不被初始化

D.数组元素的个数与定义时的每维大小有关

17.下列关于数组维数的描述中,错误的是( C )。

A.定义数组时必须将每维的大小都明确指出

B.二维数组是指该数组的维数为2

C.数组的维数可以使用常量表达式

D.数组元素个数等于该数组的各维大小的乘积

18.下列关于数组下标的描述中,错误的是( B )。

A.C++语言中数组元素的下标是从0开始的

B.数组元素下标是一个整常型表达式

C.数组元素可以用下标来表示

D.数组元素的某维下标值应小于该维的大小值

19.下列关于初始值表的描述中,错误的是( C )。

A.数组可以使用初始值表进行初始化

B.初始值表是用一对花括号括起的若干个数据项组成的

C.初始值表中数据项的个数必须与该数组的元素个数相等

D.使用初始值表给数组初始化时,没有被初始化的元素都具有默认值

20.下列关于字符数组的描述中,错误的是( D )。

A.字符数组中的每一个元素都是字符

B.字符数组可以使用初始值表进行初始化

C.字符数组可以存放字符串

D.字符数组就是字符串

21.下列关于字符串的描述中,错误的是( C )。

A.一维字符数组可以存放一个字符串

8

B.二维字符数组可以存放多个字符串

C.可以使用一个字符串给二维字符数组赋值

D.可以用一个字符串给二维字符数组初始化

22.已知:int a[5] = {1, 2, 3, 4}; 下列数组元素值为2的数组元素是( B )。

A.a[0]

C.a[2]

B.a[1]

D.a[3]

23.已知:int ab[ ][3] = {{1, 5, 6}, {3}, {0,2}}; 数组元素ab[1][1]的值为( A )。

A.0

C.2

B.1

D.3

24.已知:char s[ ]="abcd";输出显示字符'c'的表达式是( C )。

A.s

B.s+2

D.s[3] C.s[2]

25.已知:char ss[ ][6]={"while", "for", "else", "break"};输出显示"reak"字符串的表达式是( B )。

A.ss[3]

C.ss+3

2.3 填空题

1.C++语言中,基本数据类型包含有整型、 浮点型 、 字符型 、空值型和 布尔型 。

2.变量的存储类可分为 自动类 、 寄存器类 、 外邹类 和静态存储类。

3.浮点型常量可分为单精度、 双精度 和 长双精度 浮点型常量。

4.结合性从右至左的运算符有 单目运算符 、 双目运算符 和赋值运

9

B.ss[3]+1

D.ss[3][1]

算符。

5.条件表达式是由 三目 运算符组成的,该表达式的类型是由冒号左边和右边两个操作数中 类型高 的操作数类型决定的。

6.已知:double dd[ ][3]={{1.2, 2.4, 3.6}, {4.8, 5.2},{6.4}}; 这里dd是一个

二 维数组的数组名,该数组共有 9 个元素,每个元素的类型是

double 。数组元素dd[0][0]的值是 1.2 ,dd[1][1]的值是 5.2 ,数组元素dd[2][2]的值是 0 。

7.已知:char ss[ ][6]={"while", "break", "for", "else"}; 字符数组ss是 二

维数组,它的第1维大小应该是 4 。使用cout和<<输出字符串"for"时,对应的表达式是 ss+2 。使用cout和<<输出字符串"break"的子串"reak"时,对应的表达式是 ss[1]+1 。使用cout和<<输出字符串else中的字符's'时,对应的表达式是

ss[3][2] 。

2.5 编程题

1.已知:int a=3,b=5;编程计算下列两个代数式的值,并比较它们是否相等。

(a+b)2

a2+2ab+b2

答: 编程如下:

#include

void main()

{

int a=3,b=5;

10

int d1=(a+b)*(a+b);

int d2=a*a+2*a*b+b*b;

cout<<"d1="<

}

从结果中可以看出d1和d2值是相等的。

2.已知:int x=5;编程求下列代数式的值。

f(x)=3x3+2x2+5x+2

答:编程如下:

#include

void main()

{

int x=5;

int f=3*x*x*x+2*x*x+5*x+2;

cout<

}

3.从键盘上输入两个double型数,编程输出其中最小者。

答:编程如下:

#include

void main()

{

double a,b;

cout<<"请输入两个double型数:";

11

cin>>a>>b;

cout<<"输入的两个数中较小的是";

if(a<=b)

cout<

else

cout<

}

4.华氏温度转换成摄氏温度的计算公式如下:

C=(F32)*5/9

其中,C表示摄氏温度,F表示华氏温度。从键盘上输入一摄氏温度,编程输出对应的华氏温度。

答:编程如下:

#include

void main()

{

double c,f;

cout<<"请输入一个摄氏温度值:";

cin>>c;

f=9.0/5.0*c+32.0;

cout<<"摄氏温度为"<

}

5.

从键盘上输入5个浮点数,输出它们的和以及平均值。

12

答:编程如下:

#include

void main()

{

double a,b,c,d,e;

cout<<"请输入5个double型数:";

cin>>a>>b>>c>>d>>e;

double f=a+b+c+d+e;

cout<<"输入的5个数的和是"<

}

6. 将字符串"12345",逆向输出为"54321"。

答:编程如下:

#include

void main()

{

char a[]="12345";

cout<

}

2.6 简单回答下述问题

1. C++语言中注释符的格式如何?注释信息的功能是什么?

答:注释符格式有2种:

格式一: /* <注释信息> */

格式二: // <注释信息>

13

注释信息是用来对程序进行提示和说明的。

2. 使用const定义符号常量比使用#define定义符号常量有何优点?

答:使用const定义符号常量时要指出数据类型,而用#define定义符号常量时不需提出类型,因此前者比后者对类型要求更严格,这样会更安全。

3. 内部静态存储类变量有何特点?

答:内部静态存储类变贯的特点是作用域较小,但寿命很长,这种变量作用域与寿命不一致,因此会出现不可见但又存在的情况。

4. 在使用插入符(<<)输出若干个表达式值时,有的表达式中使用的运算符的优先级低于插入符优先级时应该如何处理?

答:这时需将表达式用括号括起来,己改变其优先级。

5.由多种不同运算符组成的表达式,其类型如何确定?例如,

int a, b, c;

a=b>c?b:c;

这是一个条件表达式还是赋值表达式?

答:表达式类型由优先级低的运算符组成的表达式来确定。

这是一个赋值表达式,因为赋值运算符优先级低于三目运算符。

6. 数组元素个数是由什么决定的?

答:数组元素个数是由维数及其大小来决定的。一维数组元素个数是该维的大小,二维数组的元素个数是两维大小之积等。

7. 数组元素下标有何规定?

答:C++语言中,数组元素下标从0开始。

8. 初始值表中数据项的类型和个数有何规定?

14

答:初始值表中数据项的类型应与该变是类型相同,个数应小于或等于被初始化的数组元素的个数。

9. 字符数组和字符串有什么关系?

答:字符数组中可存放字符串,而字符数组不都是存放字符串的。如果字符数组中有字符串结束符,则说明该字符数存放的是字符串。

10.一个数组中的元素类型是否一定相同?何时定义的数组元素具有默认值?

答:数组中元素类型必须相同。存储类为外部和静态的数组其元素具有默认值。

第3章 语句和预处理

练习题3

3.1 判断题

√ 1.表达式和表达式语句是不同的。

× 2.空语句是一种没有用处的语句。

× 3.复合语句就是分程序。

× 4.条件语句中if子句和else子句都是必须有并且仅有一个。

√ 5.条件语句中else if子句可以没有,也可以有多个。

√ 6.开关语句可实现多路分支。

× 7.开关语句的<语句序列>中必须有一个break语句,否则该开关语句便无法退出。

× 8.任何循环语句都是至少执行一次循环体。

× 9.退出for循环语句必须是for后面括号内的中间一个表达式的值为0。

15

√ 10.do-while循环语句至少要执行一次循环体。

× 11.循环语句的循环体中可以出现if语句,if语句的if体内不能出现循环语句。

× 12.goto语句中所使用的语句标号是一种标识符,它的作用域是文件级的。

√ 13.break语句和continue语句都可以出现在循环体中,但是它们的作用是不同的。

× 14.文件包含命令所能包含的文件类型是不受限制的。

3.2 单选题

1.下列关于语句的描述中,错误的是( A )。

A.C++程序中的函数是由若干条语句组成的

B.每条语句都要实现某种操作

C.条件语句是用来实现分支操作的

D.循环语句是用来在一定条件下重复执行某段程序的

2.下列关于条件语句的描述中,错误的是( C )。

A.if语句中最多只能有一个else子句

B.if语句的if体内可以出现开关语句

C.if语句中else if子句和else子句的顺序是没有限制的

D.if语句中else子句是与它最近的if子句配对的

3.下列关于开关语句的描述中,错误的是( B )。

A.开关语句中,case子句的个数是不受限制的

B.开关语句中,case子句的语句序列中一定要有break语句

C.开关语句中,default子句可以省略

D.开关语句中,右花括号具有退出开关语句的功能

16

4.下列关于循环语句的描述中,错误的是( A )。

A.while循环语句中<条件>给定的表达式不能为非0的常量,否则便是死循环

B.for循环语句的循环体内可以出现while循环语句、do-while循环语句和for循环语句

C.循环语句的循环体可以是空语句

D.循环语句的循环体内可以出现break语句,也可以出现continue语句

5.已知:int i(3);下列do-while循环语句的循环次数是( D )。

do{

cout<

i--;

}while(i!=0);

A.0

C.1

B.3

D.无限

6.下列for循环语句的循环次数是( B )。

for(int i(0), j(5); i=3; i++, j--);

A.3

C.5

B.无限

D.0

7.下列while循环语句的循环次数是( A )。

while(int i(0)) i--;

A.0

C.2

B.1

D.无限

8.下列程序段执行后,j值是( B )。

for(int i(0), j(0); i<10; i++)

17

if(i) j++;

A.0

C.10

B.9

D.无限

9.已知:typedef char CH;下列描述中,正确的是( A )。

A.使用CH定义的变量是char型变量

B.使用CH定义的是一个字符常量

C.使用CH定义的变量其类型不确定

D.使用CH定义的是一个字符串

10.下列关于预处理命令的描述中,错误的是( D )。

A.预处理命令最左边的标识符是#

B.预处理命令是在编译前处理的

C.宏定义命令可以定义符号常量

D.文件包含命令只能包含.h文件

3.3 填空题

1.表达式语句是一个表达式后边加上 分号(;) 组成的。空语句是 只有一个分号的语句 。

2.复合语句是由 两条 条或 两条 条以上的语句加上 花括号({}) 组成的。

3.分程序是一种带有 说明 语句的复合语句。

4.循环语句的共同特点是都应具有 循环体 和 退出循环的条件 。

5.下列程序是求100之内的能被7整除的自然数之和。

3.6 简单回答下列问题

1. 分程序是复合语句吗?复合语句与分程序的区别是什么?

答:分程序是复合语句。复合语句与分程序的区别在于含有说明语句的复合

18

语句称为分程序。

2. if语句中,else子句的功能是什么?

答:该子句的功能是当if子句和所有else if子句的条件都为0时,则执行else子句。

3. 在开关语句中,是否每个case子句后面的<语句序列>中都应该有break语句?

答:通常case子句后面的<语句序列>中都有break语句,根据需要也可以没有break语句。

4. 循环语句的循环体中出现的continue语句的作用是什么?

答:结束本次循环,转到循环头判断是否继续循环。

5. 文件包含命令的功能吗?该命令一定要放在程序首部吗?

答:该预处理命令是将指定的包含文件内容放在该命令出现的地方。通常放在程序开头,便于后边语句的使用。

第4章 指针和引用 练习题4

4.1 判断题

× 1.指针是变量,它具有的值是某个变量或对象的地址值,它还具有一个地址值,这两个地址值是相等的。

√ 2.指针的类型是它所指向的变量或对象的类型。

× 3.定义指针时不可以赋初值。

√ 4.指针可以赋值,给指针赋值时一定要类型相同,级别一致。

× 5.指针可以加上或减去一个int型数,也可以加上一个指针。

√ 6.两个指针在任何情况下相减都是有意义的。

√ 7.数组元素可以用下标表示,也可以用指针表示。

19

× 8.指向数组元素的指针只可指向数组的首元素。

√ 9.指向一维数组的指针是一个二级指针。

× 10.指针数组的元素可以是不同类型的指针。

√ 11.字符指针是指向字符串的指针,可以用字符串常量给字符指针赋值。

× 12.引用是一种变量,它也有值和地址值。

√ 13.引用是某个变量的别名,引用是被绑定在被引用的变量上。

√ 14.创建引用时要用一个同类型的变量进行初始化。

√ 15.指针是变量,它可以有引用,而引用不能有引用。

4.2 单选题

1.下列关于定义一个指向double型变量的指针,正确的是( B )。

A.int a(5);double *pd=a;

C.double d(2.5),*pd=d;

B.double d(2.5),*pd=&d;

D.double a(2.5),pd=d;

2.下列关于创建一个int型变量的引用,正确的是( A )。

A.int a(3),&ra=a;

B.int a(3),&ra=&a;

D.int a(3),ra=a; C.double d(3.1);int &rd=d;

3.下列关于指针概念的描述中,错误的是( B )。

A.指针中存放的是某变量或对象的地址值

B.指针的类型是它所存放的数值的类型

C.指针是变量,它也具有一个内存地址值

D.指针的值(非常量指针)是可以改变的

4.下列关于引用概念的描述中,错误的是( A )。

A.引用是变量,它具有值和地址值

B.引用不可以作数组元素

C.引用是变量的别名

20

D.创建引用时必须进行初始化

5.已知:int a[5],*p=a;则与++*p相同的是( D )。

A.*++p

C.*p++

B.a[0]

D.++a[0]

6.已知:int a[ ]={1,2,3,4,5},*p=a;在下列数组元素地址的表示中,正确的是( C )。

A.&(a+1)

C.&p[2]

B.&(p+1)

D.*p++

7.已知:int a[3][4],(*p)[4];下列赋值表达式中,正确的是( A )。

A.p=a+2

C.p=*a

B.p=a[1]

D.p=*a+2

8.已知:int b[3][5]={0};下列数组元素值的表示中,错误的是( D )。

A.**(b+1)

B.(*(b+1))[2]

D.*(b+2) C.*(*(b+1)+1)

9.已知:int a=1,b=2,*p[2];下列表达式中正确的是( C )。

A.p=&a

B.p=&b

D.p[ ]={&a,&b}; C.p[0]=&a,p[1]=&b

10.已知:int a(5),&ra=a;下列描述中,错误的是( D )。

A.ra是变量a的引用,即为变量的别名

C.ra的地址值为&a

仍为5

4.3 填空题

1.单目运算符&作用在变量名左边,表示该变量的 地址值 ,单目运算符*作用在指针名的左边,表示取该变量的 值 。

21

B.ra的值为5

D.改变ra的值为10,变量a值

2.指向一维数组元素的指针是 一 级指针,指向二维数组元素的指针是

一 级指针,指向一维数组的指针是 二 级指针,指向一级指针的指针是 二

级指针,一维一级指针数组名是 二 级指针的地址值,二维数组的数组名是 二

级指针的地址值。

3.在一个二维数组b[3][5]中,b[0]与 *b 是等价的,&b[1]与 b+1 是等价的。

4.指针的运算有4种,它们是 赋值 运算、一个指针加减整型数的运算、两个指针相减和 比较 运算。

5.引用不是变量,它是某个变量或对象的 别名 。引用的值是 被引用的变量的值 ,引用的地址值是 被引用的变量的地址值 。

4.6 简单回答下列问题

1. 指针与一般变量有何不同?

答:指针是变量,它不同于一般量。其一是指针存放的是地址值,其二指针的类型是它所指向的变量类型。

2. 指针可以作哪些运算?

答:指针的运算有4种:

赋值运算

加减一个整型数运算

在一定条件下,两个指针可以比较运算

在一定条件下,两个指针可以相减运算

3. 指针可以作数组元素,这种数组叫什么数组?

答:指针作数组元素的数组称为指针数组。

4. 什么是字符指针?字符指针与字符数组有何不同?

答:指符指针是指向字符串的指针。字符指针是变量指针,字符数组名是常

22

量指针。

5. 什么是引用?引用有哪些特征?

答:引用不是变量,是变量或对象的别名。引用的值和地址值都是被引用的变量的值和地址值。当被引用的变量值被改变,则引用的值也被改变,反之亦然。

第5章 函数

练习题5

5.1 判断题

√ 1.函数的调用可以嵌套,函数的定义不能嵌套。

× 2.C++语言中,函数可以用原型说明,也可用简单说明。

× 3.定义函数时,存储类可以缺省,数据类型也可以省略。

× 4.函数可以没有参数,但是不能没有返回值。

× 5.函数定义时必须给出函数体,函数体内至少有一条语句。

√ 6.没有参数的两个函数是不能重载的。

√ 7.函数调用方式有传值调用和引用调用两种,传值调用中又分传值和传址两种。

√ 8.函数的存储类有外部的和静态的两种,它们的作用域分别是程序级的和文件级的。

× 9.没有返回值的函数不能设置为内联函数。

× 10.函数可以设置默认的参数值,默认参数值必须设置在函数定义时的形参上。

5.2 单选题

1.当一个函数没有返回值时,该函数类型应说明为( A )。

23

A.void

C.无

B.int

D.任意

2.下列关于设置函数默认的参数值的描述中,错误的是( C )。

A.可对函数的部分参数或全部参数设置默认值

B.在有函数说明时,默认值应设置在函数说明时,而不是定义时

C.设置函数默认参数值时,只可用常量不可用含有变量的表达式

D.设置函数参数默认值应从右向左设置

3.下列关于被调用函数中return语句的描述中,错误的是( D )。

A.一个函数中可以有多条return语句

B.return语句具有返回程序控制权的作用

C.函数通过return语句返回值时仅有一个

D.一个函数中有且仅有一条return语句

4.函数返回值的类型是由( B )决定的。

A.调用该函数的调用函数的类型

B.定义该函数时所指定的类型

C.return语句中表达式的类型

D.接收函数返回值的变量或对象的类型

5.下列设置函数参数默认值的说明语句中,错误的是( C )。

A.int fun(int x , int y=10);

C.int fun(int x=5, int y);

B.int fun(int x=5, int =10);

D.int fun(int x , int y=a+b);

(其中,a和b是已定义过具有有效值的变量)

6.下列选择重载函数的不同实现的判断条件中,错误的是( D )。

A.参数类型不同

C.参数顺序不同

24

B.参数个数不同

D.函数返回值不同

7.已知:int fun (int &a),m=10;下列调用fum()函数的语句中,正确的是( C )。

A.fun(&m);

C.fun (m);

B.fun (m*2);

D.fun (m++);

8.在函数的引用调用中,函数的实参和形参分别应是( C )。

A.变量值和变量

C.变量名和引用

B.地址值和指针

D.地址值和引用

9.在函数的传址调用中,函数的实参和形参分别应是( B )。

A.变量值和变量

C.变量名和引用

B.地址值和指针

D.地址值和引用

10.说明一个内联函数时,应加关键字是( A )。

A.inline

C.void

5.3 填空题

1.如果将调用一个函数的过程分为3个步骤,第1步是 转去执行被调用函数 ,第2步是 执行被调用函数的语句 ,第3步是返回操作。

2.函数的存储类分两种,它们分别是 外部 函数和内部函数,其中 内部 函数的存储类说明不可省略,该说明符是 static 。

3.使用关键字inline说明的函数称为 内联 函数,具有相同函数名但具有不同实现的函数称为 重载 函数。

4.在调用一个函数过程中可以直接或间接地调用该函数,则该函数称为

被调用 函数。这种调用称为 嵌套 调用。

5.在引用调用中,函数实参用 变量名 ,形参用 引用名 。

5.6 简单回答下列问题

25

B.static

D.extern

1. 没有返回值的函数是否有函数类型?函数参数类型与函数的类型是否有关系?

答:没有返回值的函数的类型为void。没有关系。

2. 函数的缺省的存储类是什么?函数的存储类与函数什么关系?

答:函数的缺省的存储类是外部类。函数的存储类决定了函数的作用域。

3. 函数的调用方式有哪两种?传址和引用调用方式有何不同?

答:函数的调用方式有两种:传值调用和引用调用。传址调用时实参用地址值,形参用指针,引用调用时实参用变量名,形参用引用名。

4. 内联函数与一般函数有何不同?

答:内联函数的函数体是在编译时被替换,一般函数的函数体是在调用时被转去执行。前者可以提高速度,后者可以减少代码,各有利弊。

5. 对重载函数设置默认参数值,对重载函数的选择是否会有影响?

答:是会有影响的。

第6章 ;类和对象(一)

练习题6

6.1 判断题

× 1.使用class定义的类,其默认的访问权限是公有的,使用struct定义的类,其默认的访问权限是私有的。

× 2.类中的成员函数都是公有的,数据成员都是私有的。

× 3.定义在类体内的成员函数是内联函数,定义在类体外的成员函数不能是内联函数。

√ 4.类定义后,它的成员个数及名称就不会再被改变了。

26

× 5.定义或说明对象时,系统会自动调用构造函数为创建的对象初始化。如果类中没有定义任何构造函数时,就无法给定义的对象初始化。

√ 6.定义一个对象时,系统只为该对象的数据成员开辟内存空间,而成员函数是同类对象共享的。

√ 7.对象成员的表示方法与结构变量成员的表示方法相同。

√ 8.创建对象时系统自动调用相应的构造函数为对象初始化,没有相应的构造函数时,系统会自动生成。

√ 9.构造函数是一个其名与类名相同的特殊的成员函数。

× 10.析构函数是一个函数体为空的成员函数。

√ 11.构造函数和析构函数都是系统自动调用的成员函数。

× 12.构造函数和析构函数都可以重载。

√ 13.成员函数与一般函数一样可以重载、内联和设置参数的默认值。

× 14.静态成员是指静态对象的成员。

× 15.静态数据成员必须在构造函数的成员初始化列表中进行初始化。

√ 16.静态成员都可以使用类名加作用域运算符的方法来引用。

× 17.静态成员函数中引用静态数据成员和非静态数据成员的方式是相同的。

√ 18.常成员指的是类体内使用const关键字说明的常数据成员和常成员函数。

× 19.常数据成员在常成员函数中的值是不允许改变的,而在非常成员函数中是允许改变的。

√ 20.常对象需要引用常成员函数,而不能引用非常成员函数。

× 21.常对象的数据成员都是常数据成员。

√ 22.友元函数是说明在类体内的非成员函数,它可以访问类中的所有成

27

员。

× 23.可以把一个一般函数说明为某类的友元函数,也可以将某类的成员函数说明为另类的友元函数。

√ 24.友元类中的所有成员函数都是友元函数。

√ 25.类型转换函数是一种特殊的成员函数,定义时不加类型说明,无函数参数。

√ 26.单参数的构造函数具有类型转换的作用。

6.2 单选题

1.下列关于类的定义格式的描述中,错误的是( C )。

A.类中成员有3种访问权限

B.类的定义可分说明部分和实现部分

C.类中成员函数都是公有的,数据成员都是私有的

D.定义类的关键字通常用class,也可用struct

2.下列关键字中,不属于定义类时使用的关键字是( D )。

A.class

C.public

B.struct

D.default

3.下列关于成员函数的描述中,错误的是( A )。

A.成员函数的定义必须在类体外

B.成员函数可以是公有的,也可以是私有的

C.成员函数在类体外定义时,前加inline可为内联函数

D.成员函数可以设置参数的默认值

4.下列关于对象的描述中,错误的是( D )。

A.定义对象时系统会自动进行初始化

B.对象成员的表示与C语言中结构变量的成员表示相同

28

C.属于同一个类的对象占有内存字节数相同

D.一个类所能创建对象的个数是有限制的

5.下列关于构造函数的描述中,错误的是( C )。

A.构造函数可以重载

B.构造函数名同类名

C.带参数的构造函数具有类型转换作用

D.构造函数是系统自动调用的

6.下列关于析构函数的描述中,错误的是( A )。

A.析构函数的函数体都为空

B.析构函数是用来释放对象的

C.析构函数是系统自动调用的

D.析构函数是不能重载的

7.下列关于静态成员的描述中,错误的是( C )。

A.静态成员都是使用static来说明的

B.静态成员是属于类的,不是属于某个对象的

C.静态成员只可以用类名加作用域运算符来引用,不可用对象引用

D.静态数据成员的初始化是在类体外进行的

8.下列关于常成员的描述中,错误的是( C )。

A.常成员是用关键字const说明的

B.常成员有常数据成员和常成员函数两种

C.常数据成员的初始化是在类体内定义它时进行的

D.常数据成员的值是不可以改变的

9.下列关于友元函数的描述中,错误的是( B )。

A.友元函数不是成员函数

29

B.友元函数只可访问类的私有成员

C.友元函数的调用方法同一般函数

D.友元函数可以是另一类中的成员函数

10.下列关于类型转换函数的描述中,错误的是( C )。

A.类型转换函数是一种成员函数

B.类型转换函数定义时不指出类型,也没有参数

C.类型转换函数的功能是将其函数名所指定的类型转换为该类类型

D.类型转换函数在一个类中可定义多个

6.3 填空题

1.类体内成员有3个访问权限,说明它们的关键字分别是 公有 、 私有 和 保护 。

2.使用class定义的表中,成员的默认访问权限是 私有 的;由struct定义的类中,成员的默认的访问权限是 公有 的。

3.如果一个类中没有定义任何构造函数时,系统会 自动提供一个 默认

构造函数;同样,类中没有定义析构函数时,系统会自动提供一个 默认 析构函数。

4.静态成员是属于 类 的,它除了可以通过对象名来引用外,还可以使用

类名限定 来引用。

5.友元函数是被说明在 类体 内的 非 成员函数。友元函数可访问该类中的 成员。

6.6 简单回答下列问题

1. 一个类中是否必须有用户定义的构造函数?如果用户没有定义构造函

30

数,又如何对创建的对象初始化?

答:一个类用户可以不定义构造函数,这时系统自动提供一个默认的构造函数,并可用该构造函数对创建的对象初始化。

2. 拷贝构造函数具有几个参数?它有类型转换的作用吗?

答:拷贝构造函数具有一个参数,即为该类对象的引用。拷贝构造函数没有类型转换作用。

3. 静态成员属于类的,是否每个对象都可以引用该静态成员?

答:可以。

4. 常对象可以引用非常成员函数吗?非常对象可以引用常成员函数吗?

答:不可以。可以。

5.友元函数能否访问类中的保护成员?友元函数访问类中私有成员与成员函数访问私有成员的形式相同吗?

答:能。相同。

第7章 类和对象(二) 练习题7

7.1 判断题

× 1.定义对象指针时也要调用构造函数。

√ 2.对象指针可用同类对象的地址值给它赋值。

× 3.对象指针成员表示与对象引用相同。

√ 4.常类型指针有两种,一种是指针的地址值是常量,另一种是指针所指向的变量或对象是常量。

× 5.指向对象的常指针的地址值是可以改变的。

× 6.指向常对象的指针所指向的对象是可以改变的。

31

√ 7.this指针是系统生成的指向当前被某个成员函数操作对象的指针。

× 8.对象引用可以用一个同类对象的地址值对它赋值。

× 9.定义对象引用时,可以对其引用进行初始化,也可以不进行初始化。

× 10.对象数组的元素可以是不同类的对象。

× 11.对象指针数组可以使用不同类的对象的地址值进行初始化。

× 12.给对象数组元素赋值时都要创建临时对象。

√ 13.指向一维对象数组的指针是一个二级指针。

× 14.自身类对象可作该类的子对象。

√ 15.子对象的初始化要在构造函数的成员初始化列表中进行。

√ 16.使用new运算符创建的对象称为堆对象。

√ 17.任何对象都可以使用delete运算符来释放。

× 18.使用new运算符创建的对象数组其元素都具有默认值。

√ 19.类的作用域范围指的是类体内。

× 20.对象的存储类只有外部的和静态的。

7.2 单选题

1.f1()函数是类A的公有成员函数,p是指向类的成员函数f1()的指针,下列表示中正确的是( C )。

A.p=f1()

C.p=A::f1

B.p=f1

D.p=A::f1()

2.p是指向类A数据成员a的指针,a是类A的一个对象。在给a成员赋值为5的下列表达式中,正确的是( C )。

A.a.p=5

32

B.a->p=5

D.*a.p=5 C.a.*p=5

3.Void Set(A&a);是类A中一个成员函数的说明,其中A&a的含义是( A )。

A.类A的对象引用a作该函数的参数

B.类A的对象a的地址值作函数的参数

C.表达式变量A与变量a按位与作函数参数

D.指向类A对象指针a作函数参数

4.已知:const A a;其中A是一个类名,指向常对象指针的表示为( D )。

A.const * A pa;

C.A * const pa;

B.const A *pa;

D.const *pa A;

5.下列关于子对象的描述中,错误的是( D )。

A.子对象不可以是自身类的对象 B.子对象是另一个类的对象

D.一个类中只能有一个子C.子对象的初始化要包含在构造函数中

对象

6.执行下列说明语句,其调用构造函数的次数为( A )。

A a[5],*p[2];其中,A是一个类名

A.5

C.7

B.6

D.10

7.下列关于运算符new的描述中,错误的是( D )。

A.它可以创建对象或变量

B.它可以创建对象数组或一般类型数组

C.用它创建对象或对象数组时要调用相应的构造函数

D.用它创建的对象可以不用delete运算符释放

8.下列关于运算符delete的描述中,错误的是( B )。

A.使用该运算符可以释放用new运算符创建的对象或对象数组

33

B.使用该运算符可以释放所有对象

C.使用delete运算符时会自动调用析构函数

D.用它释放对象数组时,它作用的指针名前要加下标运算符[ ]

9.定义不同存储类对象时,必须要加的存储类说明符是( C )。

A.auto

C.statie

B.extern

D.register

10.下列关于this的描述中,错误的是( D )。

A.this是一个由系统自动生成的指针

B.this指针是指向对象的

C.this指针在用对象引用成员函数时系统创建的

D.this指针只能隐含使用,不能显式使用

7.3 填空题

已知:class A{ public:A (int i) { a=i;}

void print( ) { cont<

private : int a;

};

要求:

1.定义一个指向对象的常指针p,应该是 A *const p; 。

2.定义一个指向常对象指针p,应该是 A const *p; 。

3.定义类A的含有5个元素的一维对象数组a,应该是 A a[5]; 。

4.定义一个对象指针数组pa,它有5个元素,每个元素是类A对象指针,应该是 A *pa[5]; 。

5.使用new创建一个堆对象,一个实参值为5,应该是 A *p; p=new A(5); 。

34

6.使用new创建一个对象数组,该数组用指针pa指向,并使数组的3个元素都是类A的对象a1的值。应该是 A a1,*pa; pa=new A[3];

pa[0]=pa[1]=pa[2]=a1; 。

7.在某个函数体内定义一个静态类的对象sa,应该是 static A sa; 。

8.定义一个类A的对象a1,并给它赋值,其实参值为8,应该是 A a1(8); 。

7.4 分析下列程序的输出结果

第8章 继承性和派生类 练习题8

8.1 判断题

× 1.派生类只继承基类中的公有成员和保护成员,而不继承私有成员。

× 2.多重继承是指一个基类派生出多个派生类的情况。

√ 3.单重继承是指派生类只有一个基类的情况。

√ 4.派生类还可以作基类派生出新的派生类。

√ 5.派生类中成员的访问权限与基类的继承方式有关。

× 6.派生类中只包含直接基类的成员,不包含间接基类的成员。

√ 7.继承反映了类之间“是”的关系,组合反映了类之间“有”的关系。

× 8.基类中成员在派生类中都是可以访问的。

× 9.私有继承中基类的私有成员在派生类中还是私有的。

√ 10.保护继承方式下基类的保护成员在派生类仍是保护成员。

× 11.派生类的对象和派生类的派生类对派生类成员的访问权限是一样的。

√ 12.派生类的构造函数包含着直接基类的构造函数。

× 13.派生类的默认构造函数不包含有直接基类的构造函数。

35

× 14.派生类的析构函数中不包含直接基类的析构函数。

× 15.派生类是基类的子类型。

× 16.如果一个类是另一个类的子类型,则这个类的对象可以给另一个类的对象赋值,反之亦然。

√ 17.多重继承派生类的构造函数中应包含所有直接基类的构造函数。

× 18.多重继承的派生类构造函数中执行基类构造函数的顺序取决于该派生类构造函数的成员初始化列表中出现基类初始化项的顺序。

8.2 单选题

1.下列关于继承的描述中,错误的是( B )。

A.继承是重用性的重要机制

B.C++语言支持单重继承和双重继承

C.继承关系不是可逆的

D.继承是面向对象程序设计语言的重要特性

2.下列关于基类和派生类的描述中,错误的是( C )。

A.一个基类可以生成多个派生类

B.基类中所有成员都是它的派生类的成员

C.基类中成员访问权限继承到派生类中不变

D.派生类中除了继承的基类成员还有自己的成员

3.下列关于派生类的描述中,错误的是( D )。

A.派生类至少有一个基类

B.一个派生类可以作另一个派生类的基类

C.派生类的构造函数中应包含直接基类的构造函数

D.派生类默认的继承方式是public

4.派生类的对象可以直接访问的基类成员是( A )。

36

A.公有继承的公有成员

C.私有继承的公有成员

B.保护继承的公有成员

D.公有继承的保护成员

5.下列描述中,错误的是( D )。

A.基类的protected成员在public派生类中仍然是protected成员

B.基类的private成员在public派生类中是不可访问的

C.基类public成员在private派生类中是private成员

D.基类public成员在protected派生类中仍是public成员

6.派生类构造函数的成员初始化列表中,不能包含的初始化项是( B )。

A.基类的构造函数

C.派生类的子对象

B.基类的子对象

D.派生类自身的数据成员

7.下列关于子类型的描述中,错误的是( B )。

A.在公有继承下,派生类是基类的子类型

B.如果类A是类B的子类型,则类B也是类A的子类型

C.如果类A是类B的子类型,则类A的对象就是类B的对象

D.在公有继承下,派生类对象可以初始化基类的对象引用

8.下列关于多继承二义性的描述中,错误的是( D )。

A.一个派生类的多个基类中出现了同名成员时,派生类对同名成员的访问可能出现二义性

B.一个派生类有多个基类,而这些基类又有一个共同的基类,派生类访问公共基类成员时,可能出现二义性

C.解决二义性的方法是采用类名限定

D.基类和派生类中同时出现同名成员时,会产生二义性

8.3 填空题

37

1.继承的3种方式是 公有 、 私有 和 保护 。

2.如果类A继承了类B,则类A被称为 派生 类,类B被称为 基 类。

3.在保护继承方式下,基类的public成员成为派生类的 保护 成员,基类的protected成员成为派生类的 保护 成员。

4.当一个派生类中含有子对象时,该派生类的析构函数中应包含 直接基类 的析构函数、 子对象类的 析构函数和 自身类 的析构函数。

5.派生类的构造函数的成员初始化列表中可以包含的初始化项有 基类的构造函数 、 子对象类的构造函数 、 常数据成员 和 派生类其他非静态数据成员 。

8.6 简单回答下列问题

1. 在继承关系中,派生类中包含基类所有成员,基类是否也包含派生类的部分成员?

答:不包含。

2. 构造函数不能继承,派生类的构造函数中是否应包含直接基类的构造函数和所有间接基类的构造函数?

签:派生类的构造函数中只包含直接基类的构造函数。

3. 派生类的析构函数中不包含直接基类的析构函数,对吗?

答:不对。

4. 派生类的对象可以给基类对象赋值吗?

答:一般情况下不可以,只有在公有继承的情况下可以。

38

5. 多重继承的二义性可以避免吗?

答:可以避免,通常使用类名限定。

第9章 多态性和虚函数 练习题9

9.1 判断题

√ 1.运算符重载是通过对已有的运算符重新定义操作功能来实现的,它是C++语言多态性的一种表现。

√ 2.所有的运算符都可以重载。

√ 3.运算符重载只可以是类的成员函数和友元函数,不可以是普通函数。

√ 4.运算符重载是通过函数来实现的,定义运算符重载函数时,函数名中要使用关键字operator。

√ 5.用于类对象的运算符中只有取地址运算符(&)有默认的可以使用。

√ 6.运算符重载后,优先级、结合性和操作数都是不变的。

√ 7.重载运算符的函数也可以设置默认参数。

√ 8.使用成员函数方法和使用友元函数的方法所定义的重载运算符函数的参数个数是不相同的。

√ 9.静态联编和动态联编都是在编译时进行的,二者的区别仅是前者对非虚函数,后者对虚函数。

√ 10.只要是成员函数就可以说明为虚函数,因为虚函数是一种成员函数。

√ 11.虚函数有继承性,基类中说明的虚函数只要在它的派生类中与它名字相同的,一定是虚函数。

√ 12.虚函数可以被类的对象调用,也可以被类的对象指针和对象引用调

39

用。

√ 13.动态联编指的是在运行期间来选择不同类的虚函数。

√ 14.虚函数是实现动态联编的充分必要条件。

√ 15.含有纯虚函数的类称为抽象类,与抽象类相对应的是具体类。

√ 16.抽象类可以定义对象,不可以定义对象指针和对象引用。

√ 17.成员函数和构造函数调用虚函数都可以实现动态联编。

√ 18.析构函数可以说明为虚函数,而构造函数说明为虚函数没有意义。

√ 19.抽象类的派生类一定是具体类。

√ 20.一个抽象类中可以包含有多个纯虚函数,一个派生类中也可以包含多个虚函数。

9.2 单选题

1.下列运算符中,不可以重载的是( D )。

A.&&

C.[ ]

B.&

D.?:

2.下列关于运算符重载的描述中,错误的是( B )。

A.运算符重载不改变优先级

B.运算符重载后,原来运算符操作不可再用

C.运算符重载不改变结合性

D.运算符重载函数的参数个数与重载方式有关

3.下列关键字中,用来说明虚函数的关键字是( C )。

A.inline

C.virtual

B.operator

D.public

4.下列的成员函数中,纯虚函数是( A )。

A.virtual void f1() = 0

40

B.void f1() = 0;

C.virtual void f1() {} D.virtual void f1() == 0;

5.含有一个或多个纯虚函数的类称为( A )。

A.抽象类

C.虚基类

B.具体类

D.派生类

6.下列关于虚函数的描述中,错误的是( C )。

A.虚函数是一个成员函数

B.虚函数具有继承性

C.静态成员函数可以说明为虚函数

D.在类的继承的层次结构中,虚函数是说明相同的函数

7.下列各种类中,不能定义对象的类是( B )。

A.派生类

C.嵌套类

B.抽象类

D.虚基类

8.下列关于抽象类的描述中,错误的是( D )。

A.抽象类中至少应该有一个纯虚函数

和对象引用

C.抽象类通常用作类族中最顶层的类 D.抽象类的派生类必定是具体类

9.一个类的层次结构中,定义有虚函数,并且都是公有继承,在下列情况下,实现动态联编的是( D )。

A.使用类的对象调用虚函数

B.使用类名限定调用虚函数,其格式如下:<类名>::<虚函数名>

C.使用构造函数调用虚函数

D.使用成员函数调用虚函数

10.下列关于动态联编的描述中,错误的是( C )。

A.动态联编是函数联编的一种方式,它是在运行时来选择联编函数的

41

B.抽象类可以定义对象指针

B.动态联编又可称为动态多态性,它是C++语言中多态性的一种重要形式

C.函数重载和运算符重载都属于动态联编

D.动态联编只是用来选择虚函数的

9.3 填空题

1.C++语言多态性主要表现在动态联编、 函数 重载和 运算符 重载。

2.运算符重载函数的两种主要方式是 成员 函数和 友元 函数。

3.静态联编支持的多态性称为 静态 多态性,它是在 编译 时进行的;动态联编支持的多态性称为 动态 多态性,它是在 运行 时进行的。

4.虚函数是一种 非静态 成员函数。说明方法是在函数名前加关键字

virtual 。虚函数具有 继承 性,在基类中被说明的虚函数,具有相同说明的函数在派生类中自然是虚函数。

6. 含有 纯虚函数 的类称为抽象类。它不能定义对象,但可以定义

对象指针和 对象引用 。

9.6 简单回答下列问题

1. 运算符重载使用成员函数方法和友元函数方法是否都可以?并且是没有区别的吗?

答: 两种方都法可以。有区别,参数个数不同。

2. 运算符重载实际上通过函数来重新定义运算符的功能,运算符重载的功能直接通过函数调用是否可以?

答: 可以。

42

3. 多态性中对函数的选择从时间上来区分有哪两种方式?

答: 一种是在编译时选定函数,称静态联编方式,另一种是在运行时选定函数,称动态联编方式。

4. 有虚函数是否就一定是动态联编?非虚函数是否就一定是静态联编?

答: 不一定。一定是。

5. 在多层次的继承结构中,基类与派生类中存在着虚函数,这时调用虚函数就一定实现动态联编吗?

答:不一定。

第10章 C++语言的输入/输出操作练习题10

10.1 判断题

√ 1.C++语言提供的文件操作包含文本文件和二进制文件。

× 2.预定义的提取符和插入符不可以再重载。

√ 3.C++语言中的读写函数,不仅可用于标准文件,也可用于磁盘文件。

× 4.使用插入符输出一个字符串与使用write()成员函数输出一个字符串是没有差别的。

× 5.使用成员函数put()一次可写入一个字符串。

× 6.读取一个字符的成员函数get()是不可以带参数的。

√ 7.读取一行字符的成员函数getline()具有一个默认的参数值'n'。

× 8.使用read()成员函数一次只能读取一行字符。

43

√ 9.输出数据的默认对齐方式是右对齐。

√ 10.使用流对象的成员函数进行格式输出要比使用控制符进行格式输出复杂些,因为成员函数需要对象调用,而控制符可直接使用。

√ 11.在非标准文件操作中,应该先定义流对象,再打开文件,必须使用open()函数。

√ 12.关闭打开的文件时使用成员函数close(),该函数无参数。

√ 13.进行二进制文件操作时,在打开文件方式中增加ios::binary选项。

× 14.在定位文件的读/写指针的操作中,只能向增加字节数的方向移动,不能向减少字节数的方向移动。

√ 15.C++语言的文件操作中,既可以顺序读写,又可以随机读写。

× 16.读/写指针相关函数tellp()的返回值是一个long int型数,这表示当前读指针距文件尾的字节数。

√ 17.在文件操作中,通常使用打开文件的流对象的值来判断打开文件是否成功。

× 18.文件结束函数eof()返回值为0时,表示文件结束。

10.2 单选题

1.C++语言程序中进行文件操作时应包含的头文件是( A )。

A.fstream.h

C.stdlib.h

B.math.h

D.strstrea.h

2.C++语言程序中进行字符串流操作时应包含的头文件是( D )。

A.fstream.h

C.stdlib.h

B.math.h

D.strstrea.h

3.C++语言程序中使用控制符进行格式输出时应包含的头文件是( B )。

A.fstream.h

B.iomanip.h

44

C.math.h D.strstrea.h

4.下列各语句是输出字符'A'的,其中错误语句是( D )。

A.cout<<'A';

B.('A');

D.cout<

5.在ios类中提供的控制格式的标志位中,八进制形式的标志位是( C )。

A.hex

C.oct

B.dec

D.basefield

6.在打开磁盘文件的访问方式常量中,用来以追加方式打开文件的是( C )。

A.in

B.out

D.app() C.ate

7.在下列读写函数中,进行写操作的函数是( C )。

A.get()

C.put()

B.read()

D.getline()

8.已知文本文件,以读方式打开,下列的操作中错误的是( D )。

A.fstream infile ("", ios::in); B.ifstream infile ("");

C.ofstream infile ("");

("", ios::in);

9.已知:ifstream input;下列写出的语句中,将input流对象的读指针移到距当前位置后(文件尾方向)100个字节处的语句是( C )。

A.(100,ios::beg);

C.(−100,ios::cur);

10.3 填空题

45

D.fstream infile;

B.(100,ios::cur);

D.(100,ios::end);

1.在格式输出的标志字中,设置格式对齐位的有 left 、 right 和

internal 。

2.在格式输出中,设置和清除格式标志位的成员函数分别是 setf() 和

unsetf() 。

3.系统规定与标准设备对应的4个流对象是 cin 、 cout 、 cerr 和

clog 。

4.在控制符中,用来指定八进制、十进制和十六进制的控制符分别是 oct 、

dec

和 hex 。

5.在定位读/写指针的带有两个参数的函数中,表示相对位置方式的3个常量是 cur 、 beg 和 end 。

10.6 使用C++语句实现下列各种要求

1. 设置标志使得十六进制数中字母按大写格式输出。

答: (ios::hex,ios::basefield);

(ios::uppercase);

2. 设置标志以科学记数法显示浮点数。

答: (ios::scientific,ios::floatfield);

3. 按右对齐方式,域为5位,输出常整型数123,并使用'#'填充空位。

答: (ios::right,ios::adjustfield);

(5);

(‘#’);

const int a=123;

cout<

46

4. 按域宽为i,精度为j(i和j为int型数),输出显示浮点数d。

答: int j=10,j=5;

(i);

coutprecision(j);

cout<

5. 使用前导0的格式显示输出域宽为10的浮点数1.2345。

答: (10);

double d=1.2345;

(‘0’);

cout<

47


本文标签: 函数 成员 对象 数组