2024年6月15日发(作者:)

一. 填空

1、

#include

Using namespace std;

int add(int a,int b);

int main()

{

int x,y,sum;

cout<<"Enter two numbers:"<<'n';

//在下画线处填上语句,完成用cin读入x和y

cin>>x;

cin>>y;

sum=add(x,y);

cout<<"The sum is:"<

return 0;

}

int add(int a,int b)

{

//在下画线处填上语句,完成计算a与b的和并返回之

return a+b;

}

2、

#include

Using namespace std;

int main()

{

char name[20];

cout<<”Hello,your name:”;

//在下画线处填上语句,完成将字符串输入到数组name中

cin>>name;

//在下画线处填上语句,完成将name数组用cout输出

cout<

return 0;

}

3

#include

Using namespace std;

int mul(int x,int y) //mul函数1

{ return x*y; }

int mul(int x,int y,int z) //mul函数2

{ return x*y*z; }

void main()

{

int a=3,b=4,c=5;

//在下画线处填上语句,用于调用mul函数1

cout<

//在下画线处填上语句,用于调用mul函数2

cout<

}

4

#include

Using namespace std;

main()

{

int *p; //声明一个整型指针变量p

//在下画线处,用new关键字动态分配一个int型存储区,并将首地址赋给p

p=new int;

*p = 10;

cout<<*p; //在下画线处填上语句,用于撤销指针p,释放p指向的存储空间

delete p;

return 0;

}

5

#include

main()

{

int *p;

//在画线处填上语句,用new关键字动态分配一个int型存储区,并将首地址赋给p

p=new int;

if (!p)

{

cout<<"allocation failuren";

return 1;

}

//在下画线处填上语句,将p所指向的存储区赋值20

*p=20;

cout<<*p;

//在下画线处填上语句,用于撤销指针p,释放p指向的存储空间

delete p;

return 0;

}

6下列程序的输出结果是 7 。

#include

using namespace std;

int main()

{

int i = 5;

int *p =& i;*p = 7;

cout << i << endl;

return 0;

}

(15也用了)7下面是用来计算n的阶乘的递归函数,请将该函数的定义补充完整。(注:

阶乘的定义是n!=n*(n-1)*...*2*1)

unsigned fact(unsigned n)

{

if ( n<= 1)

return 1;

return n*fact(n-1) ;

}

8与成员访问表达式p->name等价的表达式是 (*P).name 。

的全称为 Unified Modeling Language,统一建模语言 。

中有 结构事物,动作事物,分组事物,注释事物 四种类型事物。

中的四种关系为 依赖,关联,泛化,实现 。

12.类Sample的构造函数将形参data赋值给数据成员data。请将类定义补充完整。

class Sample{

public:

Sample(int data=0);

Private:

Int data;

};

Sample::Sample(int data){

【this->data=data;】

}

(13)若表达式(x+(y-z)*(m/n))+3中的变量均为double型,则表达式值的类型为【 double】 。

(14)有如下循环语句:

For(int i=50; i>20; i-=2) cout<

运行时循环体的执行次数是 【15】 。

(15)利用表达式a[i]可以访问int型数组a中下标为i的元素。在执行了语句int *p=a;后,

利用指针p也可访问该元素,相应的表达式是 【*(p+i)】 。

(16)下面是一个递归函数,其功能是使数组中的元素反序排列。请将函数补充完整。

void reverse(int *a, int size){

if(size<2) return;

int k=a[0];

a[0]=a[size-1];

a[size-1]=k;

reverse(a+1, size-1 );

}

(17)有如下类定义:

class Sample{

public:

Sample();

~Sample();

Private:

Static int date;

};

将静态数据成员data初始化为0的语句是 【int Sample::data = 0;】

(18)“图形”类Shape中定义了纯虚函数CalArea(),“三角形”类Triangle继承了类Shape,

请将Triangle类中的CalArea函数补充完整。

class Shape{

public:

virtual int CalArea()=0;

}

class Triangle: public Shape{

public:

Triangle{int s, int h}: side(s),height(h) {}

int CalArea(int side,int height) { return side*height/2 ; }

private:

int side;

int height;

};

(19)UML的定义包括UML语义和UML表示法。

(20)观看以下程序:

class point{

public:

void show() {cout<<”point”<

};

void main()

{

point p1;

point *p;

p=&p1;

(); ______________//通过对象p1访问show函数

p->show() ;//通过指针p访问show函数

}

21、 在C++类中可以包含___公有___________、___私有 ___________和_____保护

_________三种具有不同访问控制权的成员。

22、 定义类时,在类头中将使用关键字____class_________来表示类定义的开始。

如果一个类中至少有一个纯虚函数,则该类称为______抽象类 __________。

23、

24、

25、

C++类的组成包括数据成员和______成员函数________,友元_____不是 (是、不

友员函数是用关键字______friend ______修饰的非成员函数。

若有:

int i;

int &j=i;

i=10;

j=i+1;

则i=11,j=11。

new的功能是动态申请内存空间,delete的功能是释放由new申请的空间。

是)该类的成员函数。

26、

二.选择题

1 建立派生类对象时,3种构造函数分别是a(基类的构造函数)、b(成员对象的构造函数)、c

(派生类的构造函数),这3种构造函数的调用顺序为()

A abc B acb C cab D cba

答案:A

2下面描述中,符合结构化程序设计风格的是(A)

A)使用顺序、选择和重复(循环)三种基本控制结构表示程序的控制逻辑

B)模块只有一个入口,可以有多个出口

C)注重提高程序的执行效率

D)不使用goto语句

3下面概念中,不属于面向对象方法的是(D)

A)对象 B)继承 C)类 D)过程调用

4关于面向对象的程序设计方法,下列说法正确的是(D)

A)“封装性”指的是将不同类型的相关数据组合在一起,作为一个整体进行处理

B)“多态性”指的是对象的状态会根据运行时要求自动变化

C)基类的私有成员在派生类的对象中不可访问,也不占内存空间

D)在面向对象的程序设计中,结构化程序设计方法仍有着重要作用

5判断字符型变量ch是否为大写英文字母,应使用表达式(D)

A ) ch>='A' & ch<='Z' B ) ch<='A' ||ch>='Z'

C ) 'A'<=ch<='Z' D ) ch>='A' && ch<='Z'

6已知下列语句中的x和y都是int型变量,其中错误的语句(C)

A ) x=y++; B ) x=++y; C ) (x+y)++; D ) ++x=y;

7执行语句序列(D)

int n;

cin >> n;

switch(n)

{ case 1:

case 2: cout << '1';

case 3:

case 4: cout << '2'; break;

default: cout << '3';

}

时,若键盘输入1,则屏幕显示

A)1 B)2 C)3 D)12

8关于动态存储分配,下列说法正确的是(B)

A)new和delete是C++语言中专门用于动态内存分配和释放的函数

B)动态分配的内存空间也可以被初始化

C)当系统内存不够时,会自动回收不再使用的内存单元,因此程序中不必用delete释放内存

空间

D)当动态分配内存失败时,系统会立刻崩溃,因此一定要慎用new

9)对类的构造函数和析构函数描述正确的是(A)

A 构造函数可以重载,析构函数不能重载

B 构造函数不可以重载,析构函数可以重载

C 构造函数可以重载,析构函数也可以重载

D构造函数不能重载,析构函数也不能重载

(10)下列程序的输出结果是(A)

#include

using namespace std;

int main()

{

char a[] = "Hello, World";

char *ptr = a;

while (*ptr)

{

if (*ptr >= 'a' && *ptr <= 'z')

cout << char(*ptr + 'A' -'a');

else cout << *ptr;

ptr++;

}

return 0;

}

A ) HELLO, WORLD B ) Hello, World

C ) hELLO, wORLD D ) hello, world

11) 已知:int m=10;在下列定义引用的语句中,正确的是(A)

A ) int &x=m; B )int y=&m;

C )int &z; D ) int &t=&m;

(17)下列函数原型声明中错误的是(D)

A ) void Fun(int x=0, int y=0);

B ) void Fun(int x, int y);

C ) void Fun(int x, int y=0);

D ) void Fun(int x=0, int y);

(12)已知程序中已经定义了函数test,其原型是int test(int, int, int);,则下列重载形式中正确

的是(B)

A ) char test(int,int,int);

B ) double test(int,int,double);

C ) int test(int,int,int=0);

D ) float test(int,int,float=3.5F);

(13)已知函数f的原型是:void f(int *a, long &b); 变量v1、v2的定义是:int v1;long v2;,正

确的调用语句是(C)

A) f(v1, &v2); B) f(v1, v2);

C) f(&v1, v2); D) f(&v1, &v2);

(14)有以下类定义

class MyClass

{

public:

MyClass(){cout<<1;}

};

则执行语句MyClass a, b[2], *p[2];后,程序的输出结果是(B)

A)11 B)111 C)1111 D)11111

(15)关于动态存储分配,下列说法正确的是(B)

A)new和delete是C++语言中专门用于动态内存分配和释放的函数

B)动态分配的内存空间也可以被初始化

C)当系统内存不够时,会自动回收不再使用的内存单元,因此程序中不必用delete释放内存

空间

D)当动态分配内存失败时,系统会立刻崩溃,因此一定要慎用new

(16)关于友元,下列说法错误的是(A)

A)如果类A是类B的友元,那么类B也是类A的友元

B)如果函数fun()被说明为类A的友元,那么在fun()中可以访问类A的私有成员

C)友元关系不能被继承

D)如果类A是类B的友元,那么类A的所有成员函数都是类B的友元

(17)在公有派生的情况下,派生类中定义的成员函数只能访问原基类的(C)

A)公有成员和私有成员 B)私有成员和保护成员

C)公有成员和保护成员 D)私有成员、保护成员和公有成员

(18)在C++中用来实现运行时多态性的是(D)

A)重载函数 B)析构函数 C)构造函数 D)虚函数

(19)一个类可以同时继承多个类,称为多继承。下列关于多继承和虚基类的表述中,错误的

是(C)

A)每个派生类的构造函数都要为虚基类构造函数提供实参

B)多继承时有可能出现对基类成员访问的二义性问题

C)使用虚基类可以解决二义性问题并实现运行时的多态性

D)建立最派生类对象时,虚基类的构造函数会首先被调用

(20)在一个类体的下列声明中,正确的纯虚函数声明是(A)

A) virtual void vf()=0; B) void vf(int)=0;

C) virtual int vf(int); D) virtual void vf(int) { }

(21)在下面的运算符重载函数的原型中,错误的是(A)

A) Volume operator - (double, double);

B) double Volume::operator- (double);

C) Volume Volume: :operator - (Volume);

D) Volume operator - (Volume, Volume);

(22)下列关于继承方式的描述中,错误的是(D)

A)如果不显式地指定继承方式,缺省的继承方式是私有(private)

B)采用公有继承方式时,基类中的公有成员在派生类中仍然是公有成员

C)采用保护继承方式时,基类中的保护成员在派生类中仍然是保护成员

D)采用私有继承方式时,基类中的私有成员在派生类中仍然是私有成员

(23)已知函数FA调用FB,若要把这两个函数定义在同一个文件中,则: D

A)FA必须定义在FB之前

B)FB必须定义在FA之前

C)若FA定义在FB之后,则FA的原型必须出现在FB的定义之前

D)若FB定义在FA之后,则FB的原型必须出现在FA的定义之前

(24)有如下两个类定义

class AA{};

class BB{

AA v1,*v2;

BB v3;

int *v4;

};

其中有一个成员变量的定义是错误的,这个变量是:C

A)v1 B)v2 C)v3 D)v4

(25)有如下类定义 (13)B:

class XX{

int xdata;

public:

XX(int n=0) : xdata (n) { }

};

class YY : public XX{

int ydata;

public:

YY(int m=0, int n=0) : XX(m), ydata(n) { }

};

YY类的对象包含的数据成员的个数是

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

(26)下列有关运算符函数的描述中,错误的是:C

A)运算符函数的名称总是以operator为前缀

B)运算符函数的参数可以是对象

C)运算符函数只能定义为类的成员函数

D)在表达式中使用重载的运算符相当于调用运算符重载函数

(27)下列字符串可以用作C++标识符的是:D

A)2009var B)goto C)test - 2009 D)_123

(28)下列枚举类型的定义中,包含枚举值3的是:A

A)enum test {RED, YELLOW, BLUE, BLACK};

B)enum test {RED, YELLOW=4, BLUE, BLACK};

C)enum test {RED=-1, YELLOW,BLUE, BLACK};

D)enum test {RED, YELLOW=6, BLUE, BLACK};

(29)有如下程序段:C

int i=1;

while (1) {

i++;

if(i == 10) break;

if(i%2 == 0) cout << '*';

}

执行这个程序段输出字符*的个数是

A)10 B)3 C)4 D)5

(30)已知数组arr的定义如下:D

int arr[5] = {1,2,3,4,5};

下列语句中输出结果不是2的是

A)cout << *arr+1 <

C)cout << arr[1] <

(31)计算斐波那契数列第n项的函数定义如下:B

Int fib(int n){

if (n == 0) return 1;

else if (n == 1) return 2;

else return fib(n-1)+fib(n-2);

}

若执行函数调用表达式fib(2),函数fib被调用的次数是

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

(32)Sample是一个类,执行下面语句后,调用Sample类的构造函数的次数是: D

Sample a[2], *p = new Sample;

A)0 B)1 C)2 D)3

(33)下列关于虚基类的描述中,错误的是: C

A)使用虚基类可以消除由多继承产生的二义性

B)构造派生类对象时,虚基类的构造函数只被调用一次

C)声明“class B : virtual public A”说明类B为虚基类

D)建立派生类对象时,首先调用虚基类的构造函数

(34)下列关于运算符重载的描述中,错误的是: C

A)::运算符不能重载

B)类型转换运算符只能作为成员函数重载

C)将运算符作为非成员函数重载时必须定义为友元

D)重载[]运算符应完成“下标访问”操作

(35)有如下类定义 class A {

char *a;

public:

A():a(0){}

A(char *aa){ //把aa所指字符串拷贝到a所指向的存储空间

a= A ;

strcpy(a,aa);

strcpy(a,aa);

}

~A() {delete []a;}

};

横线处应填写的表达式是

A)new char[strlen(aa)+1] B)char[strlen(aa)+1]

C)char[strlen(aa)] D)new char[sizeof(aa)-1]

(36)将运算符重载为类成员函数时,其参数表中没有参数,说明该运算是: (B)

A)不合法的运算符 B)一元运算符 C)无操作数的运算符 D)二元运算符

(37)下列选项中不属于结构化程序设计原则的是:A

A)可封装 B)自顶向下 C)模块化 D)逐步求精

38、下列特性中不是面向对象程序设计语言所特有的是( D )。

(A)数据封装

(A)指针 (B)引用 (C)枚举 (D)结构

(D)protected

40、类成员的访问权限中,( C )只能被本类的成员函数和其友元函数访问。

(A)share (B)public (C)private

(A)构造函数名字和类名相同

(B)构造函数在创建对象时自动执行

(C)构造函数无任何函数返回类型

(D)构造函数有且只有一个

42、派生类可以访问其基类的( D )。

(A)公有成员 (B)保护成员

(C)私有派生 (D)公有和保护成员

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

(A)运算符重载不可以改变操作数的个数

(B)运算符重载不可以改变运算符的功能

(C)运算符重载不可以改变结合方向

(D)运算符重载不可以改变运算优先级

44、C++语言是从早期的C语言逐渐发展演变而来的.与C语言相比,它在求解问题方法上进

行的最大改进是( B )

(A)面向过程 (B)面向对象 (C)安全性 (D)复用性

45、对于类中定义的成员,其隐含访问权限为( C )。

41、关于构造函数,下列说法不正确的是( D )。

(B)继承(C)多态性 (D)模板

39、( B )是给变量取一个别名,它引入了变量的同意词。

A.public B.protected

C.private D.static

46、下面有关重载函数的说法中正确的是( C )

(A)重载函数必须具有不同的返回值类型; (B)重载函数形参个数必须不同;

(C)重载函数必须有不同的形参列表 (D)重载函数名可以不同;

47、有如下的对类“CSample”的说明,其中( A )是错误的。

class CSample {

A.int a=23;

B.CSample();

public:

C.CSample(int val);

D.~ CSample();

48、在int a=3,int *p=&a;中,*p的值是(D )

A.变量a的地址值 B.无意义

C.变量p的地址值 D.3

49、每个类( C )构造函数。

(A)只能有一个 (B)只可有公有的

(C)可以有多个 (D)只可有缺省的

50、在一个类中可以对一个操作符进行( D )重载。

(A)1 种 (B)2 种以下 (C)3 种以下 (D)多种

51、在公有继承的情况下,基类非私有成员在派生类中的访问权限( B )

(A) 受限制 (B)保持不变 (C)受保护 (D)不受保护

52、应在下列程序划线处填入的正确语句是( C )

#include

class Base

{public:

void fun(){cout<<"Base::fun"<

};

class Derived:public Base

{ void fun()

{_____________//显示调用基类的函数fun()

cout<<"Derived::fun"<

}

};

(A)fun(); (B)(); (C)Base::fun(); (D)Base->fun();

53、执行下面的程序将输出( A )

#include

class BASE{

char c;

public:

};

BASE(char n):c(n){}

virtual ~BASE(){cout<

};

class DERIVED:public BASE{

char c;

DERIVED(char n):BASE(n+1),c(n){}

~DERIVED(){cout<

public:

int main()

{DERIVED a('X');

return 0;

}

(A)XY (B)YX (C)X (D)Y

54、下面描述中,表达错误的是( B )

(A)公有继承时基类中的public成员在派生类中仍是public的

(B)公有继承是基类中的private成员在派生类中仍是private的

(C)公有继承时基类中的protected成员在派生类中仍是protected的

(D)私有继承时基类中的public成员在派生类中是private的

55、定义析构函数时,应该注意( C )

(A)其名与类名完全相同 (B)返回类型是 void 类型

(C)无形参,也不可重载 (D)函数体中必须有 delete 语句

56、对于在类中定义的静态数据成员,下面正确的说法是( C )

A.该类的每个对象中都有一个静态数据成员

B.对象创建时产生

C.在类外进行初始化

D.既可以在类外初始化,也可以在类内初始化

57、C++中声明常量的关键字是( A )。

A. const B. extern C. public D. enum