自考c++模拟试题.doc_第1页
自考c++模拟试题.doc_第2页
自考c++模拟试题.doc_第3页
自考c++模拟试题.doc_第4页
自考c++模拟试题.doc_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

模拟试题一一、单项选择题(本大题共10小题,每小题2分,共20分) 1.面向对象程序设计中的数据隐藏指的是()A.输入数据必须输入保密口令 B.数据经过加密处理C.对象内部数据和代码合并在一起 D.对象内部数据结构的不可访问性2在C+中,编写一个内联函数Fun,使用int类型的参数,求其平方并返回,返回值也为int类型,下列定义正确的是 ()A.int Fun(int x)return x*x; B.inline int Fun(int x)return x*x;C.int inline Fun(int x)return x*x; D.int Fun(int x)inline return x*x;3下面关于重载函数的叙述中正确的是 ()A.重载函数必须具有不同的返回值类型 B.重载函数的形参个数必须不同C.重载函数必须有不同的形参列表 D.重载函数的函数名可以不同4若有定义“int x=17;”,则语句“coutoctx;”的输出结果是()A.11 B.0x11 C.21 D.0215下列关于析构函数的描述中正确的是()A.析构函数可以重载 B.析构函数可以是虚函数C.析构函数名与类名相同 D.析构函数的返回类型为void6下列关于纯虚函数的描述中,正确的是 ()A.纯虚函数是一种特殊的虚函数,它是个空函数B.具有纯虚函数的类称为虚基类C.一个基类中说明有纯虚函数,其派生类一定要实现该纯虚函数D.具有纯虚函数的类不能创建类对象7下列关于运算符重载的描述中,正确的是 ()A.可以改变运算符的目数 B.可以改变运算符的优先级C.可以改变运算符的结合性 D.可以改变运算符的功能8要将类说明是类的虚基类,正确的描述是 ()A.class virtual B:public A B.class B:virtual public A C.virtual class B:public A D.class B:public A virtual9下面关于静态成员的描述中,正确的是 ()A.静态数据成员是类的所有对象共享的数据B.类的每个对象都有自己的静态数据成员C.类的不同对象有不同的静态数据成员值 D.静态数据成员不能通过类的对象访问10假设Sample是个类,则语句“Sample a2,*p3;”调用构造函数的次数为()A.0 B.2 C.3 D.5二、填空题(本大题共10小题,每小题2分,共20分) 11在面向对象的程序设计中,将一组对象的共同特性抽象出来形成_。12在C+中要创建一个文件输入流对象fin,同时该对象打开文件“Test.txt”用于输入,则正确的声明语句是_。13如果要把类B的成员函数void fun( )说明为类A的友元函数,则应在类中加入语句_。14A是一个类,已有语句“A* p;p=new A10;”。要释放由p指向的动态空间,正确的语句应该是_。15如果一个引用不是用作函数参数或返回值,则在说明该引用时必须对它进行_。16如果要把PI声明为值为3.14159类型为双精度实数的符号常量,该声明语句是_。17在C+中函数原型不但要标识一个函数的返回类型,同时还要标识该函数的_。18类A的后置自增运算符+以成员函数的形式进行重载,其在类内的函数声明是_。19动态联编是通过基类类型的指针或引用调用_函数来完成。20基类的保护成员通过私有派生其在派生类中的访问权限是_。三、改错题(本大题共5小题,每小题2分,共10分)21下面的类定义中有一处错误,请用下横线标出错误所在行并给出修改意见。class Sample private: int data; Sample( )data=10; public: Sample(int d)data=d; int operator int( )return data; ; 22.下面的类定义中有一处错误,请用下横线标出错误所在行并给出修改意见。#include class Point int X,Y; public: Point( )X=0;Y=0; Point(int x=0,int y=0)X=x;Y=y; void display( )coutx,Yendl; ;23下面的程序有一处错误,请用下横线标出错误所在行并说明错误原因。#include template void Swap(T& a,T& b) T t; t=a,a=b,b=t; void main( ) int a=3,b=4; char str15=”abcd”,str25=”hijk”; Swap(a,b); Swap(str1,str2); cout”a=”a”,b=”bendl; cout”str1=”str1”,str2=”str2endl; 24下面的程序有一处错误,请用下横线标出错误所在行并说明错误原因。#include class Base public: virtual void fun( )coutBase functionendl; ; class Derived:public Base public: void fun( )coutDerived functionfun( ); 25下面的程序有一处错误,请用下横线标出错误所在行并说明错误原因。#include class A int x; protected: int y; public: A(int xx,int yy)x=xx; y=yy; ; class B:public A public: B(int a,int b):A(a,b) void display( )coutx,yendl; ; void main( ) B b(5,10); b.display( ); 四、完成程序题(本大题共5小题,每小题4分,共20分)26请在下面程序的横线处填上适当内容,以使程序完整,并使程序的输出为:2,14,3#includeclass Aint a;public:A(int i=0)a=i;int Geta( )return a;class BA a;int b;public:B(int i=0,int j=0): void display( )couta.Geta(),bendl;void main( )B b2=B(1,2),B(3,4);for(int i=0;i2;i+) ;27.下面程序中A是抽象类。请在下面程序的横线处填上适当内容,以使程序完整,并使程序的输出为:B1 calledB2 called#includeclass Apublic: ;class B1:public Apublic:void display( )cout”B1 called”endl;class B2:public Apublic:void display( )cout”B2 called”display( );void main( )B1 b1;B2 b2;A* p2=&b1,&b2;for(int i=0;i2;i+)show(pi);28.请在下面程序的横线处填上适当内容,以使程序完整,并使程序的输出为:Name:王小明Grade:90#include#includeclass Personchar name20;public:Person(char* s)strcpy(name,s);void display( )cout”Name:”nameendl;class Student:public Personint grade;public:Student(char* s, int g): grade=g;void display( ) ;cout”Grade:”gradeendl;void main( )Student s(“王小明”,90);s.display( );29.请在下面程序的横线处填上适当内容,以使程序完整,并使程序的输出为5。#includeclass Integerint x;public:Integer(int a=0)x=a;void display( )coutxendl; ;Integer Max(Integer a,Integer b)if( )return a;return b;void main( )Integer a(3),b(5),c;c=Max(a,b);c.display( );30请在下面的横线处填上适当内容,以使类的定义完整。class Arrayint* ptr;int size;public:Array( )size=0; ptr=0;Array(int n)size=n;ptr=new intsize;Array() /复制初始化构造函数size=a.size;ptr=new intsize;for(int i=0;isize;i+); /将源对象的动态数组内容复制到目标对象;五、程序分析题(本大题共6小题,每小题5分,共30分)阅读下面的程序,写出程序运行的结果。31#includeclass Test private:int num;public:Test(int n=0)num=n;num+;Test( )cout”Destructor is active,number=”numendl;void main( )Test x2;cout”Exiting main”endl; 32#include class Apublic:virtual void fun (int data)cout”class A:”dataendl;void fun(char *str) cout”class A:”strendl; ;class B: public Apublic:void fun( ) cout”class B”endl;void fun(int data) cout”class B:”dataendl; void fun(char *str) cout”class B:”strfun(1);pA-fun(“Hello”);33.#include void main( )cout.fill(*);cout.width(10);cout123.45endl;cout.width(8);cout123.45endl;cout.width(4);cout123.45endl;34.#includeclass Numint X,Y;public:Num(int x,int y=0)X=x;Y=y;void value(int x,int y=0)X=x;Y=y;void value( )coutX;if(Y!=0)cout0?+:-)0?Y:-Y)i;coutendl;void main( ) Num n(1);n.value( );n.value(2,3);n.value( );Num m(3,-4);m.value( );35.#includeclass Sampleprivate:int i;static int count;public:Sample( );void display( );Sample:Sample( )i=0;count+;void Sample:display( )couti=i+,count=countendl;int Sample:count=0;void main( )Sample a,b;a.display( );b.display( );36.#includeclass Aint a;public:A(int aa=0)a=aa;couta=aendl;class B int b;public:B(int bb=0)b=bb;coutb=bendl;class C:public BA a;public:C( )cout”C default constructor”endl;C(int i,int j):a(i),B(j)cout”C constructor”endl; ;void main( )C c1,c2(5,6);模拟试题二一、单项选择题 ( 本大题共 10 小题,每小题 2 分,共 20 分 ) 在每小题列出的四个选项中只有一个选项是符合题目要求的,请将其代码填在题后的括号内。错选或未选均无分。 1. 在 C+ 中,函数原型不能标识 ( ) A. 函数的返回类型 B. 函数参数的个数 C. 函数参数类型 D. 函数的功能 2. 在 C+ 程序中,对象之间的相互通信通过 ( ) A. 继承实现 B. 调用成员函数实现 C. 封装实现 D. 函数重载实现 3. 对于任意一个类,析构函数的个数最多为 ( ) A.0 B.1 C.2 D.3 4. 下面函数模板定义中不正确的是( ) A.template B.template QF(Qx) QF(Qx) return Q+x; return x+x; C.template D.template TF(Tx) TF(Tx) return x*x; return x1; 5. 友元关系不能 ( ) A. 继承 B. 是类与类的关系 C. 是一个类的成员函数与另一个类的关系 D. 提高程序的运行效率 6. 语句 ofstream f( SALARY.DAT ,ios:app ios:binary); 的功能是建立流对象 f ,试图打开文件 SALARY.DAT 并与之连接,并且 ( ) A. 若文件存在,将文件写指针定位于文件尾;若文件不存在,建立一个新文件 B. 若文件存在,将其置为空文件;若文件不存在,打开失败 C. 若文件存在,将文件写指针定位于文件首;若文件不存在,建立一个新文件 D. 若文件存在,打开失败;若文件不存在,建立一个新文件 7. 下面说法正确的是 ( ) A. 内联函数在运行时是将该函数的目标代码插入每个调用该函数的地方 B. 内联函数在编译时是将该函数的目标代码插入每个调用该函数的地方 C. 类的内联函数必须在类体内定义 D. 类的内联函数必须在类体外通过加关键字 inline 定义 8. 可以用 p.a 的形式访问派生类对象 p 的基类成员 a ,其中 a 是 ( ) A. 私有继承的公有成员 B. 公有继承的私有成员 C. 公有继承的保护成员 D. 公有继承的公有成员 9. 在公有派生情况下,有关派生类对象和基类对象的关系,不正确的叙述是 ( ) A. 派生类的对象可以赋给基类的对象 B. 派生类的对象可以初始化基类的引用 C. 派生类的对象可以直接访问基类中的成员 D. 派生类的对象的地址可以赋给指向基类的指针 10. 对于类定义 class A public: virtual void func1( ) void func2( ) ; class B:public A public: void func1( )cout class B func 1 end1; virtual void func2( )cout class B func 2 end1; ; 下面正确的叙述是 ( ) A. A:func2( ) 和 B:func1( ) 都是虚函数 B. A:func2( ) 和 B:func1( ) 都不是虚函数 C. B:func1( ) 是虚函数,而 A:func2( ) 不是虚函数 D. B:func1( ) 不是虚函数,而 A:func2( ) 是虚函数 第二部分 非选择题 ( 共 80 分 ) 二、填空题 ( 本大题共 10 小题,每小题 2 分,共 20 分 ) 不写解答过程,将正确的答案写在每小题的横线处。错填或不填均无分。 11. 定义类的动态对象数组时,系统只能够自动调用该类的 _ 构造函数对其进行初始化。 12. 在 C+ 程序设计中,建立继承关系倒挂的树应使用 _ 继承。 13. 表达式 coutend1 还可表示为 _ 。 14. 基类的公有成员在派生类中的访问权限由 _ 决定。 15.C+ 支持的两种多态性分别是 _ 多态性和 _ 多态性。 16.C+ 中语句 const char * const p= hello ;所定义的指针 p 和它所指的内容都不能被 _ 。 17. 假定 AB 为一个类,则语句 AB(AB&x) ;为该类 _ 构造函数的原型说明。 18. 将关键字 const 写在成员函数的 _ 和 _ 之间时,所修饰的是 this 指针。 19. 在 C+ 中,访问一个对象的成员所用的运算符是 _ ,访问一个指针所指向的对象的成员所用的运算符是 _ 。 20. 派生类从一个或多个以前定义的该类的 _ 继承数据和函数。 三、改错题 ( 本大题共 5 小题,每小题 2 分,共 10 分 ) 21. 指出下面程序段中的错误,并说明出错原因。 class A int a,b; public : A(int aa,int bb) a=aa;b=bb; ; Ax(2,3),y(4); 22. 指出并改正下面利用类模板的对象定义中的错误。 template class Tany T x,y; public: Tany(T a,T b)x=a,y=b; T sum( )return x+y; ; Tany (int) obj(10,100); 23. 指出下面程序段中的错误,并说明出错原因。 class one private: int a; public: void func(two&); ; class two private: int b; friend void one:func(two&); ; void one:func(two& r) a=r.b; 24. 指出下面程序段中的错误,并说明出错原因。 include class A public: void fun( )cout a.fun endl; ; class B public: void fun( )cout b.fun endl; void gun( )cout b.gun endl; ; class C:public A,public B private:int b; public:void gun( )cout c.gun endl; void hun( )fun( ); ; 25. 指出下面程序段中的错误,并说明出错原因。 class Location int X,Y=20; protected: int zeroX,zeroY; int SetZero(int ZeroX,int ZeroY); private: int length,height; public: float radius; void init(int initX,int initY); int GetX( ); int GetY( ); ; 四、完成程序题 ( 本大题共 5 小题,每小题 4 分,共 20 分 ) 根据题目要求,完成程序填空。 26. 在下面横线处填上适当字句,完成类中成员函数的定义。 class A int * a; public: A(int aa=0) a=_;/ 用 aa 初始化 a 所指向的动态对象 A()_;/ 释放动态存储空间 ; 27. 下面是一个函数模板,用于计算两个向量的和。在下面横线处填上适当字句,完成函数模板定义。 include template T* f(T* a,T* b,int n) T* c=_; for(int i=0;in;i+) c i =_; return c; void main() int a 5 =1,2,3,4,5,b 5 =10,20,30,40,*p; p=f(a,b,5); for(int i=0;i5;i+) coutp i endl; 28. 下面是一个用户口令检查程序,在横线处填上适当语句完成程序功能。 include include _/ 定义由 PASS 指针所指向的口令 wolleh 。 void main() char user 10 ;/ 用于存放输入的口令 cout please input your password: endl; _/ 输入口令 if(strcmp(user,PASS)=0) cout your password is correct endl; else cout your password is error endl; 29. 下面是类 fraction( 分数 ) 的定义,其中重载的运算符 以分数形式输出结果,例如将三分之二输出为 2/3 。在横线处填上适当字句。 class fraction int den; / 分子 int num; / 分母 friend ostream& operator(ostream&,fraction); ; ostream& operator (ostream& os,fraction fr) _; return _; 30. 在下面程序横线处填上适当的字句,使其输出结果为 0 , 56 , 56 。 include class base public: _func( )return 0; ; class derived:public base public: int a,b,c; _ setValue(int x,int y,int z)a=x;b=y;c=z; int func( )return(a+b)*c; ; void main() base b; derived d; coutb.func( ) , ; d.setValue(3,5,7); coutd.func( ) , ; base& pb=d; coutpb.func( )end1; 五、程序分析题 ( 本大题共 6 小题,每小题 5 分,共 30 分 ) 给出下面各程序的输出结果。 31. include void main( ) int *a; int *&p=a; int b=10; p=&b; cout*a; 输出为: 32. include template Tf(T*a,T*b,int n) Ts=(T)0; for(int i=0;in;i+) s+=a i *b i ; return s; void main() double c 5 =1.1,2.2,3.3,4.4,5.5,d 5 =10.0,100.0,1000.0; coutf(c,d,5)endl; 输出为: 33. include void main() for(int i=0;i4;i+) coutendlsetfill( )setw(4-i) 0 setfill( * )setw(i+i)0? 0 : ); 输出为: 34. 运行下面的程序,写出当输入 25 , 60 时的输出结果。 include class goods private: static int totalWeight; int weight; public: goods(int w) weigh=w; totalWeight+=w; goods(goods& gd) weight=gd.weight; totalWeight+=weight; goods() totalWeight-=weight; int getwg() return weight; static int getTotal() return totalWeight; ; int goods:totalWeight=0; void main() int w; cout The initial weight of goods: goods:getTotal()w; / 输入 25 goods g1(w); cinw; / 输入 60 goods g2(w); cout The total weight of goods: goods:getTotal()endl; 输出为: 35. include class A public: A( ) virtual void func( )cout Destructor A endl; A( ) func(); ; class B:public A public: B( ) void func()cout Destructor B endl; B( ) func(); ; void main( ) B b; A&a=b; 输出为: 36. include class My Class public: int number; void set(int i); ; int number=3; void MyClass:set (int i) number=i; void main() MyClass my1; int number=10; my1.set(5); coutmy1.numberend1; my1.set(number); coutmy1.numberendl; my1.set(:number); coutmy1.number; 输出为: 模拟试题三一、单项选择题 ( 在每小题的四个备选答案中选出一个正确答案,并将其号码填在题干的括号内。每小题 2 分,共 20 分 ) 1. 所谓数据封装就是将一组数据和与这组数据有关操作组装在一起,形成一个实体,这实体也就是 ( ) A. 类 B. 对象 C. 函数体 D. 数据块 2. 面向对象的程序设计语言必须具备的关键要素是 ( ) A. 抽象和封装 B. 抽象和多态性 C. 抽象、封装、继承和多态性 D. 抽象、封装和继承性 3. 类的构造函数被自动调用执行的情况是在定义该类的 ( ) A. 成员函数时 B. 数据成员时 C. 对象时 D. 友元函数时 4. 设有函数模板 template Q Sum(Qx,Qy) return(x)+(y); 则下列语句中对该函数模板 错误 的使用是 ( ) A.Sum(10,2); B.Sum(5.0,6.7) ; C.Sum(15.2f,16.0f); D.Sum( AB , CD ); 5. 已知类 A 是类 B 的友元,类 B 是类 C 的友元,则 ( ) A. 类 A 一定是类 C 的友元 B. 类 C 一定是类 A 的友元 C. 类 C 的成员函数可以访问类 B 的对象的任何成员 D. 类 A 的成员函数可以访问类 B 的对象的任何成员 6. 如果表达式 +i*k 中的“ + ”和“ * ”都是重载的友元运算符,则采用运算符函数调用格式,该表达式还可表示为 ( ) A.operator*(i.operator+(),k) B.operator*(operator+(i),k) C.i.operator+().operator*(k) D.k.operator*(operator+(i) 7. 下列说法中正确的是 ( ) A. 类定义中只能说明函数成员的函数头,不能定义函数体 B. 类中的函数成员可以在类体中定义,也可以在类体之外定义 C. 类中的函数成员在类体之外定义时必须要与类声明在同一文件中 D. 在类体之外定义的函数成员不能操作该类的私有数据成员 8. 若派生类的成员函数不能直接访问基类中继承来的某个成员,则该成员一定是基类中的 ( ) A. 私有成员 B. 公有成员 C. 保护成员 D. 保护成员或私有成员 9. 对基类和派生类的关系描述中, 错误 的是 ( ) A. 派生类是基类的具体化 B. 基类继承了派生类的属性 C. 派生类是基类定义的延续 D. 派生类是基类的特殊化 10. 类 B 是类 A 的公有派生类,类 A 和类 B 中都定义了虚函数 func(),p 是一个指向类 A 对象的指针,则 p-A:func() 将 ( ) A. 调用类 A 中的函数 func() B. 调用类 B 中的函数 func() C. 根据 p 所指的对象类型而确定调用类 A 中或类 B 中的函数 func() D. 既调用类 A 中函数,也调用类 B 中的函数 二、填空题 ( 每小题 2 分,共 20 分 ) 11. 假定用户没有给一个名为 AB 的类定义析构函数,则系统自动给出的缺省析构函数定义为 _ 。 12. 模板定义中标识类型的参数必须用关键字 _ 修饰。 13. 表达式 counthex 还可表示为 _ 。 14. 通过 C+ 语言中的 _ 机制,可以从现存类中构建其子类。 15. 要在调用虚函数的时候强制进行静态联编,可以通过在调用中对虚函数加 _ 实现。 16. 封装要求一个对象应具备明确的功能,并具有 _ 以便和其它对象相互作用。 17. 在删除一个动态对象时,将自动调用该动态对象所属类的 _ 函数。 18. 静态成员函数、友元函数、构造函数和析构函数中,不属于成员函数的是 _ 。 19. 在下面的类定义中,私有成员有 _ 。 class Location int X,Y; protected: int zeroX,zerxY; int SetZero(intzeroX, intzeroY); private: int length,height; public: void init(int initX,int initY); int GetX(); int GetY(); ; 20. 类的私有成员只能被它的成员函数和 _ 访问。 三、改错题 ( 每小题 2 分,共 10 分 ) 21. 此类定义有一处错误,请指出错误并改正。 class ABC int a; public: ABC(int aa)a(aa) ; 22. 下面程序通过调用函数模板实现计算两个正整数的最大公约数,把 main 函数中错误找出并改正过来。 #include template T gcd(Tx,Ty) while(x! =y) if(xy)x-=y; else y-=x; return x; void main() int a; double d; cinad; coutgcd(a,d)endl; 23. 指出下面程序中的错误,并说明出错原因。 #include class ConstFun public: void ConstFun() const int f5()constreturn 5; int Obj() return 45; int val; int f8(); ; int ConstFun:f8()return val; void main() const ConstFun s; int i=s.f5(); cout Value= iendl; 24. 指出下面程序中的错误,并说明错误原因。 #include class A public:void fun()cout a.fun endl; ; class B public:void fun()cout b.fun endl; void gun()cout b.gun endl; ; class C:public A,public B private:int b; public:void gun()cout c.gun endl; ; void main() c obj; obj.fun(); obj.gun(); 25. 指出下面程序段中的错误,并说明出错原因。 class Location int X,Y; protected: int zeroX,zeroY; int SetZero(int zeroX,int zeroY)X=zeroX;Y=zeroY; private: int length,height; public: float radius; void init(int initX,int initY)length=initX;height=initY; int GetX()return X; int GetY()return Y; ; int main() Location retangleA=25,20,3,5,6,7,3; return 0; 四、完成程序题 ( 每小题 4 分,共 20 分 ) 根据题目要求填空,完成程序。 26. 在下面程序段横线处填上适当的内容。 class A _ int n; public: A(int nn=0):n(nn) if(n=0)a=0; else a=new int n ; _/ 定义析构函数,释放动态数组空间 ; 27. 在下面程序横线处填上适当内容,使程序执行结果为: 200_ _ 100 程序如下: #include template _ Tf(Tx,Ty) if(sizeof(T)=_) return x+y; else return x*y; void main(

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论