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.下列带缺省值参数的函数说明中,正确的说明是( )。