石河子大学信息学院c期末考试复习题_第1页
石河子大学信息学院c期末考试复习题_第2页
石河子大学信息学院c期末考试复习题_第3页
石河子大学信息学院c期末考试复习题_第4页
石河子大学信息学院c期末考试复习题_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

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

文档简介

1、(小题前面那个复习题里面有,大题注意一下)试题一一、 单项选择题(共20分,每题2分,正确答案只有一项)1. 以下说法中正确的是A. 类A 的private成员只能在类A的成员函数内部进行直接访问,其他任何地方都不能直接访问。B. 静态成员一定不能是 private 的。C. 在某种情况下,在派生类的成员函数内部也能对基类的私有成员进行直接访问。D. 只有成员变量才能是protected的,成员函数不能是 protected 的。(C)2. 以下关于 this 指针的说法中不正确的是:A. const成员函数内部不可以使用this 指针B. 成员函数内的this 指针,指向成员函数所作用的对象

2、。C. 在构造函数内部可以使用this指针D. 在析构函数内部可以使用 this 指针(A)3. 下列类模板中定义正确的是:A. templateclass A : T1 b;int fun( int a ) return T1+T2; ;B. templateclass A int T2;T1 fun( T2 a ) return a + T2; ;C. templateclass A public:T2 b; T1 a;A() T1 fun() return a; ;D. templateclass A T2 b;T1 fun( double a ) b = (T2) a; return

3、(T1) a; ; (D)4. 假设p1,p2 是STL中的list 容器上的迭代器,那么以下语句哪个是不符合语法的A. p1 + ;B. p1 -;C. p1 += 1;D. int n = ( p1 = p2 );(C)5. 将一个对象放入STL中的容器里时:A. 实际上被放入的是该对象的一个拷贝(副本)B. 实际上被放入的是该对象的指针C 实际上被放入的是该对象的引用D. 实际上被放入的就是该对象自身 (A)6. 以下关于函数对象的说法正确的是:A. 函数对象所属的类将 () 运算符重载为一个成员函数B. 函数对象所属的类将 运算符重载为一个成员函数C. 函数对象所属的类不能有成员变量D

4、. A 和 C都对(A)7. 以下说法正确的是:A. const成员函数内可以调用非const成员函数B. 在抽象类的某些成员函数中,可以出现调用纯虚函数的语句C. 静态成员函数也可以是虚函数D. 静态成员变量只能通过静态成员函数来访问(B)8. 如果将运算符 “ * ” 重载为某个类的成员运算符(也即成员函数),则该成员函数的参数个数是:A. 0 个 B. 1个 C. 2个 D. 根据实际作用不同,0个或1个都行(D)9. 以下关于 STL 中 stack 类模板的正确说法是:A. stack 是关联容器B. 对于stack 上的迭代器p,能够执行 p+ 操作C. stack 可以用dequ

5、e实现D. 可以用 sort 算法对stack 进行排序(C)10. 以下说法正确的是A. 在静态成员函数中调用虚函数是动态联编(多态)B. 在构造函数中调用虚函数,不是动态联编C. 抽象类的成员函数都是纯虚函数D. 构造函数和析构函数都不能是虚函数(B)二以下程序编译、连接都能通过,请写出运行时输出的结果。你认为没有输出的,就写无输出(共28分)。1) 4分#include #include using namespace std;class A private :int nId;public:A(int n) nId = n; cout nId contructor endl; ;A( )

6、 cout nId destructor endl;main()vector vp;vp.push_back(new A(1);vp.push_back(new A(2);vp.clear();A a(4);/*1 contructor2 contructor4 contructor4 destructor*/2) 4分#include class Apple private :static int nTotalNumber;public:Apple() nTotalNumber +; Apple( ) nTotalNumber -; static void PrintTotal() cout

7、 nTotalNumber endl; ;int Apple:nTotalNumber = 0; int main () Apple * p = new Apple4;Apple:PrintTotal(); Apple p1, p2;delete p;Apple:PrintTotal(); /*42*/3) 4 分#include #include using namespace std;class A public:int i;A( int n):i(n) ;void Print() cout i ,; ;A & Func(vector & v, A * p) v.push_back ( *

8、 p);for( int i = 0;i v.size(); i +)if( vi.i = 2 ) p = & (vi);break;return * p;main()const int SIZE = 4;A arraySIZE = A(1),A(2),A(3),A(4) ;vector v(array,array + SIZE);A * p = new A(5);Func( v,p) = 10; for( int i = 0;i v.size(); i +)vi.Print();cout endl;cout i;/*1,10,3,4,5,5*/4) 4 分#include class A p

9、ublic:A( ) virtual void func() cout A:func endl; A( ) virtual void fund( ) cout A:fund endl; ;class B:public A public:B ( ) func( ) ; void fun( ) func( ) ; virtual B ( ) fund( ); ;class C : public B public :C( ) void func( ) cout C:func endl; C() fund( );void fund() cout C:fund endl;main() A * pa =

10、new C();delete pa;B * pb = new C();delete pb;/* A:funcA:funcC:fundA:fund*/5) 4分#include #include #include using std:vector;using std:accumulate ;class Complex double real;double image;public:Complex(double r = 0, double i = 0):real(r),image(i) friend Complex operator+(const Complex & c , int i);frie

11、nd ostream & operator( ostream & o, const Complex & c);Complex operator+(const Complex & c , int i)Complex tmp;tmp.real = i * i + c.real;tmp.image = c.image;return tmp;ostream & operator( ostream & o, const Complex & c)o c.real + c.image i ;return o;main()int a = 1,2,3,4 ;vector v(a,a+4);cout accumu

12、late(v.begin(),v.end(),Complex(2,3);/*32+3i*/6) 4分#include #include using namespace std;class Gtpublic:bool operator() (const int & n1,const int & n2) const return ( n1 % 10 ) ( n2 % 10);int main() typedef map mmid;mmid MyMap;cout MyMap.count(15) endl;MyMap.insert(mmid:value_type(15,2.7);MyMap.inser

13、t(mmid:value_type(15,99.3);cout MyMap.count(15) endl; MyMap.insert(mmid:value_type(30,111.11);MyMap.insert(mmid:value_type(11,22.22);cout MyMap16 endl;for( mmid:const_iterator i = MyMap.begin();i != MyMap.end() ;i + ) cout ( first , second ) ,; /*010(16,0),(15,2.7),(11,22.22),(30,111.11)*/7) 4 分#inc

14、lude class A1 public:int i;A1(int n):i(n) cout A1_Con: i endl; A1() cout A1_Des: i endl; ;class A2 public:int i;A2(int n):i(n) cout A2_Con: i endl; A2() cout A2_Des: i endl; ;class B public:B() cout B_Con endl; B() cout B_Des endl; ;class C:public B public:A2 a2;A1 a1;C():a1(1),a2(1) cout C_Con endl

15、; C() cout C_Des endl; ;main() C * pc = new C;/*B_ConA2_Con:1A1_Con:1C_Con*/三、程序填空(36分):已知以下程序的输出结果,请填出缺少的部分。您填写的内容里不能包含分号。假设您需要的头文件前面都已经有#include 语句包含进来了(即可以随意使用标准库中的类、模板等)1) 6分void OutputN(int n);函数的功能是输出所有数正整数 i,j,k 的组合,该组合满足下列3个条件:1) i,j,k都不大于 n2) ijk 3)i+j+k能够被3整除比如,OutputN(5)的输出结果就是:1,2,31,3,5

16、2,3,43,4,5请补上丢失的部分。#include void OutputN( int n) int i,j, k;for( _;_;_) for( _ ; _;_ ) for( _ ;_; _ ) if( ( i + j + k) % 3 = 0 ) cout i , j , k endl;/* i = 1i = ni +j = i + 1j = nj +k = j + 1k= nk+*/2) 6分从1,2,3,4,5这5个整数中取一个或多个数(每个数最多只能取1次),使得取出的数总和能被3整除。下面的这段程序的功能就是用枚举的办法,求出了所有满足条件的取法并输出。输出结果如下:1,2,

17、3,1,2,3,2,4,2,3,4,1,5,1,3,5,4,5,1,2,4,5,3,4,5,1,2,3,4,5,请填出缺少的部分#include #include #include using namespace std;int bit( int n, int b)return _;main()int i;int sum;vector v;for( i = 1;i 32;i + ) sum = 0;_;for( int j = 0; j 5; j + )if( bit( _) ) sum += j + 1;v.push_back (j+1);if( (sum % 3) = 0 ) for( i

18、nt k = 0; k v.size(); k +)cout vk ,;cout endl;/*n & (1 b)v.clear();i,j*/3) 6分输出结果: Tom,Jack,Mary,John,程序:#include #include #include using namespace std;template class MyClass vector array;public:MyClass _ copy( begin, begin + n, array.begin();void List() _;for( i = array.begin(); i != array.end();i

19、+)cout * i , ;main()string array4 = Tom,Jack,Mary,John;_;obj.List(); /* ( T * begin,int n ):array(n)vector:iterator iMyClass obj(array,4)*/4) 6 分输出结果:A:Print: 1B:Print: 2B:Print: 3程序:template void PrintAll( const T & c )T:const_iterator i;for( i = c.begin(); i != c.end(); i + ) _;class A protected:i

20、nt nVal;public:A(int i):nVal(i) virtual void Print() cout A:Print: nVal endl; ;class B:public A public:B(int i):A(i) void Print() cout B:Print: nVal Print()vector v*/5) 6分回文串指的是颠倒过来后还是与原串一样的字符串。比如 “abba”,“bcd232dcb”,都是回文串。下面的程序运行后等待输入一串字符(字符个数小于4000),敲回车后程序判断输入的字符串是否是回文串,如果是,输出yes,否则,输出no。比如输入abba (

21、回车)则输出 yes输入 abcd (回车)则输出:no请填空。#include #include char szWord5000;bool Palindrome(char * s, int nLen )if( _)return true;if(_)return false;return Palindrome(_);main()cin.getline(szWord, 4990);if( Palindrome(szWord, strlen(szWord)cout yes ;elsecout no;/*nLen = 1s0 != snLen-1s+1,nLen-2*/6) 6分输出结果是:05程序

22、:class A public:int val;A(_ ) val = n; ; /(a)_ GetObj() / (b)return _; / (c);main() A a;cout a.val endl;a.GetObj() = 5;cout a.val endl;/*int nA &* this*/四、编程题1. ( 8分) 程序员马克斯的程序风格和他的性格一样怪异。很不幸他被开除后老板命令你接替他的工作。马克斯走之前分愤然删除了他写的一个类模板MyMax中的代码,你只好将其补出来。你只知道 MyMax模板的作用与求数组或向量中的最大元素有关,而且下面程序的输出结果是:5136请补出马克

23、斯删掉的那部分代码。该部分代码全部位于 /开头 和 /结尾之间,别处一个字节也没有。By the way, 马克在空白处留下了以下三个条件:1)不准使用除 true 和 false 以外的任何常量,并且不得假设 true的值是1或任何值2)不得使用任何库函数或库模板(包括容器和算法)3)不得使用 static 关键字你不想表现得不如马克斯,所以你只好遵守这三个条件。#include #include #include using namespace std;template class MyMax/开头/结尾;class A public:int i;A( int n) :i(n) ;A()

24、;bool operator ( const A & a1, const A & a2)return a1.i a2.i ;ostream & operator( ostream & o, const A & a)o a.i;return o;main()A a5 = A(1),A(5),A(3),A(4),A(2);int b9 = 1,5,30,40,2,136,80,20,6;int nMax; A aMax;MyMax outputa( & aMax);copy(a,a+5,outputa);cout outputa() endl;MyMax output( & nMax);copy(

25、b,b+9,output);cout output() endl;/*答案public:T * pMax;bool bFirst;MyMax (T * p):bFirst(true),pMax(p) ;MyMax & operator * () return * this; void operator +( ) void operator = ( T & obj) if( bFirst) * pMax = obj;bFirst = false;else if( * pMax obj )* pMax = obj;T operator() () return * pMax;*/2. (8分) CL

26、inkList是一个带表头节点的单链表的类模板。带表头节点的单链表的特点是:当链表为空时,表中仍有一个节点,即表头节点。请完整写出CLinkList类模板的各个成员函数,使得下面程序的输出结果是:0,1,2,3,0,1,2,3,9,10,11,注意:1)不得调用任何库函数,库模板,不得使用static关键字,不得使用除 NULL 以外的任何常量2)不得为Node和CLinkList模板添加任何成员3)不得添加任何全局变量,不得添加其他函数#include template class Node public:D data;Node * next;templateclass CLinkList

27、private:Node * pHead;public:CLinkList();void AppendNode( D data);void PrintList();main()CLinkList l;for( int i = 0;i 4;i +)l.AppendNode(i);l.PrintList();cout endl;for( i = 9;i 12;i +)l.AppendNode(i);l.PrintList();/*答案templateCLinkList:CLinkList() pHead = new Node;pHead-next = NULL;template void CLin

28、kList:AppendNode( D data)Node * p = pHead;while( p-next ) p = p-next;p-next = new Node;p-next-data = data;p-next-next = NULL;templatevoid CLinkList:PrintList()Node * p;p = pHead-next;while( p ) cout data next;*/ 试题二一、 单项选择题(共20分,每题2分,正确答案只有一项)7. 抽象类A. 至少含有一个纯虚函数B. 至少含有一个静态函数C. 其派生类必须提供纯虚函数的实现代码D. 可以

29、定义抽象类的对象,也可以由派生类生成新类(A)8. 以下说法中正确的是:A. 一个类可以有不止一个复制构造函数B. 构造函数的返回值类型是 voidC. 一个类只能定义一个析构函数,但可以定义多个构造函数D. 一个类只能定义一个构造函数,但可以定义多个析构函数(C)9. 下列函数模板中定义正确的是:A. templateT1 fun (T1,T2) return T1 + T2; B. templateT fun(T a) return T + a;a) tempmlateT1 fun(T1,T2) return T1 + T2 ; b) templateT fun(T a,T b) retu

30、rn a + b ; (D)10. 如果类定义中没有使用 private、protected、或public 关键字,则所有成员A. 都是 public 成员 B. 都是 proctected 成员C. 都是 private 成员 D. 不一定(C)11. 对于通过 new 运算符生成的对象A. 在程序结束时自动析构B. 执行 delete 操作时才能析构C. 在包含该 new 语句的函数返回时自动析构 D. 在执行 delete 操作时会析构,如果没有执行delete操作,则在程序结束时自动析构(B)12. 如果某函数的返回值是个对象,则该函数被调用时,返回的对象A. 是通过复制构造函数初始

31、化的B. 是通过无参数的构造函数初始化的C. 用哪个构造函数初始化取决于函数中 return 语句是怎么写的D. 不需要初始化(A)7. 以下说法正确的是:E. 在静态成员函数中可以调用同类的其他任何成员函数F. const成员函数不能作用于非 const 对象G. 在静态成员函数中不能使用 this 指针H. 在纯虚函数中可以调用同类的其他非虚函数(C)8. 如果将运算符 “”重载为某个类的成员运算符(也即成员函数),则该成员函数的参数个数是:i. 0 个 B. 1个 C. 2个 D. 3个 (B)9. 编译器根据类模板,在需要的时候能自动生成:A. 一个或多个相似的函数B. 一个或多个函数

32、模板C. 一个或多个对象D. 一个或多个相似的类(D)10. 以下说法不正确的是(假设在公有派生情况下)A. 可以将基类对象赋值给派生类对象B. 可以将派生类对象的地址赋值给基类指针C. 可以将派生类对象赋值给基类的引用E. 可以将派生类对象赋值给基类对象(A)二以下程序编译、连接都能通过,请写出运行时输出的结果。你认为没有输出的,就写无输出(共50分)。1)(5分)int a;class CA private :int a;public: void SetA() a = 10; CA( int i) a = i;int GetA() return :a; ;int main () int a

33、; a = 15; :a = 2; cout :a ,a endl; CA objCA(100); objCA.SetA (); cout :a ,a , objCA.GetA() endl; /2,15/2,15,22)(5分)int g = 10;int SetValue1( int n) n = 10; return n; int & SetValue2( int & n ) n = 20; return n; main() int & ref = g;ref = 100; SetValue1( ref );cout g ,; SetValue2(ref);cout g ,; SetVa

34、lue2(g) = 300;cout g , ; int const c = 70;ref = c; ref = 15;cout ref , c;/100,20,300,15,703)(4分)class CSample int x;public: CSample() cout C1 endl; CSample(int n ) x = n;cout C2,x= n endl; ;main()CSample array12;CSample array22 = 6,8;CSample array32 = 12;CSample * array4 = new CSample3;/C1/C1/C2,x=6

35、/C2,x=8/C2,x=12/C1/C1/C1/C1 4)(8分)class Demo int id;public:Demo(int i) id = i; cout id= id ,Con endl; Demo() cout id= id ,Des endl; ;Demo d1(4);void fun(Demo d) static Demo d2(2);Demo d3(3);cout fun endl; void main () cout main endl;fun(d1);cout endmain endl;fun(d1); Demo * p = new Demo(8);/*id=4,Co

36、nmainid=2,Conid=3,Confunid=3,Desid=4,Desendmainid=3,Confunid=3,Desid=4,Desid=8,Conid=2,Desid=4,Des*/5)(4分)class B private:int nBVal;public: void Print() cout nBVal= nBVal endl; void Fun() cout B:Fun endl; B ( int n ) nBVal = n;class D:public B private :int nDVal;public:void Print() B:Print();cout nD

37、Val=nDValendl;D( int n) : B(3*n) nDVal = n;void Fun() cout D:Fun Fun(); pd-Fun();pb-Print (); pd-Print ();pb = & d; pb-Fun();pb-Print();/*D:FunB:FunD:FunnBVal=2nBVal=24nDVal=8B:FunnBVal=12*/6)(4分)class Base public:int val;Base() cout Base Constructor endl; Base() cout Base Destructor endl;class Base

38、1:virtual public Base ;class Base2:virtual public Base ;class Derived:public Base1, public Base2 ;main() Derived d; /*Base constructorBase destructor*/7)(5分)class A public:A( ) virtual void func() cout A:func endl; A( ) virtual void fund( ) cout A:fund endl; ;class B:public A public:B ( ) func( ) ;

39、void fun( ) func( ) ; B ( ) fund( ); ;class C : public B public :C( ) void func( ) cout C:func endl; C() fund( );void fund() cout C:fund endl;main() C c; /*A:funcC:fundA:fund*/8)(5分)template T Max( T a,T b) cout TemplateMax endl;return 0; double Max(double a,double b)cout MyMax endl;return 0; main()

40、 int i=4,j=5; Max( 1.2,3.4); Max(i,j); /MyMax/TemplateMax9)(5分)#include class Apple private :int nWeight;static int nTotalNumber;public:Apple() nTotalNumber +; Apple( ) nTotalNumber -; static void PrintTotal() cout nTotalNumber endl; ;int Apple:nTotalNumber = 0; Apple Fun( Apple a ) a.PrintTotal();

41、return a ; int main () Apple p1, p2;Apple * p = new Apple3;Fun( p1); p1.PrintTotal(); /5/312)(5分)#include class A public :virtual A() coutDestructA endl; ;class B: public A public:virtual B() coutDestructB endl;class C: public B public:C() cout DestructC endl; ;void main() A * pa = new C;delete pa;

42、A a;/DestructC/DestructB/DestructA/DestructA三、程序填空(共20分):已知以下程序的输出结果,请填出缺少的部分。您填写的内容里不能包含分号。1) (6分) 下面程序输出结果是:05请补足程序:class A public:int val;A(_ ) val = n; ; /(a)_ GetObj() / (b)return _; / (c);main() A a;cout a.val endl;a.GetObj() = 5;cout a.val endl;/int n/A &/* this2)(4分)下面程序的输出结果是:A:FunC:Do请补足横线上丢失的部分(4分)#in

温馨提示

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

评论

0/150

提交评论