C++面向对象程序设计(试题与答案)

  • 格式:pdf
  • 大小:665.33 KB
  • 文档页数:38

模拟试题(1)

一、判断对错题(10%)(对√,错×)

( )1.自动变量用堆方式创建,它与块共存亡。

( )2.运算符+=是右结合的。

( )3.表达式cout<<99的类型为int。 ( )4.++i是左值,但i++不是左值。

( )5.Y[I][J]与*(*Y+I)+J不等价。

( )6.从外部看类的private 成员和protected成员有区别。

( )7.运算符&不可以重载。

( )8.基类的protected成员经过protected派生,在派生类中它变成了private成员。 ( )9.2.0/-3.0是一个正确的表达式。

( )10.字符'\12'的ASCII为12。

二、填空题(20%)

#include

typedef struct node {

long data;

node * next;

};

class stack {

private:

node * head;

①__________

stack(); ~stack();

void push (②__________);

③__________ pop();

④__________ print();

}; stack::stack()

{ head = new ⑤__________

head->next = ⑥__________ }

stack::~stack()

{ node * p;

p = head;

while (p)

{

head = head->next; ⑦__________

p = head;

}

}

void stack::push(long x) {

node * p = new node;

p->data = x;

p->next = head->next; ⑧__________ = p;

cout<<"Push" <

long stack::pop()

{

node *p = head->next;

if(p!=NULL) {

long x = p->data;

head->next = p->next;

⑨__________

cout<<"pop "<

}

else

cout<<"Stack is empty !"<

return 0; }

void stack::print()

{ node * p = head->next;

cout<<"Stack_Top"<

{

cout

⑩__________;

} cout<<"Stack_bottom"<

}

三、简答题(20%)(按条列出论点) 1.注解。

2.new运算。 3.宏定义。

4.private成员。

5.构造函数。

四、程序设计题(50%) 1.写一基于文件流的程序,删除C++源程序中的单行注解。要求:C++源程序文件名和删除单行注解后的文件名均在命令行中给出。

2.已知A[N]是整数数组,试以递归函数实现求N个整数之和。

3.请为Fraction类(分数类)定义下列重载运算符函数(注意函数原型) ⑪复合赋值运算+=。

⑫等于运算=。

⑬插入运算<<。

class Fraction

{ private:

int fz; //分子

int fm; //分母

public:

… };

模拟题一参考答案

一、判断对错题(10%)

本题共10分,每题1分。

① × ② √ ③ × ④ √ ⑤ √

⑥ √ ⑦ × ⑧ √ ⑨ √ ⑩ ×

二、填空题(20%)

本题共20分,每空2分。答案只少“;”或“:”等符号的给1分。

①public: ②long ③long ④void ⑤node;

⑥NULL; ⑦delete p; ⑧

head->next ⑨delete p; ⑩p=p->next

三、简要论述题(20%)

本题共20分,每题4分。概念解释正确给2分;论述要求有两条论点,每条给1分

(非参考答案中的论点只要正确同样给分)。 ⑪注解

。写程序者为读程序者作的说明。

。C++编译器把所有的注解视为空白。

。注解有多行注解(/* */)和单行注解(//)。

。注解通常用来说明程序或模块的名称、用途、编写时间、编写人、变量说明和算法说明等。 ⑫new运算

。new是个单目运算,功能是给程序实体动态地分配空间。

。语法格式 X类型指针= new X类型。

。用new 申请空间的同时还可以进行初始化。

。用new 申请的空间可用delete运算收回。 ⑬宏定义

。宏定义就是用一个宏名字来命名一个字符串。

。编译预处理时宏名将被用宏体简单替换。

。使用宏定义可以提高程序的可读性、可修改性与可移植性。

。宏定义可以带参数。 ⑭private成员

。private成员为类成员的一种类型。

。private成员只能由类作用域中的函数访问。

。基类的private成员在派生类中也是不可见的。

。private成员只能通过public成员访问。 ⑮构造函数

。构造函数是类的一种特殊成员。

。构造函数用来创建类的对象(实例)。

。构造函数具有特定的名字-与类名相同。

。构造函数可以重载。 四、程序设计题(50%)

本题共50分。(第1、2题各10分;第3题有3小题,每小题10,分共计30分。)

每题评分细则:

①函数原型正确3分(函数返回值类型1分,函数参数类型和个数2分)。

②函数总体结构正确4分(函数的总体结构指主要的循环结构和选择结构)。 ③其他3分(实现的细节)。

1. #include

#include

void main(int argc,char * argv[]) { if (argc!=3) exit(1);

char c0,c1=' '; int k=1;

ifstream in(argv[1],ios::in|ios::binary);

ofstream out(argv[2],ios::out|ios::binary);

while (!in.eof())

{ in.read(&c0,1);

if( k&&c0=='/' && c1=='/') k=0;

if( !k&&c0=='\x0d' ) k=1;

if( k&&c1=='/' && c0!='/') out.write(&c1,1);

if( k&&c0!='/') out.write(&c0,1); c1=c0;

}

in.close();

out.close();

} 2. int tga(int *a,int n)

{

if(n<1) return (0);

else return(a[n-1]+tga(a,n-1)); }

3. ①

fraction& fraction::operator +=(fraction & f)

{ fz = fz*f.fm+fm*f.fz;

fm = fm*f.fm;

return *this;

}

②int operator ==(fraction & f1,fraction & f2) {

if (f1.fz==f2.fz && f1.fm==f2.fm)

return 1;

else

return 0; }

③ostream & operator<<(ostream & os,fraction & f)

{

os<

return os; } 模拟试题(2)

一、判断对错题(10分)(对√,错×)

( )1.在类定义中不允许对所定义的数据成员进行初始化。 ( )2.程序中不能直接调用构造函数,在创建对象时系统自动调用构造函数。

( )3.从外部看类的private 成员和protected成员没有区别。

( )4.可以将派生类对象赋给基类对象,也可以将基类对象赋给派生类对象。

( )5.构造函数和析构函数都不能为虚函数。

( )6.C++按列优先存放数组元素。 ( )7.1/2的值等于0.5。 ( )8.基类的protected成员经过protected派生后,在派生类中仍为protected成员。

( )9.所有运算符都可以重载。 ( )10.表达式cout<<99的类型为int。

二、单项选择题(20分)

1.下列有关类的说法不正确的是( )。

A. 类是一种用户自定义的数据类型 B. 只有类中的成员函数才能存取类中的私有数据

C.在类中,如果不作特别说明,所有的数据均为私有类型

D. 在类中,如果不作特别说明,所有的成员函数均为公有类型 2.在C++程序中,对象之间的相互通信通过( )。

A.继承实现 B.调用成员函数实现 C.封装实现 D.函数重载实现 3.对于任意一个类,析构函数的个数有( )。

A.0 B.1 C.不确定 D.2 4.在下列各函数中, 不是类的成员函数的是( )。

A. 构造函数 B. 析构函数 C. 友元函数 D. 拷贝构造函数 5.在多基继承的构造函数定义中,几个基类的构造函数之间用( )分隔。

A. : B. ; C. , D. :: 6.若类A和类B的定义如下:

class A {

int i,j;

public:

void get();

//... };

class B: A

{

int k;

public: void make(int );

//...

};

void B::make(int j)

{ k = i*j;

}

则上述定义中,非法的表达式是( )。

A.void get(); B.int k; C.void make(int ) D.k=i*j; 7.已知:print函数是一个类的常成员函数,它无返回值,下列表示中正确的是( )。 A.const void print() B.void const print()

C.void print(const) D.void print()const 8.在类外部可以用p.a的形式访问派生类对象p的基类成员a,则a应是( )。

A.私有继承的公有成员 B.公有继承的私有成员

C.公有继承的保护成员 D.公有继承的公有成员 9.下列关于运算符重载的描述中,正确的叙述是( )。

A. 运算符重载可以改变运算数的个数

B. 运算符重载可以改变语法结构

C. 运算符重载可以构造新的运算符

D. 运算符重载不可以改变优先级和结合性 10.下列带缺省值参数的函数说明中,正确的说明是( )。