C++ 考试经典试题样卷四
一. 选择题(以下每题有四个选项可供选择,请选择最正确的一个答案,将标号填入答题纸上,每题1分,共20分)
1、 能用作用户自定义标识符。
A) friend B) -var C) 3xyz D) Float 2、面向对象程序设计将数据与 放在一起,做为一个相互依存、不可分割的整体来处理。 A) 对数据的操作 B) 信息 C) 数据隐藏 D) 数据抽象 3、一个类的析构函数 。
A)唯一的 B)允许重载 C)至多可有两个 D)只能是缺省的 4、类型修饰符unsigned修饰 类型是错误的。
A) char B) int C) long int D) float 5、若执行完以下语句,i和j的值分别为 。
int i; int &j=i; i=5; j=i+1;
A) 5,5 B) 5,6 C) 6,6 D) 6,5 6、对于语句int *pa[5];的描述,下列说法正确的是 。
A)pa是一个指向数组的指针,所指向的数组是5个int型元素; B)pa是一个指向某数组中第5个元素的指针,该元素是int型变量; C)pa[5]表示某个数组的第5个元素; D)pa是一个具有5个元素的指针数组,每个元素都是一个int型指针。
7、假设整型数i的地址为0x12345678,指针ip地址为0x21850043,则执行以下语句后,k的值为 。 int i=100; int *ip=&i; int k=*ip;
A) 0x12345678 B) 0x21850043 C) 100 D) 不确定 8、在C++中,一个函数带有参数说明时,则参数的默认值应该在 中给出。 A) 函数定义 B) 函数声明 C) 函数定义或声明 D) 函数调用
9、指针可以用来表示数组元素,若已知语句:int a[3][7];则下列表示中错误的是 。 A) *(a+1)[5]
B) *(*a+3)
C)*(*(a+1)) D)*(&a[0][0]+2)
10、有如下定义:int a[5],*p; p=a;则下列描述错误的是 [10] 。 A) 表达式p=p+1合法的 B) 表达式a=a+1是合法的 C) 表达式p-a是合法的 D) 表达式a+2是合法的 11、#include
int a=3; int f(int); void main( ) { int a=5; f(a);
cout << \}
void f(int b) {
b=4; a+=b; }
程序的输出结果是 [11] A)3
B)5
C)7
D)9
12、以下程序运行结果是 [12] 。
#include
int x=1,y=0,a=0,b=0;
switch(x) { case 1: switch(y)
{case 0:a++;break; case 1:b++;break; } case 2:
a++;b++;break; }
cout << a<<”,” << b; }
A)2,1 B) 1,2
C) 1,1 13、执行下列程序段时,输出 [15] 。 int s1=0,s2=0,s3=0,s4=0; for(int t=1;t<=4;t++) switch(t)
{
case 4:s1++;break; case 3:s2++;break; case 2:s3++; default:s4++; }
cout< A) 语法出错 B) 1,1,1,2 C) 1,2,3,2 D) 1,1,2,2 14、下列说法正确的是: [13] 。 A) 一个类的对象可以是另一个类的成员 B) 一个类可以作为另一个类的派生类 C) 一个类定义在另一个类的说明中 D) 以上说法均正确 15、类MyClass的定义如下: class MyClass { public: MyClass(){value=0;} SetValue(int i){value=i;} private: int value; }; 则对语句:MyClass *p,my;p=&my;正确的描述是 [14] 。 A) 语句p=&my;是把对象my赋值给指针变量p; B) 语句MyClass *p,my;会调用两次类MyClass的构造函数 C) 对语句*p.SetValue(5)的调用是正确的 D) 语句p->SetValue(5)与my.SetValue(5)等价 16、下列各类函数中, 不是类的成员函数。 A) 构造函数 B) 析构函数 C) 友元函数 D) 拷贝构造函数 17、派生类的对象对它的基类成员中 是可以访问的。 A) 公有继承的公有成员 B) 公有继承的私有成员 C) 公有继承的保护成员 D)0,0 D) 私有继承的公有成员 18、有关析构函数的说法不正确的是 。 A) 析构函数有且只有一个 B) 析构函数无任何函数类型 C) 析构函数和构造函数一样可以有形参 D) 析构函数的作用是在对象被撤销时收回先前分配的内存空间 19、通常拷贝构造函数的参数是 。 A) 某个对象名 B) 某个对象的成员名 C) 某个对象的引用名 D) 某个对象的指针名 20、若类A和类B的定义如下: class A { int i,j; public: void get(); } class B: A { int k; public: void make(); } void B::make() { k=i*j; } 则上述定义中, 是非法的表达式。 A) void get(); B) int k; C) void make(); D) k=i*j; 二、填空题(每空1分,共20分) 1、 数学式子x2+y2写成C++语言表达式是 [1] 。 2、如果a=1,b=2,c=3,d=4,则条件表达式a 3、设有函数定义:int f1(void) {return 100,200;},调用f1时,函数返回值为 [3] 。 4、C++使用cin和cout进行输入输出操作的程序必须包含头文件 [4] ,其语句形式为 [5] 。 5、用C++表达式描述命题“a与b中有一个小于c”: [6] 。 6、函数调用语句fun(a+b,(x,y),fun(n+k,d,(a,b)))中实参的个数为 [7] 。 7、定义内联函数所用的关键字 [8] ,定义友元所用的关键字为 [9] 。 8、执行常量定义语句const int size=100*sizeof(int);后,符号常量size的值为 [10] 。 9、设m=1,n=2, 则表达式m++= =n和++m= =n的值分别为 [11] 和 [12] 。 10、任何类中允许有 [13] 、 [14] 、 [15] 三种类型的数据,数据和成员函数的默认类型为 [16] 。 11、C++支持面向对象程序设计的四个要素是:封装性、继承和派生、 [17] 和 [18] 。 12、若Queue是一个类,aQueue是它的一个对象,而且该类中定义了一个静态成员函数show() 则在类外对该成员的函数进行调用的方式可以为 [19] 和 [20] 。 三、阅读程序,写出程序运行结果(第[3]、[10]空为3分,其余每空1分,共20分) 1、写出下列程序的运行结果 #include CSample(); void Display(); private: int i; static int k; }; Csmaple::CSample() {i=0; k++; } void CSample::Display() { cout<<”i=”< 程序的输出结果为 [1] [2] 。 2、#include void splitfloat(float x, int *p1, float *p2) { *p1=(int)x; *p2=x-*p1; } void main() { int n; float x ,f; cin>>x; splitfloat(x,&n,&f); cout<<”n=”< 输入3.1415 ,输出结果为________[3]________ 3、 #include int nextStudentID=0; class StudentID { public: StudentID(int id=0) { value=id; cout<<“Assigning student id:”< ~StudentID() { - -nextStudentID; cout<<“Destructing ID:”< int value; }; class student { public: student(char * pName=“no name”, int ssID=0):id(ssID) { cout<<“Constructing student:”< protected: StudentID id; }; void main() { student s(“Randy”,9818); student t(“Jenny”,9819); } 输出结果为____[4]___________ [5] [6] [7] [8] [9] 。 4、 #include class B { public: B( ) {}; B(int i, int j ); void printb(); private: int a,b; }; class A { public: A( ) {}; A(int i, int j); void printa(); private: B c; }; A::A(int i, int j ):c(i,j) {}; void A::printa( ) {c.printb( );} B::B(int i, int j ) {a=i; b=j; } void B::printb( )