北师大网网络教育 C++程序设计二(答案).doc
C+程序设计第二套作业及其答案说明:本套作业涵盖第4章第6章所学的内容。本套作业共有33道单选题,33个答案,满分为100分,错一道题扣除3分。1、在类的定义形式中,数据成员、成员函数和( A )组成了类定义体。(A)成员的访问控制属性(B)公有类型(C)私有类型(D)保护类型2、在下列关键字中,用以说明类中公有成员的是( A )。(A)public(B)private(C)protected(D)friend3、( D )不是构造函数的特征。(A)构造函数的函数名与类名相同(B)构造函数可以重载(C)构造函数可以设置默认参数(D)构造函数必须指定类型说明4、( A )是析构函数的特征。(A)一个类中只能定义一个析构函数(B)析构函数名与类名不同(C)析构函数的定义只能在类体内(D)析构函数可以有一个或多个参数5、关于成员函数特征的下述描述中,( A )是错误的。(A)成员函数一定是内联函数(B)成员函数可以重载(C)成员函数可以设置参数的默认值(D)成员函数可以是静态的6、下列存储类标识符中,( C )的可见性与存在性不一致。(A)外部类(B)自动类(C)内部静态类(D)寄存器类7、要求通过函数来实现一种不太复杂的功能,并且要求加快执行速度,选用( A )。(A)内联函数(B)重载函数(C)递归调用(D)嵌套调用8、以下程序的输出结果是( A )。#include<iostream>using namespace std;int func(int a, int b);int main() int k = 4, m = 1, p;p = func(k, m);cout << p << ","p = func(k, m);cout << p << endl;return 0;int func(int a, int b) static int m, i = 2;i += m + 1;m = i + a + b;return m;(A)8,17(B)8,16(C)8,20(D)8,89、下面选项中,不是类的成员函数为( C )。(A)构造函数(B)析构函数(C)友元函数(D)拷贝构造函数10、下面关于友元的描述中,错误的是( D )。(A)友元函数可以访问该类的私有数据成员(B)一个类的友元类中的成员函数都是这个类的友元函数(C)友元可以提高程序的运行效率(D)类与类之间的友元关系可以继承11、局部变量可以隐藏全局变量,那么在有同名全局变量和局部变量的情形时,可以用( A )提供对全局变量的访问。(A)作用域运算符(B)extern关键字(C)重载(D)引用12、对于常成员函数,在下列描述中,正确的是( C )。(A)常成员函数只能修改常数据成员(B)常成员函数只能修改一般数据成员(C)常成员函数不能修改任何数据成员(D)常成员函数只能通过常对象调用13、下面对静态数据成员的描述中,正确的是( A )。(A)静态数据成员是类的所有对象共享的数据(B)类的每个对象都有自己的静态数据成员(C)类的不同对象有不同的静态数据成员值(D)静态数据成员不能通过类的对象调用14、友元访问类的对象的成员时使用( D )。(A)类的成员名(B)this指针指向成员名(C)“类名:成员名” 的形式(D)“对象名.成员名”的形式15、下列程序输出的结果是( B )。#include <iostream>using namespace std;void fun();int main()for(int i=1; i<3; i+)fun();return 0;void fun()static int n = 10;n+;cout << "n=" << n << endl;(A)n=11(B)n=11(C)n=10(D)n=10 n=11 n=12 n=11 n=1016、以下对一维数组a的正确定义是( C )。(A)int n = 5, an;(B)int a(5);(C)const int n = 5; int an;(D)int n; cout << n << endl;17、下列数组定义语句中,不合法的是( A )。(A)int a3 = 0, 1, 2, 3;(B)int a = 0, 1, 2;(C)int a3 = 0, 1, 2;(D)int a3 = 0;18、已知int a = 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, *p = a;,则不能表示数组a中元素的式子是( C )。(A)*a(B)*p(C)a(D)ap - a19、已知int a = 0, 2, 4, 6, 8, 10, *p = a;,值不等于0的表达式是( D )。(A)*(p+)(B)*a(C)*(p-)(D)*(+p)20、以下不能对二维数组a进行正确初始化的语句是( C )。(A) int a23 = 0;(B) int a3 = 0,1,0;(C) int a23 = 0,1, 2,3, 4,5;(D) int a3 = 0, 1, 2, 3, 4, 5;21、已知int a3 = 0,1, 2,3,4, 5,6, 7,则a21的值是( C )。(A)0(B)2(C)6(D)722、已知int a = 3, *p = &a; 则 *p的值是( D )。(A)变量a的地址值(B)无意义(C)变量p的地址值(D)323、对于int *pa5; 的描述,( D )是正确的。(A) pa是一个指向数组的指针,所指向的数组是5个int型元素(B) pa是一个指向某数组中第5个元素的指针,该元素是int型变量(C) pa5表示某个数组的 第5个元素的值(D) pa是一个具有5个元素的指针数组,每个元素是一个int型指针24、指针可以用来表示数组元素,下列表达式中( A )是错误的。已知:int a37;(A)*(a+1)5(B)*(*a+3)(C)*(*(a+1)(D)*(&a00+2)25、已知int a33 = 1, 2, 3, 4, 5, 6, 7, 8, 9,则不能表示数组元素a21的地址是( B )。(A)&a21(B)*(a2+1)(C)a2+1(D)*(a+2)+126、已知f1(int)是类A的公有成员函数,p是指向成员函数f1()的指针,采用( B )是正确的。(A)p = f1(B)p = A:f1(C)p = A:f1()(D)p = f1()27、已知:p是一个指向类A数据成员m的指针,A1是类A的一个对象。如果要给m赋值为5,( C )是正确的。(A)A1.p = 5(B)A1->p = 5(C)A1.*p = 5(D)*A1.p = 528、已知:类A中一个成员函数说明如下: void Set(A&a);其中,A&a的含义是( C )。(A)指向类A的指针为a(B)将a的地址值赋给变量Set(C)a是类A的对象引用,用来作函数Set()的形参(D)变量A与a按位相与作为函数Set()的参数29、下列关于对象数组的描述中,( D )是错误的。(A)对象数组的下标是从0开始的(B)对象数组的数组名是一个常量指针(C)对象数组的每个元素是同一类的对象(D)对象数组只能赋初值,而不能在定义后赋值30、下列定义中,( B )是定义指向数组的指针p。(A)int *p5(B)int (*p)5(C)(int *)p5(D)int *p31、已知:print()函数是一个类的常成员函数,它无返回值,下列表示中,( A )是正确的。(A)void print() const(B)const void print()(C)void const print()(D)void print(const)32、关于new运算符的下列描述,( D )是错误的。(A)它可以用来动态创建对象和对象数组(B)使用它创建的对象或对象数组,可以使用运算符delete删除(C)使用它创建对象时要调用构造函数(D)使用它创建对象数组时必须指定初始值33、关于delete运算符的下列描述中,( C )是错误的。(A)它必须用于new返回的指针(B)它也适用于空指针(C)对一个指针可以使用多次该运算符(D)指针名前只用一对方括号符,不管所删除数组的维数(完)