文档库 最新最全的文档下载
当前位置:文档库 › 综合练习

综合练习

综合练习
综合练习

综合练习题

一、填空题

1.表达式:25%3=_________,32/7=_________。

2.C++语言中,运算对象必须是整型的算术运算符是_________。

3.若已知a=10,b=20,则表达式a

4.从原有类派生出来的类,称为______;同时,称原有类为_______。

5.派生类可以访问基类中的________成员和________成员,不能访问基类中的_________成员。

6.表达式(a==b) && (a>b)的值是_______。

7.在for循环语句中

for(表达式1;表达式2;表达式3)

语句;

首先求解______,然后求解______,如果条件成立执行_________,最后求解_________。

8.在C++语言中,逻辑假用________表示。

9.类的成员包括______和_________两种,在面向对象的术语中,前者称为属性、后者称为方法。其访问权限有三种,由符号________、________和_______指定,其中具有_________权限的成员只有类中的成员函数才能访问、而具有_________权限的成员在任何函数中都可访问。

10.构造函数是一个特殊的成员函数,其特殊性表现在创建对象时会__________。构造函数名必须与________相同。

11.函数重载是指一组函数具有相同的__________,在函数调用时,编译程序根据________个数和类型确定使用那一个版本。

12.使用重载函数可以实现________多态,使用虚函数可以实现________多态。

13.使用内联函数的目的是要提高程序的效率,但可能会增加编译后程序的_______。

14.当一个变量被声明为另一个变量的引用时,此变量就成为被引用变量的_______。此时,对其中一个变量值的修改,________(会/不会)影响到另一个变量的值。

15.析构函数是一个特殊的成员函数,其特殊性在于__________。定义时,析构函数名与________相同,只是在前面加一个______。

16.派生有_______、________和_________等三种方式,不管哪一种,基类中的________成员对于派生类而言,总是不可访问的。

17.动态多态是指在________时才确定使用哪个_________函数的方式。

18.友员不是类的成员,但必须在__________予以声明,它具有存取类的_________成员的特权。

19.C++中class与struct的主要区别是在缺省访问权限时,_________的成员为私有的,而_________的成员为公有的。

20.函数的递归调用是指函数直接或间接地调用__________。

21.在类中必须声明成员函数的________,成员函数的_________部分可以写在类外。

22.如果需要在被调函数运行期间,改变主调函数中实参变量的值,则函数的形参应该是__________类型或__________类型。

23.__________类只能作为基类使用,而不能声明它的对象。

24.进行函数重载时,被重载的同名函数如果都没有用const修饰,则它们的形参_________或__________必须不完全相同。

25._________对象只能调用它的常成员函数,不能调用其他成员函数。

26.面向对象程序设计中的多态性包括静态多态性和动态多态性,前者由___________机制支持,而后者则由____________机制支持。

27.引入虚基类的目的是为了解决多重继承中的____________和____________问题。

28.说明一个const成员函数(又称常量成员函数)的方法是,将const写在__________.

29.当使用new动态生成一个对象时,隐含着对____________的一次调用;而当使用delete删除一个对象时,隐含着对____________的一次调用。

30.对某个运算符的重载,实际上是用关键字____________与该运算符组成一个运算符函数。

31.下面程序将字符数组a复制到字符数组b中。

main()

{

char a[]="I am a boy.",b[20];

int i;

for(i=_______;a[i]!='\0';i++)

{

_____________;

}

______________;

}

32.下面程序段将字符数组b连接到数组a的后面。

main()

{

char a[20]=."I am ";

char b[]=."a student.";

int i,j;

i=strlen(a);

for(j=_____;b[j]!='\0';j++)

{

a[_____]=b[______];

}

a[______]=_______;

}

33.下面程序的功能是计算1-3+5-7+…-99+101的值存在s中,请填空。

#include

main()

{

int i,t=1,s=0;

for(i=1;i<=101;_______)

{

s=s+i*t;

t=_______;

}

}

34.对基类数据成员的初始化必须在派生类构造函数中的_______完成。

二、对错题。判断以下说法的正确性,正确的划√,错误的划×

1.说明函数原型时不需要指明每个参数的类型,只需要说明每个参数的名字就可以了。

2.在不同的类中可以定义相同名字的变量。

3.在类中被说明为public的成员只能被其派生类的成员函数访问,不能被其它的函数访问。

4.如果函数的第一个参数有缺省值,则第二个参数也必须有缺省值。

5.当函数的参数是数组名时,传递的是数组第一个元素的地址。

6.若将一个函数f声明为一个类A的友元函数,则函数f可以直接访问类A的所有成员。

7.函数重载可以实现动态多态,虚函数可以实现静态多态。

8.类的静态数据成员是该类所有对象共享的。

9.若有定义:double x[3][5];则x数组行下标的上限是3,下限是 1。

10.字符串”C++”在内存中存放时,占用3个字节的空间。

11.如果在一个程序块中有两个变量具有相同的名字,并且都有效,只是它们的作用域不同,则优先访问作用域较大的那个变量。

12.所有的表达式都有值。

13.用new动态申请的内存空间,必须用delete来释放。

14.类的静态数据成员需要在定义每个类的对象时进行初始化。

15.基类中被说明为protected和private的成员只能被其派生类的成员函数访问,不能被其它的函数访问。

16.当将一个类S定义为另一个类A的友元类时,类S的所有成员函数都可以直接访问类A的所有成员。

17.如果派生类的成员函数的原型与基类中被定义为虚函数的成员函数原型相同,那么,这个函数自动继承基类中虚函数的特性。

18.在C++中,关键字class与struct具有完却相同的作用。

三、单项选择题

1.C++语言中,最基本的数据类型包括:

A) 整型、实型、逻辑型 B) 整型、字符型、数组

C) 整型、实型、字符型 D) 整型、实型、结构体

2.下面不正确的字符串常量是:

A) …abc? B) “1+2=10” C) “1=2” D) “”

3.下面正确的字符常量是:

A) “c” B) …\\?? C) …W? D) …?

4.C++中,运算对象必须是整型的运算符是:

A) % B) / C) * D) +

5.程序段

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

if(i>5) break;

循环结束后i的值为:

A) 6 B) 7 C) 9 D) 10

6.程序段

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

if(i <=5) break;

循环结束后i的值为:

A) 0 B) 1 C) 5 D) 10

7.判断字符串a和b是否相等,应当使用:

A) if(a==b) B) if(a=b)

C) if(strcpy(a,b)) D) if(strcmp(a,b)==0)

8.程序段

int a,b;

a=5;

b=a++;

cout << b;

的输出应为:

A) 4 B) 5 C) 6 D) 7

9.程序段

int i,a;

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

a=i;

cout << i;

的输出应为:

A) 0 B) 9 C) 10 D) 11

10.C++语言中的标示符只能有字母、数字和下划线组成,且第一个字符_____。

A) 必须为字母 B) 必须为下划线

C) 必须为字母或下划线 D) 可以是字母或数字

11.若a是int类型变量,则表达式a=25/3%3的值是:

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

12.下面程序段的运行结果是:“_”表示空格。

char c[5]={…a?,…b?,…\0?,…c?,…\0?};

cout << c;

A) …a?…b? B) ab C) ab_c D) 不确定

13.若有说明:char c=…\72?;则变量c:

A) 包含一个字符B) 包含2个字符

C) 包含3个字符D) 说明不合法,c的值不确定

14.以下叙述中,正确的是:

A) continue和break语句只能用于循环体内

B) continue和break语句只能用于分支语句中

C) continue语句只能用于循环体内

D) continue语句只能用于分支语句中

15.设有数组定义:char array[]=”China”;则数组array所占的空间为:

A) 4个字节 B) 5个字节 C) 6个字节 D) 7个字节

16.以下叙述中不正确的是:

A) 在不同的函数中可以使用相同名字的变量

B) 函数中的形参是局部变量

C) 在一个函数内部定义的变量只在本函数范围内有效

D) 在一个函数内部定义的变量在所有函数内部有效

17.以下对C++语言函数的叙述中,正确的是:

A) 在C++中调用函数时,只能把实参的值送给形参,形参的值不能送给实参

B) C++函数既能嵌套定义,又能递归定义

C) C++函数必须有返回值,否则不能使用

D) C++程序中有调用关系的所有函数必须放在同一个源程序中

18.程序段

int *p,a;

p=&a;

a=10;

cout << p;

的输出应为:

A) 10 B) 0 C) 不能确定 D) 语法错误

19.int *p1,*p2,a[10];

p1=a;

p2=&a[5];

则p2-p1的值为:

A) 无法确定 B) 10 C) 5 D) 12

20.若已经定义:int a[]={0,1,2,3,4,5,6,7,8,9},*p=a,i;

若0≤i≤9,则对a数组元素不正确的引用是:

A) a[p-a] B) *(&a[i]) C) p[i] D) a[10]

21.若a是int类型变量,则计算表达式a=1000%999的值是:

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

22.下面程序段中,for循环的执行次数是_____。

int i=10;

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

cout << “*”;

A)9 B)10 C)8 D)7

23.在C++中,允许函数值类型缺省定义,此时该函数隐含的类型是:

A) int B) float C) double D) long

24.变量的指针,其含义是指该变量的_____

A) 值 B) 地址 C) 名 D) 一个标志

25.若已经定义:int a[10],则对a数组元素的正确引用是:

A) a[10] B) a[-3] C) a[6-6] D) a(1)

26.下面程序段的输出为:

char str[]=”China”;

cout << strlen(str);

A) 4 B) 5 C) 6 D) 7

27.以下不能定义为用户标识符的是______。

A)Main B)_0 C)_int D)sizeof

28.数字字符0的ASCII值为48,若有以下程序

void main()

{

char a='1', b='2';

cout << b++ << ”,”;

cout << b-a << endl;

}

程序运行后的输出结果是:

A) 3,2 B)50,2 C)2,2 D)2,50

29.有以下程序

void main()

{

int a,b,d=25;

a=d/10%9;

b=a&&(-1);

cout << a << “,” << b;

}

程序运行后的输出结果是。

A)6,1 B)2,1 C)6,0 D)2,0

30.若整型变量a、b、c、d中的值依次为:1、4、3、2。则条件表达式(a

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

31.有以下程序

void main()

{

int p[8]={11,12,13,14,15,16,17,18}, i=0, j=0;

while(i<7)

{

if(p[i]%2)

j+=p[i];

i++;

}

cout << j << endl;

}

程序运行后的输出结果是。

A)42 B)45 C)56 D)60

32.有以下程序

void main()

{

char a[7]="a0\0a0\0";

int i,j;

i=sizeof(a);

j=strlen(a);

cout << i << “,” << j;

}

程序运行后的输出结果是。

A)2,2 B)7,6 C)7,2 D)6,2

33.以下能正确定义一维数组的选项是。

A)int a[5]={0,1,2,3,4,5}; B)char a[]={0,1,2,3,4,5}; C)char a={'A','B','C'}; D)int a[5]="0123";

34.已有定义:char a[]="xyz",b[]={'x','y','z'};,以下叙述中正确的是。A)数组a和数组b所占内存相同B)a数组占内存比b数组少C)a数组占内存比b数组多D)上述说法都不对35.有以下程序

void main()

{

int a[3][3],*p,i;

p=&a[0][0];

for(i=0;i<9;i++)

p[i]=i;

for(i=0;i<3;i++)

cout << a[1][i];

}

程序运行后的输出结果是。

A)012 B)123 C)234 D)345

36.以下叙述中错误的是。

A)对于double类型数组,不可以直接用数组名对数组进行整体输入或输出B)数组名代表的是数组所占存储区的首地址,其值不可改变

C)程序执行中,数组元素的下标越界时,系统给出“下标越界”的出错信息D)可以通过赋初值的方式确定数组元素的个数

37.有以下程序

void main()

{

int a[]={1,2,3,4,5,6,7,8,9,0},*p;

for(p=a;p

cout << *p << “,”;

}

程序运行后的输出结果是。

A)1,2,3,4,5,6,7,8,9,0, B)2,3,4,5,6,7,8,9,10,1,

C)0,1,2,3,4,5,6,7,8,9, D)1,1,1,1,1,1,1,1,1,1,

38.有以下程序

void main()

{

int c=35;

int b=c&c;

cout << b;

}

程序运行后的输出结果是。

A)0 B)70 C)35 D)1

39.有以下程序

void main()

{

char s[]="159",*p;

p=s;

p++;

cout << *p;

p++;

cout << *p;

}

程序运行后的输出结果是。

A)15 B)16 C)12 D)59 40.有以下函数

fun(char *a,char *b)

{

while((*a!='\0')&&(*b!='\0')&&(*a==*b))

{

a++;

b++;

}

return(*a-*b);

}

该函数的功能是。

A)计算a和b所指字符串的长度之差

B)将b所指字符串复制到a所指向的地址C)将b所指字符串连接到a所指字符串后面D)比较a和b所指字符串的大小

41.有以下程序

void point(char *p) {p+=3;}

void main()

{

char b[4]={'a','b','c','d'},*p=b;

point(p);

cout << *p;

}

程序运行后的输出结果是。

A)a B)b C)c D)d 42.有以下程序

void main( )

{

char a[]="abcdefg",b[10]="abcdefg";

cout << sizeof(a) << “,” << sizeof(b);

}

执行后输出结果是()

A)7,7 B)8,8 C)8,10 D)10,10 43.C++程序的基本单位是

A) 程序行 B) 类 C) 函数 D) 对象44.请从以下表达式中选出当a为奇数时值是1的表达式。

A) a%2==0 B) a%2 C) a%2-1!=0 D) a/2*2-1==0 45.执行下列程序段后,正确的结果是

int i=5;

while(i=1)

i--;

cout << i;

A) 5 B) 0 C) 1 D) 无限循环

46.执行下列程序段后,正确的结果是

int i=0, s=1;

while(i<3)

{

s+=i;

i++;

}

cout << s;

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

47.执行下列程序段后,正确的结果是

char a[7]=”abcdef”;

char b[4]=”ABC”;

strcpy(a,b);

cout << a[5];

A) e B) f C) 0 D) 无输出

48.执行下列程序段后,正确的结果是

int k, a[3][3] = {1,2,3,4,5,6,7,8,9};

for(k=0; k<3; k++)

cout << a[k][k] << ““;

A) 1 2 3 B) 1 5 9 C) 1 4 7 D) 3 6 9

49.若有说明:int n=2, *p=&n, *q=p;,则以下非法的赋值语句是:

A)p=q; B) *p=*q C) n=*q D) p=n

50.执行下列程序段后,正确的结果是

char x[8] = {8,7,6,5,0,0}, *s;

s = x+1;

cout << (int)s[2];

A) n B) 0 C) 5 D) 6

51.执行下列程序段后,正确的结果是

char str[2][10] = {“China”, “Beijing”}, *p=str[0];

cout << p+10;

A) China B) Beijing C) B D) C

52.面向对象程序设计中的数据隐藏指的是

A) 输入数据必须输入保密口令

B) 数据经过加密处理

C) 对象内部数据结构上建有防火墙

D) 对象内部数据结构的不可访问性

53.函数重载必须满足的条件的是

A) 必须有不同的参数个数

B) 对应的参数类型必须不完全相同

C) A和B必须同时满足

D) A和B只要满足一个即可

54.下列带缺省值参数的函数说明中,正确的说明是

A) int Fun(int x,int y=2,int z=3);

B) int Fun(int x=1,int y,int z=3);

C) int Fun(int x,int y=2,int z);

D) int Fun(int x=1,int y,int z);

55.有如下的对类“CSample”的说明,其中错误的是。

class CSample {

A) int a=23;

B) CSample();

public:

C) CSample(int val);

D) ~ CSample();

}

56.已知类A中的一个成员函数的说明如下:void Set(A &a); 则该函数的参数“A &a”的

含义是:

A) 指向A的指针a

B) 将变量a的地址赋给类A

C) 类A对象的引用a用作函数的形参

D) 变量A与a按位与后作函数参数

57.若类A和类B的定义如下:

class A

{

private:

int i,j;

public:

void get();

};

class B:public A

{

protected:

int k;

public:

void make();

};

void B::make() { k=i*j; }

在上面的程序中,非法的表达式是。

A) void get();

B) int k;

C) void make();

D) k=i*j;

58.下面的主程序中,语句错误的是。

class A

{

int i;

public:

virtual void fun()=0;

A(int a) { i=a; }

};

class B:public A

{

int j;

public:

void fun() { cout<<”B::fun()\n”; }

B(int b,int c) :A(b) { j=c; }

};

void main()

{

A) A a(5);

B) A *pa;

C) B b(7,8);

D) B *pb;

}

59.拷贝构造函数的作用是

A) 进行数据类型的转换

B) 用对象调用成员函数

C) 用对象初始化对象

D) 用一般类型的数据初始化对象

60.下列说法中,正确的说法是

A) 所有的运算符都能被重载

B) 运算符被重载时,它们的优先级与结合性不会改变

C) 当需要时,我们可以自定义一个运算符来进行重载

D) 每个运算符都可以被重载成成员函数和友元函数

61.下面对结构或类中成员的访问中,不正确的访问是

A) pointer.salary; (其中pointer为指向类对象的指针)

B) pointer->salary;

C) x=worker.salary; (其中worker为具有类类型的对象)

D) Location &rA=A; (Location为已定义的类,A为Location类对象)

62.下列关于类与对象的叙述中,错误的是

A) 一个类只能有一个对象 B) 对象是类的具体实例

C) 类是对某一类对象的抽象 D) 类和对象的关系是一种数据类型与变量的关系63.有如下声明:

class A

{

int i;

}

则i是

A) 公有数据成员 B) 私有数据成 C) 保护数据成 D) 不能确定

64.下列函数原型中,可以作为类A构造函数的是

A) void A(int); B) int A(); C) A(int) const; D) A(int);

65.已知在类A中有如下函数原型:A operator+(A a) const; 下列关于这个函数的叙述中,错误的是

A) 这是运算符+的重载运算符函数

B) 这个函数重载的运算符是一元运算符

C) 这是类A的成员函数

D) 这个函数不能改变类的数据成员的值

66.有如下函数模板定义:

template

T func(T x, T y)

{

return x*x + y*y;

}

在下列对func()的调用中,错误的是

A) func(3,5); B) func(3.0,5.5)

C) func(3,5.5) D) func((double)3,5.5)

67.有如下程序:

#include

class Test

{

public:

Test()

{

n+=2;

}

~Test()

{

n-=3;

}

static int GetNum()

{

return n;

}

private:

static int n;

};

int Test::n=1;

void main()

{

Test *p= new Test;

delete p;

cout << Test::GetNum() << ",";

p= new Test;

delete p;

cout << Test::GetNum();

}

程序的运行结果为

A) 1,1 B) 0,0 C) 0,-1 D) 0,1

68.有如下类声明:

class A

{

int x;

public:

A(int n)

{

x=n;

}

};

class B:public A

{

int y;

public:

B(int a,int b);

};

下列函数中哪一个是正确的构造函数

A) B::B(int a, int b):x(a),y(b){} B) B::B(int a, int b):A(a),y(b){}

C) B::B(int a, int b):x(a),B(b){} D) B::B(int a, int b):A(a),B(b){}

69.在表达式x+y*z中,+是作为成员函数重载的运算符,*是作为友元函数重载的运算符。下列叙述正确的是

A) operator+有两个参数,operator*有两个参数

B) operator+有两个参数,operator*有一个参数

C) operator+有一个参数,operator*有两个参数

D) operator+有一个参数,operator*有一个参数

70.类的析构函数的作用是

A) 对象的初始化 B) 删除对象时的清理任务

C) 与一般成员函数一样 D) 类的初始化

71.下面关于友元函数描述正确的是

A) 友元函数的实现必须在类的内部定义

B) 友元函数是类的成员函数

C) 友元函数不是类的成员函数,但可以访问类的私有成员

D) 友元函数不能访问类的私有成员

72.要实现动态多态,必须通过________调用函数。

A) 对象指针 B) 对象名 C) 基类名 D) 派生类名

73.要实现静态多态,应使用

A) 虚函数 B) 内联函数 C) 重载函数 D) 友元函数

74.下面正确的说法是

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

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

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

D) 构造函数不可以重载,析构函数也不可以重载

四、写出程序运行结果

1.写出下面程序运行结果。

#include

void main()

{

char a[] = "123456789", *p;

int i = 0;

p=a;

while(*p)

{

if(i%2==0)

*p='*';

p++;

i++;

}

cout << a;

}

2.函数sub的功能是什么?写出运行结果。#include

long sub(int num)

{

int i;

long subsum=1;

for(i=1;i<=num;i++)

subsum *= i;

return( subsum );

}

void main()

{

int i; long sum=0;

for(i=1;i<=5;i++)

{

sum += sub(i);

cout << i << "," << sum << endl;

}

}

3.写出程序运行结果

#include

class A

{

private:

int i;

static int j;

public:

A(int x)

{

i = x;

j += x;

}

static void func(A a);

};

void A::func(A a)

{

cout << "i=" << a.i << ", j=" << j << endl; }

int A::j = 0;

void main()

{

A a1(10), a2(20);

A::func(a1);

A::func(a2);

}

4.写出程序运行结果

#include

class POINT

{

protected:

int x, y;

public:

int getx()

{

return x;

}

int gety()

{

return y;

}

virtual void show()

{

cout<<"Show a point\n";

}

POINT(int x, int y)

{

POINT::x=x;

POINT::y=y;

cout << "Construct point (" << x << "," << y << ")\n";

}

};

class CIRCLE : public POINT

{

private:

int r;

public:

int getr()

{

return r;

}

void show()

{

cout<<"Show a circle\n";

}

CIRCLE(int x, int y, int r) : POINT(x, y)

{

CIRCLE::r = r;

cout << "Construct circle (" << x << "," << y << ")\n";

}

};

void main(void)

{

CIRCLE c(3, 7, 8);

POINT p1(4,6);

POINT *p=&c;

相关文档