华南理工高级语言程序设计C++随堂练习答案

更新时间:2024-04-13 12:44:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

第一章 基本数据与表达式

> 1.1 概述

1. 一个最简单的C++程序,可以只有一个( )。

(A)库函数 (B)自定义函数 (C)main函数 (D)空函数 答题: A. B. C. D. 参考答案:C

2. 函数名是( ),用于识别和调用函数。

(A)关键字 (B)标识符 (C)常数 (D)语句 答题: A. B. C. D. 参考答案:B

3. 用C++语言编写的源程序要成为目标程序必须要经过( )。 (A)解释 (B)汇编 (C)编辑 (D)编译 答题: A. B. C. D. 参考答案:D

4. C++程序中的简单语句必须以( )结束。

(A)冒号 (B)分号 (C)空格 (D)花括号 答题: A. B. C. D. 参考答案:B

5. 程序中把表达式“a+0.5”写为“a*0.5”,是( )错误。 (A)编译 (B)连接 (C)运行 (D)逻辑 答题: A. B. C. D. 参考答案:D

> 1.2 C++语言的字符集与词汇

1. 在下列选项中,全部都是C++关键字的选项为( )。 (A)while IF Static (B)break char go

(C)sizeof case extern (D)switch float integer 答题: A. B. C. D. 参考答案:C

2. 按C++标识符的语法规定,合法的标识符是( )。 (A)_abc (B)new (C)π (D)\答题: A. B. C. D. 参考答案:A

3. 在C++语句中,两个标识符之间( )不能作为C++的分隔符。 (A)数字 (B); (C): (D)+

答题: A. B. C. D. 参考答案:A

4. 可以用于命名变量的标识符是( )。

(A)3x (B)const (C)name_2 (D)a.com 答题: A. B. C. D. 参考答案:C

5. 说明变量a是整型变量的正确语句是( )。 (A)int a; (B)inta; (C)Int a; (D)INTa; 答题: A. B. C. D. 参考答案:A

> 1.3 C++语言的基本数据类型与存储形式

1. 下列正确的八进制整型常量表示是( )。 (A)0a0 (B)015 (C)080 (D)0x10 答题: A. B. C. D. 参考答案:B

2. 下列错误的十六进制整型常量表示是( )。 (A)0x11 (B)0xaf (C)0xg (D)0x1f 答题: A. B. C. D. 参考答案:C

3. 在下列选项中,全部都合法的浮点型数据的选项为()。

(A)-1e3.5 15. 2e-4 (B)12.34 -1e+5 0.1E-12 (C)0.2e-2 -12345. e-5 (D)5.0e(1+4) 0.1 8e+2 答题: A. B. C. D. 参考答案:B

4. 在下列选项中,正确的字符常量为( )。 (A)\ (B)'name' (C)a (D)'\\101' 答题: A. B. C. D. 参考答案:D

5. 下列选项中,结果等于false的是( )。 (A)1<3 (B)1=3 (C)1==3 (D)1!=3 答题: A. B. C. D. 参考答案:C

> 1.4 数据对象与访问

1. 在下列选项中,( )不能交换变量a和b的值。 (A)t=b; b=a; a=t; (B)a=a+b; b=a-b; a=a?b;

(C)t=a; a=b; b=t; (D)a=b; b=a; 答题: A. B. C. D. 参考答案:D

2. 关于下列语句,叙述错误的是( )。 int i=10, ?p=&i;

(A)p的值为10 (B)p指向整型变量i

(C)?p表示变量i的值 (D)p的值是变量i的地址 答题: A. B. C. D. 参考答案:A

3. 有以下变量说明,下面不正确的赋值语句是( )。 int a=5, b=10, c; int ?p1 = &a, ?p2 = &b; (A)?p2 = b; (B)p1 = a;

(C)p2 = p1; (D)c = ?p1 ?(?p2); 答题: A. B. C. D. 参考答案:B

4. 有以下变量说明,下面正确的语句是( )。 int a=10, b; int &pa=a, &pb=b;

(A)&pb = a; (B)pb = pa; (C)pb = &pa; (D)?pb = ?pa; 答题: A. B. C. D. 参考答案:B

5. 执行下面语句序列后,a和b的值分别为( )。 int a=5, b=3, t; int &ra=a; int &rb=b;

t=ra; ra=rb; rb=t;

(A)3和3 (B)3和5 (C)5和3 (D)5和5 答题: A. B. C. D. 参考答案:B

> 1.5 表达式

1. 假设有说明 int a=0; double x=5.16;,则在以下语句中,( )属于编译错误。 (A)x=a/x; (B)x=x/a; (C)a=a%x; (D)x=x?a; 答题: A. B. C. D. 参考答案:C

2. 在下列运算符中,( )优先级最高。 (A)<= (B)?= (C)+ (D)? 答题: A. B. C. D. 参考答案:D

3. 在下列运算符中,( )优先级最低。 (A)! (B)&& (C)!= (D)? : 答题: A. B. C. D. 参考答案:D

4. 已知int i=1, j=2;,则表达式 i+++j 的值为( )。 (A)1 (B)2 (C)3 (D)4 答题: A. B. C. D. 参考答案:C

5. 已知int i=1, j=2; 则表达式 ++i+j 的值为( )。 (A)1 (B)2 (C)3 (D)4 答题: A. B. C. D. 参考答案:D

6. 在下列表达式选项中,( )是正确。

(A)++(a++) (B)a++b (C)a+++b (D)a++++b 答题: A. B. C. D. 参考答案:C

7. 已知 int i=0, j=1, k=2; 则逻辑表达式 ++i || --j && ++k 的值为( )。 (A)0 (B)1 (C)2 (D)3 答题: A. B. C. D. 参考答案:B

8. 执行下列语句后,x和y的值是( )。 int x, y;

x=y=1; ++x || ++y;

(A)1和1 (B)1和2 (C)2和1 (D)2和2 答题: A. B. C. D. 参考答案:C

9. 设x为整型变量,不能正确表达数学关系 1<x<5 的C++逻辑表达式是( (A)1< x <5 (B)x==2||x==3||x==4

(C)1=5) 答题: A. B. C. D. 参考答案:A

10. 已知 int x=5; 执行下列语句后,x的值为( )。 x+=x-=x?x;

(A)25 (B)40 (C)?40 (D)20 答题: A. B. C. D. 参考答案:C

。 )

11. 设 int a=1, b=2, c=3, d=4; 则以下条件表达式的值为( )。 a

(A)1 (B)2 (C)3 (D)4 答题: A. B. C. D. 参考答案:A

12. 以下逗号表达式的值为( )。 ( x=4?5, x?5 ), x+25

(A)25 (B)20 (C)100 (D)45 答题: A. B. C. D. 参考答案:D

> 1.6 数据输入和输出

1. 控制台程序中需要使用cin和cout输出/输入,include指令包含的头文件是( (A)cmanth(B)conio.h(C)iostream(D)iomanip 答题: A. B. C. D. 参考答案:C

2. 使用标准命名空间的语句是( )。

(A)using namespace std; (B)using namespace iostream; (C)include std; (D)include iostream; 答题: A. B. C. D. 参考答案:A

3. 有语句 double x, y; 以下正确的输入语句是( )。

(A)cin<

答题: A. B. C. D. 参考答案:D

4. 有语句 int a=1, b=2; 以下正确的输出语句是( )。

(A)cout

(C)cout<<(hex)a+b; (D)cout<<&a<答题: A. B. C. D. 参考答案:D

5. 以输出宽度为8输出变量x值的语句是( )。

(A)cout<

(C)cout<

。 (D) )

答题: A. B. C. D. 参考答案:A

第二章 程序控制结构

> 2.1 选择控制

1. 已知 int i=0, x=1, y=0;,在下列选项中,使i的值变成1的语句是( )。 (A)if( x&&y ) i++; (B)if( x==y ) i++; (C)if( x||y ) i++; (D)if( !x ) i++; 答题: A. B. C. D. 参考答案:C

2. 已知 int i=0, x=1, y=0;,在下列选项中,使i的值变成1的语句是( )。 (A)if( x ) {if(y) i=1; else i=0; } (B)if( x ) {if(y) i=1; } else i=0; (C)if( x ) i=0; else { if(y) i=1; } (D)if( x ) i=1; else {if(y) i=0; } 答题: A. B. C. D. 参考答案:D

3. 设有函数关系为y= ,下列选项中,能正确表示上述关系的是( )。 (A) y = 1;

if( x >= 0 )

if( x == 0 ) y = 0;

else y = -1;

(B) y = -1;

if( x != 0 )

if( x > 0 ) y = 1; else y = 0 (C) if( x <= 0 )

if( x < 0 ) y = -1;

else y = 0;

else y = 1;

(D) y = -1;

if( x <= 0 )

if( x < 0 ) y = -1;

else y = 0;

答题: A. B. C. D. 参考答案:C

4. 设i=2,执行下列语句后i的值为( )。 switch( i )

{ case 1 : i ++; case 2 : i --;

case 3 : ++ i; break; case 4 : -- i; default : i ++; }

(A)1 (B)2 (C)3 (D)4 答题: A. B. C. D. 参考答案:B

5. 执行下列语句后,输出显示为( )。 char ch='A'; switch( ch ) {

case 'A' : ch++; case 'B' : ch++; case 'C' : ch++; }

cout<

(A)A (B)B (C)C (D)D 答题: A. B. C. D. 参考答案:D

> 2.2 循环控制

1. 已知int i=0,x=0;,在下面while语句执行时循环次数为( while( !x && i< 3 ) { x++; i++; }

(A)4 (B)3 (C)2 (D)1 答题: A. B. C. D. 参考答案:D

。 )

2. 已知int i=3;,在下面do_while 语句执行时的循环次数为( )。 do{ i--; cout<

3. 下面for语句执行时的循环次数为( )。 int i, j;

for ( i=0, j=5; i=j; )

{ cout<

(A)0 (B)5 (C)10 (D)无限 答题: A. B. C. D. 参考答案:B

4. 以下程序段形成死循环的是( )。 (A)int x; for( x=0; x<3; ) { x++; };

(B)int k = 0; do { ++k; } while( k>=0 ); (C)int a=5; while( a ) { a--; }; (D)int i=3; for(; i; i -- ); 答题: A. B. C. D. 参考答案:B

5. 执行以下程序段后,x的值是( )。 { int i, j, x = 0; for( i=0; i<=3; i++ ) { x++;

for( j=0; j<=3; j++ ) { if( j ) continue; x++; } }

(A)8 (B)12 (C)14 (D)16 答题: A. B. C. D. 参考答案:A

> 2.3 判断表达式的使用

1. 有 if<逻辑表达式><语句>; 若整型变量a和b的值都不等于0时执行<语句>,则逻辑表达式是( )。

(A)a&b (B)a&&b (C)a!=b (D)a-b!=0 答题: A. B. C. D. 参考答案:B

2. 有 if<逻辑表达式><语句>; 若整型变量a、b的值相等时执行<语句>,则逻辑表达式是( )。

(A)a=b (B)a!=b (C)a-b (D)!(a-b) 答题: A. B. C. D. 参考答案:D

3. 有语句

for( int i=1; i<=10; i++)

if(!(i%3)) cout< 输出结果是( )。

(A)1 2 3 (B)1 2 4 5 (C)3 6 答题: A. B. C. D. 参考答案:C

4. 有语句

int i=5, sum=0;

while(i--) { sum+=i%2; }

循环结束后,sum的值等于( )。 (A)2 (B)3 (C)4 (D)5 答题: A. B. C. D. 参考答案:A

5. 有语句 int a=5, b=1;

while(a-b) { a--; b++; }

循环体执行的次数是( )。

(A)1 (B)2 (C)3 (D)4 答题: A. B. C. D. 参考答案:B

> 2.4 转向语句

1. 以下程序段输出结果是( )。 int i,n=0;

for(i=0; i<10; i++) {

if( i%3 ) break; n++; }

cout<

(A)1 (B)2 (C)3 (D)4

答题: A. B. C. D.

9(D)4 5 6 参考答案:A

2. 以下程序段输出结果是( )。 int i,n=0;

for(i=0; i<10; i++) {

if( i%3 ) continue; n++; }

cout<

(A)1 (B)2 (C)3 (D)4 答题: A. B. C. D. 参考答案:D

3. 以下程序段输出结果是( )。 int i,n=0;

for(i=0; i<10; i++) {

if( i>2 ) goto out; n++; }

out: cout<

(A)1 (B)2 (C)3 (D)4

答题: A. B. C. D. 参考答案:C

第三章 函数

> 3.1 函数的定义与调用

1. 以下正确的函数原型为( )。

(A)fun1( int x; int y ); (B)void fun1( x, y );

(C)void fun1( int x, y ); (D)void fun1( int, int ); 答题: A. B. C. D. 参考答案:D

2. 有函数原型 int f2(int, int); 以下正确的调用语句是( (A)int a=fun2(1); (B)cout<

(C)int a=fun2(1)+fun(2); (D)cout<

。 )

答题: A. B. C. D. 参考答案:B

3. 有函数原型 void f3(double); 以下正确的调用语句是( )。 (A)double a=fun3(0.15); (B)fun3(0.34);

(C)double a=fun3(0.1)+f3(0.2); (D)cout<

4. 以下正确的函数定义是( )。

(A)int fun4(int a, int b) { return a+b; } (B)void fun4(int a, int b) { return a+b; } (C)int fun4(int a, int b) { fun4 = a+b; } (D)void fun4(int a, int b){ fun4 = a+b; } 答题: A. B. C. D. 参考答案:A

5. 以下正确的函数定义是( )。

(A)void fun5();{ cout<<\ (B)void fun5() { return f5;} (C)void fun5() { cout<<\ (D)void fun5() { return 5;} 答题: A. B. C. D. (已提交) 参考答案:C 问题解析:

> 3.2 函数参数的传递

1. 有函数原型 void fun6( int );,在下列选项中,不正确的调用是( )。 (A)int a = 21; fun6( a ); (B)int a = 15; fun6( a3 ); (C)int b = 100; fun6( &b ); (D)fun6( 256 ); 答题: A. B. C. D. 参考答案:C

2. 有函数原型 void fun7( int * );,在下列选项中,正确的调用是( )。 (A)double x = 2.17; fun7( &x ); (B)int a = 15; fun7( a*3.14 ); (C)int b = 100; fun7( &b ); (D)fun7( 256 ); 答题: A. B. C. D. 参考答案:C

3. 有函数原型 void fun8( int & );,在下列选项中,正确的调用是( )。 (A)int a = 2.17; fun8( &a ); (B)int a = 15; fun8( a?3.14 ); (C)int b = 100; fun8( b ); (D)fun8( 256 ); 答题: A. B. C. D. 参考答案:C

4. 有声明

void fun9( int ? & ); int a, int ?p = &a;

在下列选项中,正确的调用是( )。

(A)fun9(&a); (B)fun9(p); (C)fun9(?a); (d)fun9(?p); 答题: A. B. C. D. 参考答案:B

5. 5以下正确的函数定义是( )。

(A)int * fun10(double x){ return x; } (B)int * fun10(double x){ return &x; } (C)int * fun10(int a){ return *a; } (D)int * fun10(int a){ return &a; } 答题: A. B. C. D. 参考答案:D

6. 函数参数的默认值不允许为( )。

(A)全局常量 (B)直接常量 (C)局部变量 (D)函数调用 答题: A. B. C. D. 参考答案:C

> 3.3 函数调用机制

1. 在C++中,一个项目可以包含多个函数,它们之间是( )。 (A)独立定义的 (B)嵌套定义的

(C)根据调用关系定义的 (D)根据调用顺序定义的 答题: A. B. C. D. 参考答案:A

2. 一个项目中只能有一个的函数是( )。 (A)系统库函数 (B)自定义函数

(C)主函数 (D)在其他文件中定义的函数 答题: A. B. C. D. 参考答案:C

3. 一个项目中包含3个函数:main、fa和fb函数,它们之间不正确的调用是( (A)在main函数中调用fb函数 (B)在fa函数中调用fb函数 (C)在fa函数中调用fa函数 (D)在fb函数中调用main函数 答题: A. B. C. D. 参考答案:D

4. 实现函数调用需要( )进行信息管理。

(A)队列 (B)堆栈 (C)数组 (D)参数 答题: A. B. C. D. 参考答案:B

5. 关于递归调用不正确的描述是( )。

(A)递归调用和嵌套调用都是通过堆栈管理实现的 (B)函数直接或间接调用自己称为递归调用

。 ) (C)递归终止条件必须为参数值等于0

(D)递归算法的问题规模必须是逐步缩小的 答题: A. B. C. D. 参考答案:C

> 3.4 函数指针

1. 有以下函数定义,该函数的类型是( )。 double fun11 (int ary[], int len)

{ /*??*/ }

(A)double fun11 (int ary[], int len) (B)double fun11 (int [], int) (C)double (int[], int) (D)double 答题: A. B. C. D. 参考答案:C

2. 有说明语句:

typedef double funt (double); funt fun12;

以下叙述正确的是( )。

(A)funt和 fun12是类型相同的函数 (B)fun12是funt类型的变量

(C)funt是返回typedef double类型的函数 (D)fun12是funt类型的函数 答题: A. B. C. D. 参考答案:D

3. 有语句

typedef double funt (double); funt fun13, *pfun;

则以下正确的赋值语句是( )。

(A)pfun=fun13; (B)*pfun=fun13; (C)pfun=funt; (D)*pfun=funt; 答题: A. B. C. D. 参考答案:A

4. 有语句

typedef double funt (double); funt fun13, fun14, *pfun;

则以下不正确的赋值语句是( )。

(A)pfun=fun13; (B)pfun=&fun14; (C)pfun=*fun13; (D)fun13=fun14; 答题: A. B. C. D. 参考答案:A

5. 有声明

int fun14( int ); int (?pf)(int) = fun14; 在下列选项中,正确的调用是( )。

(A)int a=15; int n=fun14(&a); (B)int a = 15; cout<<(&pf)(a); (C)cout<<(?pf)( 256 ); (D)cout << ?pf( 256 ); 答题: A. B. C. D.

参考答案:A

> 3.5 内联函数和重载函数

1. 指定内联函数的关键字是( )。

(A)include (B)inline (C)namespace (D)typedef 答题: A. B. C. D. 参考答案:B

2. 内联函数的正确定义是( )。

(A)inline int small(); int small(){ /*??*/ } (B)int small(); inline int small(){ /*??*/ } (C)int inline small(); int small(){ /*??*/ } (D)int small(); int inline small(){ /*??*/ } 答题: A. B. C. D. 参考答案:A

3. 使用重载函数编程序的目的是( )。

(A)使用相同的函数名调用功能相似的函数 (B)共享程序代码 (C)提高程序的运行速度 (D)节省存储空间 答题: A. B. C. D. 参考答案:A

4. 重载函数要求( )。

(A)函数名不同,函数参数个数相同 (B)函数名不同,函数参数类型相同 (C)函数名相同,函数类型各不相同 (D)函数名相同,函数类型也相同 答题: A. B. C. D. 参考答案:C

5. 以下正确的重载函数是( )。

(A)int same (int, double); double same (int, double); (B)int same1 (int, double); int same2 (int, double); (C)int same (int =0); int same (int);

(D)int same (int, double); int same (int, double, double); 答题: A. B. C. D. 参考答案:D

> 3.6 变量存储特性与标识符作用域

1. 自动存储变量是指( )。

(A)自动指定存储地址的变量 (B)自动更新数据的变量 (C)在程序块执行时生成,块结束时释放的变量 (D)在项目执行时生成,项目结束时释放的变量 答题: A. B. C. D.

参考答案:C

2. 在函数中声明的静态变量( )。

(A)在函数体中可见,函数结束调用时释放。 (C)在项目中可见,函数结束调用时释放。 (B)在函数体中可见,项目结束调用时释放。 (D)在项目中可见,项目结束调用时释放。 答题: A. B. C. D. 参考答案:B

3. 语句标号的作用域是( )。

(A)函数 (B)文件 (C)程序块 (D)项目 答题: A. B. C. D. 参考答案:A

4. 全局变量指的是( )的变量。

(A)在项目所有文件可访问 (B)当前文件的所有代码可访问 (C)任何自动初始化为0 (D)具有文件作用域 答题: A. B. C. D. 参考答案:D

5. 当局部变量与全局变量同名时,若要在局部块内访问全局变量,使用( (A):: (B): (C). (D)-> 答题: A. B. C. D. 参考答案:A

第四章数组

> 4.1 一维数组

1. 有数组定义double d[10]; 以下叙述不正确的是( )。

(A)数组d有10个元素 (B)数组d的最后一个元素是d[10]

(C)数组d的第一个元素*d (D)数组d的字节数是sizeof(double)*10 答题: A. B. C. D. 参考答案:B

2. 以下对一维数组 a 的定义正确的是( )。 (A)int n = 5, a[n]; (B)int a(5);

(C)const int N = 5; int a[N]; (D)int n; cin>>n; int a[n]; 答题: A. B. C. D. 参考答案:C

3. 下列数组定义语句中,不合法的是( )。

)运算符。

(A)int a[3] = { 0, 1, 2, 3 }; (B)int a[] = { 0, 1, 2 }; (C)int a[3] = { 0, 1, 2 }; (D)int a[3] = { 0 }; 答题: A. B. C. D. 参考答案:A

4. 已知 int a[10] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }, *p = a;,不能表示数组 a 中元素的式子是( )。 (A)*a (B)*p (C)a (D)a[ p-a ] 答题: A. B. C. D. 参考答案:C

5. 已知 int a[] = { 0,2,4,6,8,10 }, *p = a+1; 其值等于0的表达式是( )。 (A)* (p++) (B)*(++p) (C)*(p--) (D)*(--p) 答题: A. B. C. D. 参考答案:D

> 4.2 指针数组

1. 说明一个长度为10的数组,元素类型为整型指针的正确语句是( )。 (A)int *pary[10]; (B)int (*pary)[10] (C)int *pary(10); (D)int **pary[10] 答题: A. B. C. D. 参考答案:A

2. 有以下语句

int a=1, b=2, c=3; int *pary[3]={&a, &b, &c};

能够输出a+b+c 的值的语句是( )。

(A)cout<<(pary[0]+pary[1]+pary[2]); (B)cout<<(*pary[0]+*pary[1]+*pary[2]); (C)cout<<(pary[1]+pary[2]+pary[3]); (D)cout<<(*pary[1]+*pary[2]+*pary[3]); 答题: A. B. C. D. 参考答案:B

> 4.3 二维数组

1. 以下不能对二维数组a进行正确初始化的语句是( )。 (A)int a[2][3] = { 0 };

(B)int a[][3] = { { 0,1 }, { 0 } };

(C)int a[2][3] = { { 0, 1 }, { 2, 3 }, { 4, 5 } }; (D)int a[][3] = { 0, 1, 2, 3, 4, 5 }; 答题: A. B. C. D. 参考答案:C

2. 已知int a[][3] = { { 0, 1 }, { 2, 3, 4 }, { 5, 6 }, { 7 } }; 则 a[2][1]的值是( )。 (A)0 (B)2 (C)6 (D)7 答题: A. B. C. D.

参考答案:C

3. 已知int a[3][3] = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };,不能表示数组元素a[2][1]的地址是( )。 (A)&a[2][1] (B)*(a[2]+1) (C)a[2]+1 (D)*(a+2)+1 答题: A. B. C. D. 参考答案:B

4. 有说明语句

int a[5][5]; int *p, **q;

以下正确的赋值语句是( )。

(A)p=a; (B)p=*a; (C)q=a; (D)q=*a; 答题: A. B. C. D. 参考答案:B

5. 有说明语句

int a[5][5]; int *p, **q;

以下正确的赋值语句是( )。

(A)p=a[0]; (B)p=&a[0]; (C)q=a[0]; (D)q=&a[0][0]; 答题: A. B. C. D. 参考答案:A

> 4.4 数组作为函数参数

1. 若用数组名作为调用函数的实参,则传递给形参的是( )。 (A)数组存储首地址 (B)数组的第一个元素值 (C)数组中全部元素的值 (D)数组元素的个数 答题: A. B. C. D. 参考答案:A

2. 有说明语句 int a[10];

及函数 int fun(int x[10], int n){return sizeof(x);} 则语句 cout<

(A)40 (B)10 (C)4 (D)0 答题: A. B. C. D. 参考答案:C

3. 有说明语句 int a[10];

void fun( int * ,int n);

调用函数的正确语句是( )。

(A)fun(a, 10); (B)fun(a[0], 10); (C)fun(*a, 10); (D)fun(&a, 10); 答题: A. B. C. D. 参考答案:A

4. 有说明语句 int b[4][5];

void fun( int * ,int n);

调用函数的正确语句是( )。

(A)fun(b, 20); (B)fun(b[0], 20); (C)fun(b[0][0], 20); (D)fun(&b, 20); 答题: A. B. C. D. 参考答案:B

5. 有说明语句 int x[4][5];

void fun( int y[4][5] , int m, int n);

调用函数的正确语句是( )。

(A)fun(x, 4,5); (B)fun(*x, 4,5); (C)fun(x[0], 4,5); 答题: A. B. C. D. 参考答案:AB

> 4.5 动态存储

1. 以下建立动态存储的语句正确的是( )。 (A)int p=new int; (B)int p=new (10); (C)int *p(10); (D)int *p=new int(10); 答题: A. B. C. D. 参考答案:D

2. 以下建立动态存储的语句正确的是( )。 (A)int p=new int[]; (B)int p=new [10];

(C)int *p=new int[10]; (D)int *p[10]=new int; 答题: A. B. C. D. 参考答案:C

3. 有说明语句

int *p=new int[10];

释放动态数组的正确语句是( )。 (A)delete []p; (B)delete p[]

(C)delete int[]p (D)delete p int[10] 答题: A. B. C. D. 参考答案:A

4. 有说明语句

int *p=new int[10];

访问动态数组元素的正确语句是( )。 (A)int a=p; (B)int a=*p;

(C)delete int[]p (D)delete p int[10]

D)fun(&x, 4,5); (答题: A. B. C. D. 参考答案:C

> 4.6 字符数组与字符串

1. 已知char *a[]={ \,则 cout<

(A)t (B)一个地址值 (C)java (D)javac++ 答题: A. B. C. D. 参考答案:C

2. 设有char *s=\ 输出结果是( )。 (A)A (B)B (C)ABCD (D)BCD 答题: A. B. C. D. 参考答案:B

3. 设有char *s=\ 输出结果是( )。 (A)A (B)B (C)ABCD (D)BCD 答题: A. B. C. D. 参考答案:D

4. 设有char *s=\ 输出结果是( )。 (A)6 (B)5 (C)4 (D)1 答题: A. B. C. D. 参考答案:B

5. 设char *s1, *s2;分别指向两个字符串,可以判断字符串s1和s2是否相等的表达式为( )。

(A)s1=s2 (B)s1==s2

(C)strcpy(s1,s2)==0 (D)strcmp(s1,s2)==0 答题: A. B. C. D. 参考答案:D

第五章集合与结构

> 5.1 位运算

1. 语句cout<<(1&2)<<\的输出结果是( )。 (A)0, 0 (B)0, 1 (C)1, 0 (D)1, 1 答题: A. B. C. D. 参考答案:B

2. 语句cout<<(1|2)<<\的输出结果是( )。 (A)0, 0 (B)1, 1 (C)2, 0 (D)3, 1

答题: A. B. C. D. 参考答案:D

3. 语句 cout<<(3<<3)<

4. 语句 cout<<(24>>3)<

5. 语句 cout<<(2^5)<

> 5.2 集合

1. 实现集合运算A∪B运算的对应表达式是( )。

(A)A|B (B)A&B (C)A&(~ (A&B)) (D)A|B==B 答题: A. B. C. D. 参考答案:A

2. 实现集合运算A&B运算的对应表达式是( )。

(A)A|B (B)A&B (C)A&(~ (A&B)) (D)A|B==B 答题: A. B. C. D. 参考答案:B

3. 实现集合运算A-B运算的对应表达式是( )。

(A)A|B (B)A&B (C)A&(~ (A&B)) (D)A|B==B 答题: A. B. C. D. 参考答案:C

4. 实现集合运算AB运算的对应表达式是( )。 (A)A|B (B)A&B (C)A&(~ (A&B)) (D)A|B==B 答题: A. B. C. D. 参考答案:D

5. 实现集合运算求补集~A运算的对应表达式是( )。

(A)~A (B)A==0 (C)A&(~ (A&B)) (D)1<<(x-1)&A==1<<(x-1) 答题: A. B. C. D. 参考答案:A

6. 判断元素x∈A对应的表达式是( )。

(A)~A (B)A==0 (C)A&(~ (A&B)) (D)1<<(x-1)&A==1<<(x-1) 答题: A. B. C. D. 参考答案:D

> 5.3 定义结构和访问结构

1. 有以下说明语句: struct point { int x; int y; }p;

则正确的赋值语句是( )。

(A)point.x = 1; point.y = 2; (B)point={ 1, 2 }; (C)p.x = 1; p.y = 2; (D)p = { 1, 2 }; 答题: A. B. C. D. 参考答案:C

2. 已知有职工情况结构变量emp定义为: struct Date { int year; int month; int day; };

strnct Employee { char name[20]; long code; Date birth };

Employee emp;

下列对emp的birth正确赋值方法是( )。 (A)year=1980; month=5; day=1;

(B)birth.year=1980; birth.month=5; birth.day=1; (C)emp.year=1980; emp.month=5; emp.day=1;

(D)emp.birth.year=1980; emp.birth.month=5; emp.birth.day=1; 答题: A. B. C. D. 参考答案:D

3. 有以下说明语句: struct Point { int x; int y; };

则叙述正确的是( )。

(A)正确的结构类型说明 (B)正确的结构变量说明

(C)错误的原因是结构中成员类型相同 (D)无意义的说明 答题: A. B. C. D. 参考答案:A

4. 有以下说明语句: struct Worker { int no;

char name[20]; };

Worker w, *p = &w;

则下列错误的引用是( )。

(A)w.no (B)p->no (C)(*p).no (D)*p.no 答题: A. B. C. D. 参考答案:D

5. s1和s2是两个结构类型变量,若要使赋值s1=s2合法,则它们的说明应该是( (A)s1只能接收相同类型的数据成员 (B)结构中的成员相同 (C)同一结构类型的变量 (D)存储字节长度一样的变量 答题: A. B. C. D. 参考答案:C

> 5.4 结构数组

1. 有以下说明语句: struct Student { int num;

double score; };

Student stu[3]={{1001,80}, {1002,75}, {1003,91}}, *p=stu; 则下面引用形式错误的是( )。

(A)p->num (B)(p++).num (C)(p++)->num (D)(*p).num 答题: A. B. C. D. 参考答案:B

第五章 集合与结构 > 5.5 链表 有说明语句

Struct Node{ int data; Node * next; };

Node *head, *p,*q, *s;

并且,head是单向链表的头指针,p指向链表中的节点,q指向*p的前驱节点。

。 ) 1. 在*p之后插入节点*s的操作是:

(A)p->next=s; s->next=p->next; (B)s->next=p-next; p->next=s; (C)p =s->next; s =p->next; (D)s =p->next; p =s->next; 答题: A. B. C. D. 参考答案:B

2. 在*p之前插入节点*s的操作是:

(A)q =s->next; s =p->next; (B)q->next=s; s->next=p; (C)s=p->next; q=s->next; (D)s->next=p; q->next=s; 答题: A. B. C. D. 参考答案:D

3. 在*hear之前插入节点*s的操作是:

(A)s->next=head; head=s; (B)s->next=head->next; head->next=s; (C)head=s; s->next=head; (D)head->next=s; s->next=head->next; 答题: A. B. C. D. 参考答案:A

4. 删除*p节点的操作是:

(A)q =p; delete p; (B)p = q; delete q;

(C)q->next=p->next; delete p; (D)p->next = q->next; delete q; 答题: A. B. C. D. 参考答案:C

5. 删除*(head->next)的操作是( )。

(A)p=head->next; head->next=head->next->next; delete p; (B)head->next=head->next->next; p=head->next; delete p; (C)p=head; head=head->next; delete p; (D)head=head->next; p=head; delete p; 答题: A. B. C. D. 参考答案:A

第六章类与对象

> 6.1 类和对象的定义与访问

1. 下列类的定义中正确的是().

(A) class a{int x=0;int y=1;} (B) class b{int x=0;int y=1;}; (C) class c{intx;int y;} (D) class d{intx;int y;}; 答题: A. B. C. D. 参考答案:D

2. 若有以下说明,则在类外使用对象objX成员的正确语句是()。

class X { int a;

void fun1(); public:

void fun2(); };

X objX;

(A)objX.a=0; (B)objX.fun1(); (C)objX.fun2(); (D)X::fun1(); 答题: A. B. C. D. 参考答案:D

3. 在类定义的外部,可以被访问的成员有()。

(A)所有类成员 (B)private或protected的类成员 (C)public的类成员 (D)public或private的类成员 答题: A. B. C. D. 参考答案:C

4. 下列关于类和对象的说法中,正确的是()。 (A) 编译器为每个类和类的对象分配内存 (B) 类的对象具有成员函数的副本 (C) 类的成员函数由类来调用

(D) 编译器为每个对象的数据成员分配内存 答题: A. B. C. D. 参考答案:D

5. 关于this指针的说法正确的是()。

(A)this指针必须显式说明 (B)定义一个类后,this指针就指向该类 (C)成员函数拥有this指针 (D)静态成员函数拥有this指针 答题: A. B. C. D. 参考答案:C

> 6.2 构造函数和析构函数

1. 下面对构造函数的不正确描述是()。

(A)用户定义的构造函数不是必须的 (B)构造函数可以重载

(C)构造函数可以有参数,也可以有返回值 (D)构造函数可以设置默认参数 答题: A. B. C. D. 参考答案:C

2. 下面对析构函数的正确描述是()。

(A)系统在任何情况下都能正确析构对象 (B)用户必须定义类的析构函数 (C)析构函数没有参数,也没有返回值 (D)析构函数可以设置默认参数 答题: A. B. C. D. 参考答案:C

3. 构造函数是在()时被执行的。

(A) 建立源程序文件(B) 创建对象(C) 创建类(D) 程序编译时 答题: A. B. C. D. 参考答案:B

4. 下列函数原型中,可以作为类Base析构函数的是()。 (A) void~Base (B) ~Base() (C) ~Base()const (D) Base()

答题: A. B. C. D. 参考答案:B

5. AB是一个类,那么执行语句“AB a (4), b[3], *p ;”调用了()次构造函数。 (A) 2 (B) 3 (C) 4 (D) 5 答题: A. B. C. D. 参考答案:C

6. 下面关于复制构造函数调用的时机,不正确的是()调用。 (A) 访问对象时 (B) 对象初始化时

(C) 函数具有类类型传值参数时 (D) 函数返回类类型值时 答题: A. B. C. D. 参考答案:A

7. 说明一个类的对象时,系统自动调用( )。

(A)成员函数 (B)构造函数 (C)析构函数 (D)友元函数 答题: A. B. C. D. 参考答案:B

8. 程序中撤销一个类对象时,系统自动调用( )。

(A)成员函数 (B)构造函数 (C)析构函数 (D)友元函数 答题: A. B. C. D. 参考答案:C

> 6.3 类的其他成员

1. 在下列选项中,()不是类的成员函数。

(A)构造函数 (B)析构函数 (C)友元函数 (D)复制构造函数 答题: A. B. C. D. 参考答案:C

2. 下面对友元的错误描述是()。 (A)关键字friend用于声明友元

(B)一个类中的成员函数可以是另一个类的友元 (C)友元函数访问对象的成员不受访问特性影响 (D)友元函数通过this指针访问对象成员

答题: A. B. C. D. 参考答案:D

3. 已知类A是类B的友元,类B是类C的友元,则下面选项描述正确的是()。 (A) 类A一定是类C 的友元 (B) 类C一定是类A 的友元

(C) 类C 的成员函数可以访问类B 的对象的任何成员 (D) 类A 的成员函数可以访问类B 的对象的任何成员 答题: A. B. C. D. 参考答案:D

4. 下述关于类的静态成员的特性中,描述错误的是()。 (A) 说明静态数据成员时前边要加修饰符static (B) 静态数据成员要在类体外定义

(C) 引用静态数据成员时,要在静态数据成员前加<类名>和作用域运算符 (D) 每个对象有自己的静态数据成员副本 答题: A. B. C. D. 参考答案:D

5. 若有以下说明,则对n的正确访问语句是()。 class Y { //?; public:

staticint n; };

int Y::n; Y objY;

(A)n=1; (B)Y::n=1; (C)objY::n=1; (D)Y->n 答题: A. B. C. D. 参考答案:B

6. 若有以下类Z说明,则函数fStatic中访问数据a错误的是()。 class Z

{ staticint a; public:

static void fStatic(Z&); };

int Z::a=0; Z objZ;

(A)void Z::fStatic() { objZ.a =1; } (B)void Z::fStatic() { a = 1; }

(C)void Z::fStatic() { this->a = 0; } (D)void Z::fStatic() { Z::a = 0; } 答题: A. B. C. D.

参考答案:C

7. 若有以下类W说明,则函数fConst的正确定义是()。 class W { int a; public:

voidfConst(int&) const; };

(A)void W::fConst( int&k )const { k = a; } (B)void W::fConst( int&k )const { k = a++; } (C)void W::fConst( int&k )const { cin>> a; } (D)void W::fConst( int&k )const { a = k; } 答题: A. B. C. D. 参考答案:A

8. 若有以下类T说明,则函数fFriend的错误定义是( )。 class T { inti;

friend void fFriend( T&, int ); };

(A)void fFriend( T &objT, int k ) { objT.i = k; } (B)void fFriend( T &objT, int k ) { k = objT.i; } (C)void T::fFriend( T &objT, int k ) { k += objT.i; } (D)void fFriend( T &objT, int k ) { objT.i += k; } 答题: A. B. C. D. 参考答案:C

> 6.4 类的包含

1. 若class B中定义了一个class A的类成员A a,则关于类成员的正确描述是()。 (A)在类B的成员函数中可以访问A类的私有数据成员 (B)在类B的成员函数中可以访问A类的保护数据成员

(C)类B的构造函数可以调用类A的构造函数做数据成员初始化 (D)类A的构造函数可以调用类B的构造函数做数据成员初始化 答题: A. B. C. D. 参考答案:C

2. 下列关于类的包含描述正确的是()。

(A) 可以使用赋值语句对对象成员进行初始化

(B) 可以使用“参数初始式”调用成员类的构造函数初始化对象成员 (C) 被包含类可以访问包含类的成员

(D)首先执行自身构造函数,再调用成员类的构造函数 答题: A. B. C. D. 参考答案:B

第一章 运算符重载 > 7.1 运算符重载规则 1. 在下列运算符中,不能重载的是()。

(A) ! (B)sizeof (C)new (D)delete 答题: A. B. C. D. 参考答案:B

2. 在下列关于运算符重载的描述中,()是正确的。

(A)可以改变参与运算的操作数个数 (B)可以改变运算符原来的优先级 (C)可以改变运算符原来的结合性 (D)不能改变原运算符的语义 答题: A. B. C. D. 参考答案:D

3. 运算符函数是一种特殊的()或友元函数。

(A)构造函数(B)析构函数(C)成员函数(D)重载函数 答题: A. B. C. D. 参考答案:C

4. 设op表示要重载的运算符,那么重载运算符的函数名是:()。 (A)operator op (B) op(C)函数标识符(D)函数标识符op 答题: A. B. C. D. 参考答案:A

5. 用于类运算的运算符通常都要重载。但有两个运算符系统提供默认重载版本,它们是()。

(A)->和. (B)++ 和 -- (C) = 和&(D)new和delete 答题: A. B. C. D. 参考答案:C

第七章运算符重载

> 7.2 用成员或友元函数重载运算符

1. 在下列函数中,不能重载运算符的函数是()。

(A)成员函数 (B)构造函数 (C)普通函数 (D)友元函数 答题: A. B. C. D. 参考答案:B

2. 在下列运算符中,要求用成员函数重载的运算符是()。 (A)= (B)== (C)<= (D)++ 答题: A. B. C. D. 参考答案:A

3. 在下列运算符中,要求用友元函数重载的运算符是()。 (A)= (B)[] (C)<< (D)() 答题: A. B. C. D. 参考答案:C

4. 如果希望运算符的操作数(尤其是第一个操作数)有隐式转换,则重载运算符时必须用()。 (A)构造函数(B)析构函数 (C)成员函数(D)友元函数 答题: A. B. C. D. 参考答案:D

5. 当一元运算符的操作数,或者二元运算符的左操作数是该类的一个对象时,重载运算符函数一般定义为()。

(A)构造函数(B)析构函数 (C)成员函数(D)友元函数 答题: A. B. C. D. 参考答案:C

> 7.3 几个典型运算符的重载

1. 设有类A的对象Aobject,若用成员函数重载前置自增表达式,那么++Aobject被编译器解释为()。

(A)Aobject.operator++() (B)operator++(Aobject) (C)++(Aobject) (D)Aobject :: operator++() 答题: A. B. C. D. 参考答案:A

2. 运算符++,=,+和[]中,只能用成员函数重载的运算符是()。 (A)+和= (B)[]和后置++

(C)=和[] (D)前置++和[] 答题: A. B. C. D. 参考答案:C

3. 在C++中,如果在类中重载了函数调用运算符(),那么重载函数调用的一般形式为: ()。 (A)(表达式)对象 (B)(表达式表)对象 (C)对象(表达式) (D)对象(表达式表) 答题: A. B. C. D. 参考答案:D

4. 设有类A的对象Aobject,若用友员函数重载后置自减表达式,那么Aobject--被编译器解释为()。

(A)Aobject.operator--() (B)operator--(Aobject,0) (C)--(Aobject,0) (D)--(Aobject,0) 答题: A. B. C. D. 参考答案:B

5. 如果表达式++j*k中的“++”和“*”都是重载的友元运算符,则采用运算符函数调用格式,该表达式还可以表示为()。

(A)operator*(j.operator++(),k) (B)operator*(operator++(j),k) (C)operator++(j).operator*(k) (D)operator*(operator++(j),) 答题: A. B. C. D. 参考答案:B

6. 如果类A要重载插入运算符“<<”,那么重载函数参数表的形式一般定义为()。 (A)(constA&) (B)(ostream&) (C)(constA&,ostream&) (D)(ostream&,constA&) 答题: A. B. C. D. 参考答案:D

> 7.4 类类型转换

1. 类型转换函数只能定义为一个类的()。

(A)构造函数 (B)析构函数 (C)成员函数 (D)友员函数 答题: A. B. C. D. 参考答案:C

2. 具有一个非默认参数的构造函数一般用于实现从()的转换。 (A)该类类型到参数类型 (B)参数类型到该类类型 (C)参数类型到基本类型 (D)类类型到基本类型 答题: A. B. C. D. 参考答案:B

3. 假设ClassX是类类型标识符,Type为类型标识符,可以是基本类型或类类型,Type_Value为Type类型的表达式,那么,类型转换函数的形式为()。 (A)ClassX :: operator Type(Type t){? return Type_Value;} (B)friendClassX :: operator Type(){? return Type_Value;} (C)Type ClassX :: operator Type(){?return Type_Value;} (D)ClassX :: operator Type(){? return Type_Value;} 答题: A. B. C. D. 参考答案:D

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

(A)任何形式的构造函数都可以实现数据类型转换。

(B)带非默认参数的构造函数可以把基本类型数据转换成类类型对象。 (C)类型转换函数可以把类类型对象转换为其他指定类型对象。

(D)类型转换函数只能定义为一个类的成员函数,不能定义为类的友元函数。 答题: A. B. C. D. 参考答案:A

5. C ++中利用构造函数进行类类型转换时的构造函数形式为()。 (A)类名::类名(arg); (B)类名::类名(arg,arg1=E1,?,agrn=En); (C)~类名(arg); (D)~类名(arg,arg1=E1,?,agrn=En); 答题: A. B. C. D. 参考答案:B

第八章继承

> 8.1 类之间的关系

1. 一个大的应用程序,通常由多个类构成,类与类之间互相协同工作, 它们之间有三种主要关系。下列不属于类之间关系的是( )。

(A) gets-a (B) has-a (C) uses-a (D) is-a 答题: A. B. C. D. 参考答案:A

2. 在c++中,类之间的继承关系具有()。

(A) 自反性 (B) 对称性 (C) 传递性 (D) 反对称性 答题: A. B. C. D. 参考答案:C

3. 下列关于类之间关系的描述,正确的是( )。

(A) has-a表示一个类部分地使用另一个类(B) uses-a表示类的包含关系 (C)is-a关系具有对称性。 (D) is-a机制称为“继承” 答题: A. B. C. D. 参考答案:D

4. 下列关于类的描述,正确的是( )。

(A)父类具有子类的特征 (B) 一个类只能从一个类继承 (C) is-a 关系具有传递性 (D) uses-a表示类的继承机制 答题: A. B. C. D. 参考答案:C

5. 下列关于类之间关系的描述,错误的是( )。

(A)用有向无环图(DAG)表示的类之间关系,称为“类格” (B) DAG中每一个结点是一个类定义,它的前驱结点称为基类 (C) DAG中每一个结点是一个类定义,它的后继结点称为派生类 (D) DAG中每一个结点是一个类定义,它有且仅有一个前驱结点 答题: A. B. C. D. 参考答案:D

6. 下列关于类的继承描述中,正确的是()。

(A) 派生类公有继承基类时,可以访问基类的所有数据成员,调用所有成员函数。

(B) 派生类也是基类,所以它们是等价的。

(C) 派生类对象不会建立基类的私有数据成员,所以不能访问基类的私有数据成员。 (D)一个基类可以有多个派生类,一个派生类可以有多个基类。 答题: A. B. C. D. 参考答案:D

> 8.2 基类和派生类

1. 当一个派生类公有继承一个基类时,基类中的所有公有成员成为派生类的()。 (A) public成员 (B) private成员 (C) protected成员 (D) 友员 答题: A. B. C. D. 参考答案:A

2. 当一个派生类私有继承一个基类时,基类中的所有公有成员和保护成员成为派生类的()。

(A) public成员 (B) private成员 (C) protected成员 (D) 友员 答题: A. B. C. D. 参考答案:B

3. 当一个派生类保护继承一个基类时,基类中的所有公有成员和保护成员成为派生类的()。

(A) public成员 (B) private成员 (C) protected成员 (D)友员 答题: A. B. C. D. 参考答案:C

4. 不论派生类以何种方式继承基类,都不能直接使用基类的()。 (A) public成员 (B) private成员 (C) protected成员 (D) 所有成员 答题: A. B. C. D. 参考答案:B

5. 在C++中,不加说明,则默认的继承方式是( )。

(A) public (B)private (C) protected (D) public或protected 答题: A. B. C. D. 参考答案:B

6. 某公有派生类的成员函数不能直接访问基类中继承来的某个成员,则该成员一定是基类中的( )。

(A)私有成员 (B)公有成员 (C)保护成员 (D)保护成员或私有成员 答题: A. B. C. D. 参考答案:A

7. 下列关于类层次中重名成员的描述,错误的是()。 (A)C++允许派生类的成员与基类成员重名

(B)在派生类中访问重名成员时,屏蔽基类的同名成员 (C)在派生类中不能访问基类的同名成员

(D)如果要在派生类中访问基类的同名成员,可以显式地使用作用域符指定 答题: A. B. C. D. 参考答案:C

8. 下列关于类层次中静态成员的描述,正确的是()。 (A)在基类中定义的静态成员,只能由基类的对象访问 (B) 在基类中定义的静态成员,在整个类体系中共享

(C)在基类中定义的静态成员,不管派生类以何种方式继承,在类层次中具有相同的访问性质

(D)一旦在基类中定义了静态成员,就不能在派生类中再定义 答题: A. B. C. D. 参考答案:B

> 8.3 基类的初始化

1. 在c++中,可以被派生类继承的函数是()。

(A)成员函数 (B)构造函数 (C)析构函数 (D)友员函数 答题: A. B. C. D. 参考答案:A

2. 下列关于派生类对象的初始化,叙述正确的是()。 (A)是由派生类的构造函数实现的 (B)是由基类的构造函数实现的

(C)是由基类和派生类的构造函数实现的

(D)是系统自动完成的,不需要程序设计者干预 答题: A. B. C. D. 参考答案:C

3. 在创建派生类对象时,构造函数的执行顺序是()。

(A) 对象成员构造函数―基类构造函数―派生类本身的构造函数 (B) 派生类本身的构造函数―基类构造函数―对象成员构造函数 (C) 基类构造函数―派生类本身的构造函数―对象成员构造函数 (D)基类构造函数―对象成员构造函数―派生类本身的构造函数 答题: A. B. C. D. 参考答案:D

4. 在具有继承关系的类层次体系中,析构函数执行的顺序是()。 (A)对象成员析构函数―基类析构函数―派生类本身的析构函数 (B) 派生类本身的析构函数―对象成员析构函数―基类析构函数 (C) 基类析构函数―派生类本身的析构函数―对象成员析构函数 (D) 基类析构函数―对象成员析构函数―派生类本身的析构函数 答题: A. B. C. D.

参考答案:B

5. 在创建派生类对象时,类层次中构造函数的执行顺序是由()。 (A)派生类的参数初始式列表的顺序决定的 (B)系统规定的

(C)是由类的书写顺序决定的 (D)是任意的

答题: A. B. C. D. 参考答案:B

> 8.5 多继承

1. 当不同的类具有相同的间接基类时,()。

(A) 各派生类无法按继承路线产生自己的基类版本

(B)为了建立惟一的间接基类版本,应该声明间接基类为虚基类 (C)为了建立惟一的间接基类版本,应该声明派生类虚继承基类

(D)一旦声明虚继承,基类的性质就改变了,不能再定义新的派生类 答题: A. B. C. D. 参考答案:C

2. 下列关于多继承的描述,错误的是()。

(A) 一个派生类对象可以拥有多个直接或间接基类的成员 (B)在多继承时不同的基类可以有同名成员

(C)对于不同基类的同名成员,派生类对象访问它们时不会出现二义性 (D)对于不同基类的不同名成员,派生类对象访问它们时不会出现二义性 答题: A. B. C. D. 参考答案:C

3. 下面关于基类和派生类的描述,正确的是()。

(A)一个类可以被多次说明为一个派生类的直接基类,可以不止一次地成为间接基类 (B)一个类不能被多次说明为一个派生类的直接基类,可以不止一次地成为间接基类 (C)一个类不能被多次说明为一个派生类的直接基类,且只能成为一次间接基类 (D)一个类可以被多次说明为一个派生类的直接基类,但只能成为一次间接基类 答题: A. B. C. D. 参考答案:B

4. 下列关于虚继承的说明形式的描述,正确的是()。 (A)在派生类类名前添加关键字virtual (B)在基类类名前添加关键字virtual (C)在基类类名后添加关键字virtual

(D)在派生类类名后,类继承的关键字之前添加关键字virtual 答题: A. B. C. D. 参考答案:D

5. 设置虚基类的目的是()。 (A)简化程序 (B)消除二义性

(C)提高运行效率 (D)减少目标代码 答题: A. B. C. D. 参考答案:B

第九章虚函数与多态性

> 9.2 类指针的关系

1. 静态联编又叫做( )。 (A)延迟联编 (B)早期联编 (C)晚期联编

(D)以上三者都行

答题: A. B. C. D. 参考答案:B

2. 基类的指针与派生类指针,可以分别指向基类对象或派生类对象而形成4种情形。在这4种情形中,需要进行强制类型转换的是( )。 (A)基类指针指向基类对象 (B)基类指针指向派生类对象 (C)派生类指针指向基类对象 (D)派生类指针指向派生类对象 答题: A. B. C. D. 参考答案:C

3. 当基类指针指向派生类对象时,会发生( )。 (A)错误,基类指针不能指向派生类对象

(B)基类指针可以指向派生类对象,但在此情况下只能调用基类自己定义的成员函数 (C)基类指针可以调用派生类的成员函数 (D)以上说法全部错误 答题: A. B. C. D. 参考答案:B

4. 当基类指针指向派生类对象时,利用基类指针调用派生类中与基类同名但被派生类重写后的成员函数时,调用的是( )。 (A)基类的成员函数 (B)派生类的成员函数 (C)不确定

(D)先调用基类的,再调用派生类的 答题: A. B. C. D. 参考答案:A

5. 当派生类指针指向基类对象时( )。 (A)可以直接调用基类的成员函数 (B)可以调用派生类对象的成员函数

(C)必须强制将派生类指针转换成基类指针才能调用基类的成员函数 (D)以上说法都不对 答题: A. B. C. D. 参考答案:C

> 9.3 虚函数和动态联编

1. 在C++中,要实现动态联编,必须使用( )调用虚函数。 (A)基类指针 (B)对象名 (C)派生类指针 (D)类名 答题: A. B. C. D. 参考答案:A

2. 下列函数中,不能说明为虚函数的是( )。

(A)析构函数 (B)构造函数 (C)公有成员函数 (D)私有成员函数 答题: A. B. C. D. 参考答案:B

3. 在派生类中,重载一个虚函数时,要求函数名、参数的个数、参数的类型、参数的顺序和函数的返回值( )。

(A)部分相同 (B)相容 (C)不同 (D)相同 答题: A. B. C. D. 参考答案:D

4. 下面关于构造函数和析构函数的描述,错误的是( ) 。 (A)析构函数中调用虚函数采用静态联编 (B)对虚析构函数的调用可以采用动态联编

(C)当基类的析构函数是虚函数时,其派生类的析构函数也一定是虚函数 (D)构造函数可以声明为虚函数 答题: A. B. C. D. 参考答案:D

5. C++中,根据( )识别类层次中不同类定义的虚函数版本。 (A) 参数个数 (B) 参数类型 (C) 函数名

(D) this指针类型

答题: A. B. C. D. 参考答案:D

6. 虚析构函数的作用是( )。。

(A)虚基类必须定义虚析构函数 (B)类对象作用域结束时释放资源 (C)delete动态对象时释放资源 (D)无意义

答题: A. B. C. D. 参考答案:C

> 9.4 纯虚函数和抽象类

1. 下面函数原型中,( )声明了fun为纯虚函数。 (A)void fun()=0;

(B)virtual void fun()=0; (C)virtual void fun(); (D)virtual void fun(){ }; 答题: A. B. C. D. 参考答案:B

2. 若一个类中含有纯虚函数,则该类称为( )。 (A) 基类 (B) 纯基类 (C) 抽象类 (D) 派生类 答题: A. B. C. D. 参考答案:C

3. 假设Aclass为抽象类,下列正确的说明语句是( (A) Aclass fun( int ) ; (B) Aclass * p ;

(C) int fun( Aclass ) ; (D) AclassObj ;

答题: A. B. C. D. 参考答案:B

4. 下面描述中,正确的是( )。 (A) 虚函数是没有实现的函数

(B) 纯虚函数是返回值等于0的函数 (C) 抽象类是只有纯虚函数的类

(D) 抽象类指针可以指向不同的派生类 答题: A. B. C. D. 参考答案:D

5. 异质链表是( )。 (A) 用数组组织类对象 (B) 用链表组织类对象

(C) 用抽象类指针指向派生类对象

(D) 用抽象类指针构造派生类对象链表 答题: A. B. C. D.

。 ) 参考答案:D

第十章模板

> 10.2 函数模板

1. 关于函数模板,描述错误的是()。

( A )函数模板必须由程序员实例化为可执行的函数模板 ( B )函数模板的实例化由编译器实现

( C )一个类定义中,只要有一个函数模板,这个类就是类模板

( D )类模板的成员函数都是函数模板,类模板实例化后,成员函数也随之实例化 答题: A. B. C. D. 参考答案:A

2. 在下列模板说明中,正确的是()。 ( A )template ( B )template < class T1, T2 >

( C )template ( D )template ( typedef T1, typedef T2 ) 答题: A. B. C. D. 参考答案:C

3. 假设有函数模板定义如下: template Max( T a, T b ,T &c) { c = a + b; }

下列选项正确的是( )。 ( A )int x, y; char z; Max( x, y, z ); ( B )double x, y, z; Max( x, y, z ); ( C )int x, y; float z; Max( x, y, z );

( D )float x; double y, z; Max( x, y, z ); 答题: A. B. C. D. 参考答案:B

4. 有模板说明

template 则T在函数模板中( )。

( A ) 可以做为返回类型、参数类型和函数中的变量类型 ( B ) 只能做为函数返回类型 ( C ) 只能做为函数参数类型

( D ) 只能用于函数中的变量类型 答题: A. B. C. D. 参考答案:A

5. 关于函数模板的同名函数重载,叙述正确的是()。 ( A ) 函数模板由调用自行实例化,不可以定义重载版本 ( B ) 函数模板可以用不同类型,不同个数的参数重载 ( C ) 函数模板只能用其他类属参数重载

( D ) 函数模板只能用参数个数相同参数重载 答题: A. B. C. D. 参考答案:B

> 10.3 类模板

1. 关于类模板,描述错误的是( )。 (A)一个普通基类不能派生类模板

(B)类模板可以从普通类派生,也可以从类模板派生

(C)根据建立对象时的实际数据类型,编译器把类模板实例化为模板类 (D)函数的类模板参数需生成模板类并通过构造函数实例化 答题: A. B. C. D. 参考答案:A

2. 建立类模板对象的实例化过程为( )。 (A)基类→派生类 (B)构造函数→对象 (C)模板类→对象 (D)模板类→模板函数 答题: A. B. C. D. 参考答案:C

3. 有模板说明

template

则T在函数模板中( )。

( A ) 可以做为返回类型、参数类型和函数中的变量类型 ( B ) 只能做为函数返回类型 ( C ) 只能做为函数参数类型

( D ) 只能用于函数中的变量类型 答题: A. B. C. D. 参考答案:A

4. 关于函数模板的同名函数重载,叙述正确的是( )。 ( A ) 函数模板由调用自行实例化,不可以定义重载版本 ( B ) 函数模板可以用不同类型,不同个数的参数重载 ( C ) 函数模板只能用其他类属参数重载

( D ) 函数模板只能用参数个数相同参数重载 答题: A. B. C. D. 参考答案:B

5. 关于类模板的静态数据成员,错误叙述的是( )。

( A ) 一个类模板实例化的所有对象共享一个静态数据成员 ( B ) 每一个实例化的模板类都有自己的静态数据成员副本 ( C ) 一个模板类实例化的所有对象共享一个静态数据成员

( D ) 类模板实例化的静态数据成员应该在文件范围内定义和初始化 答题: A. B. C. D. 参考答案:A

6. 6. 若有类模板声明: template classTclass {

int k; public:

Tclass(int); //?? };

以下正确的说明语句正确的是( )。 ( A ) Tclass(double) t(10); ( B ) Tclass< double > t(10); ( C ) Tclass<0.5> t( 10 ); ( D ) Tclass t(10);

答题: A. B. C. D. 参考答案:B

第十一章输入/输出流

> 11.2 标准流和流操作

1. 在下列流类中,可以用于处理文件的是()。

(A)ios (B)iostream (C)strstream (D)fstream 答题: A. B. C. D. 参考答案:D

2. 在下列选项中,()是istream类的对象。 (A)cerr (B)cin (C)clog (D)cout 答题: A. B. C. D. 参考答案:B

3. 以下不可以作为输出流对象的是()。 (A) 文件 (B) 内存 (C) 键盘 (D) 显示器 答题: A. B. C. D. 参考答案:C

4. 用于处理字符串流的是()。

(A)strstream (B)ios (C)fstream (D)iostream 答题: A. B. C. D. 参考答案:A

5. 能够从输入流中提取指定长度的字节序列的函数是()。 (A)get (B)getline (C)read (D)cin 答题: A. B. C. D. 参考答案:C

6. 能够把指定长度的字节序列插入到输出流中的函数是()。 (A)put (B)write (C)cout (D)print 答题: A. B. C. D. 参考答案:B

7. getline函数的功能是从输入流中读取()。

(A)一个字符 (B)当前字符 (C)一行字符 (D)指定若干个字节 答题: A. B. C. D. 参考答案:C

8. 要进行文件的输出,除了包含头文件iostream外,还要包含头文件()。 (A)ifstream (B)fstream (C)ostream (D)cstdio 答题: A. B. C. D. 参考答案:B

9. 用标准输入流对象cin与提取操作符>>连用进行输入时,将空格与回车当作分隔符,使用()成员函数进行输入时可以指定输入分隔符。

(A)get() (B)put() (C)read() (D)gcount() 答题: A. B. C. D. 参考答案:A

10. 在ios类中,状态字用于记录流错误状态,其每一位对应一种流的错误状态,其中()表示流数据已遭到损坏?

(A)goodbit (B)eofbit (C)failbit (D)badbit 答题: A. B. C. D. 参考答案:D

> 11.3 格式控制

1. 在下列选项中,用于清除基数格式位设置以十六进制数输出的语句是()。 (A)cout<>setf( ios::hex, ios::basefield );

答题: A. B. C. D. 参考答案:B

2. 下列格式控制符,既可以用于输入,又可以用于输出的是()。 (A)setbase (B)setfill (C)setprecision (D)setw 答题: A. B. C. D. 参考答案:A

3. 若在I/O流的输出中使用控制符setfill()设置填充字符,应包括的头文件是()。 (A). stdlib.h (B).iostream.h (C).fstream.h (D). iomanip.h 答题: A. B. C. D. 参考答案:D

4. 以下程序的输出结果是()。

cout<

5. 以下语句中,输出结果与众不同的一个是()。 (A) cout<<\ (B) cout<<\ (C) cout<<\

(D) cout<<\ 答题: A. B. C. D. 参考答案:B

> 11.5 文件处理

1. 在文件操作中,代表以追加方式打开文件的模式是()。 (A)iso::ate (B)iso::app (C)iso::out (D) iso::trunc 答题: A. B. C. D. 参考答案:B

2. 下列打开文件的表达式中,()是错误的。 (A) ofstream ofile; ofile.open(\ (B) fstream iofile; iofile.open(\ (C) ifstream ifile(\

(D) cout.open(\ 答题: A. B. C. D. 参考答案:C

3. 以下关于文件操作的叙述中,不正确的是()。

(A) 打开文件的目的是使文件对象与磁盘文件建立联系

(B) 文件的读写过程中,程序将直接与磁盘文件进行数据交换 (C) 关闭文件的目的之一是保证输出的数据写入硬盘文件 (D) 关闭文件的目的之一是释放内存中的文件对象 答题: A. B. C. D. 参考答案:B

4. 以下不能正确创建输出文件对象并使其与磁盘文件相关联的语句是()。 (A) ofstream myfile; myfile.open(\

(B) ofstream *myfile=new ofstream; myfile->open(\ (C) ofstream myfile(\

(D) ofstream *myfile=new (\ 答题: A. B. C. D. 参考答案:D

5. 要求打开文件 D:\\file.dat,并能够写入数据,正确的语句是()。 (A)ifstream infile(\ (B)ifstream infile(\ (C)ofstream outfile(\

(D)fstream infile(\ 答题: A. B. C. D. 参考答案:D

6. 能实现删除文件功能的语句是()。 (A)ofstream fs(\ (B)ifstream fs(\ (C)ofstream fs(\ (D)ifstream fs(\ 答题: A. B. C. D. 参考答案:A

7. 设已定义浮点型变量data,以二进制代码方式把data的值写入输出文件流对象outfile中,正确的语句是()。

(A)outfile.write((double *) &data, sizeof(double)); (B)outfile.write((double *) &data, data);

(C)outfile.write((char *) &data, sizeof(double)); (D)outfile.write((char *) &data, data); 答题: A. B. C. D. 参考答案:C

8. 二进制数据文件流fdat读指针移到文件头的语句是()。 (A)fdat.seekg( 0, ios::beg); (B)fdat.tellg( 0, ios::beg ); (C)fdat.seekp( 0, ios::beg); (D)fdat.tellp( 0, ios::beg ); 答题: A. B. C. D. 参考答案:A

本文来源:https://www.bwwdw.com/article/4xsp.html

Top