C++笔试题目-带答案.pdf

上传人:l*** 文档编号:71673484 上传时间:2023-02-04 格式:PDF 页数:18 大小:1.80MB
返回 下载 相关 举报
C++笔试题目-带答案.pdf_第1页
第1页 / 共18页
C++笔试题目-带答案.pdf_第2页
第2页 / 共18页
点击查看更多>>
资源描述

《C++笔试题目-带答案.pdf》由会员分享,可在线阅读,更多相关《C++笔试题目-带答案.pdf(18页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、C+C+笔试题目笔试题目-带答案带答案姓名姓名:_:_时间时间:_:_DCCBB AADADDCCBB AADAD一、选择题一、选择题(1*10=10)(1*10=10)1 1如果派生类以如果派生类以 proctectedproctected 方式继承基类,则原基类的方式继承基类,则原基类的 protectedprotected 和和 publicpublic 成成员在派生类的访问性分别是:员在派生类的访问性分别是:D DA Apublicpublic 和和 publicpublicB Bpublicpublic 和和 protectedprotectedC Cprotectedprotect

2、ed 和和 publicpublicD Dprotectedprotected 和和 protectedprotected解析:解析:通过通过 protectedprotected 方式继承基类后,方式继承基类后,原基类的私有成员不可访问,原基类的私有成员不可访问,而而 protectedprotected和和 publicpublic 成员均变成成员均变成 protectedprotected 成员。成员。答案:答案:D D2 2有如下头文件:有如下头文件:int F1();int F1();static int F2();static int F2();classs CAclasss CA

3、 public:public:int F3();int F3();static int F4();static int F4();在所描述的函数中,具有隐含在所描述的函数中,具有隐含 thisthis 指针的是:指针的是:C CA AF1F1B BF2F2C CF3F3D DF4F4本题考查的是本题考查的是 thisthis 指针。指针。thisthis 指针式一个隐含的指针,指针式一个隐含的指针,它隐含于每个类的非静态成员函数中,它隐含于每个类的非静态成员函数中,它明确它明确地表示出了成员函数当前操作的数据所属的对象。当对一个对象调用成员函数地表示出了成员函数当前操作的数据所属的对象。当对一

4、个对象调用成员函数时,编译程序先将对象的地址赋值给时,编译程序先将对象的地址赋值给 thisthis 指针,然后调用成员函数,每次成员指针,然后调用成员函数,每次成员函数存取数据成员时,则隐含使用函数存取数据成员时,则隐含使用 thisthis 指针。指针。thisthis 指针是指向对象本身的指针,它只存在于类的非静态成员中。指针是指向对象本身的指针,它只存在于类的非静态成员中。f1f1,f2f2 不不是成员函数,不存在隐含指针;是成员函数,不存在隐含指针;f4f4 为静态成员函数,也不含有为静态成员函数,也不含有 thisthis 指针;含有指针;含有thisthis 指针的函数在调用时按

5、指针的函数在调用时按 thiscallthiscall 调用约定调用。调用约定调用。故本题答案为故本题答案为 C C。3 3派生类的成员函数不能访问基类的:派生类的成员函数不能访问基类的:C CA A共有成员和保护成员共有成员和保护成员B B共有成员共有成员C C私有成员私有成员D D保护成员保护成员本题考查的是继承的类型。本题考查的是继承的类型。类的继承方式有公有继承、类的继承方式有公有继承、保护继承和私有继承三种方式。保护继承和私有继承三种方式。对于公有继承基类中的成员访问属性不变,对于公有继承基类中的成员访问属性不变,对于保护和私有继承基类中的成员转换为相应的访问类型。但是如果基类成员的

6、访问属性为对于保护和私有继承基类中的成员转换为相应的访问类型。但是如果基类成员的访问属性为privateprivate的,的,则不能被继承。则不能被继承。故本题答案为故本题答案为 C C。4 4按照“后进先出”原则组织数据的数据结构是按照“后进先出”原则组织数据的数据结构是 B BA A队列队列B B栈栈C C双向链表双向链表D D二叉树二叉树答案为答案为 B B。5 5下列关于虚函数的说明中,正确的是:下列关于虚函数的说明中,正确的是:B BA A从虚基类继承的函数都是虚函数从虚基类继承的函数都是虚函数B B虚函数不得是静态成员函数虚函数不得是静态成员函数C C只能通过指针或者引用调用虚函数

7、只能通过指针或者引用调用虚函数 D D抽象类中的中的成员函数都是虚函抽象类中的中的成员函数都是虚函数。数。答案为答案为 B B。6 6已知已知 ValueValue 是个类,是个类,valuevalue 是是 ValueValue 的一个对象。下列以非成员函数形式重的一个对象。下列以非成员函数形式重载的运算符函数原型中,正确的是:载的运算符函数原型中,正确的是:A AA AValue operator+(Value v,int i);Value operator+(Value v,int i);B BValue operator+(Value v=value,intValue operator

8、+(Value v=value,inti);i);C CValue operator+(Value v,int=0);Value operator+(Value v,int=0);D DValue operator+(Value v=value,Value operator+(Value v=value,int i=0);int i=0);7 7有如下类的定义:有如下类的定义:Class MyClassClass MyClass int value;int value;public:public:MyClass(int n):value(n)MyClass(int n):value(n)int

9、 getValue()const return value;int getValue()const return value;则类则类 MyclassMyclass 的构造函数的个数是:的构造函数的个数是:A AA A1 1 个个B B2 2 个个C C3 3 个个D D4 4 个个还有默认拷贝构造函数还有默认拷贝构造函数,应该选应该选 B B8 8有如下类的定义:有如下类的定义:class Constantsclass Constants public:public:static double GetPI(void)return 3.14159;static double GetPI(voi

10、d)return 3.14159;Constants constants;Constants constants;下列各组语句中,能输出下列各组语句中,能输出 3.141593.14159 的是:的是:B BA AcoutGetPI();coutGetPI();和和 coutConstants:GetPI();coutConstants:GetPI();B Bcoutconstants.GetPI();coutconstants.GetPI();和和 coutConstants.GetPI();coutConstants.GetPI();C CcoutGetPI();coutGetPI();和

11、和 coutGetPI();coutGetPI();D Dcoutconstants.GetPI();coutconstants.GetPI();和和 coutConstants:GetPI();coutConstants:GetPI();9 9有如下程序:有如下程序:#include#include using namespace std;using namespace std;class VACclass VAC public:public:int f()constreturn 3;int f()constreturn 3;int f()return 5;int f()return 5;i

12、nt main()int main()VAC v1;VAC v1;const VAC v2;const VAC v2;coutv1.f()v2.f();coutv1.f()v2.f();return 0;return 0;运行时的输出结果是:运行时的输出结果是:A AA A5353B B3535C C5555D D33331010有如下类声明:有如下类声明:class Baseclass Base protected:protected:int amount;int amount;public:public:Base(int n=0):amount(n)Base(int n=0):amount

13、(n)int getAmount()const return amount;int getAmount()const return amount;class Derived:public Baseclass Derived:public Base protected:protected:int value;int value;public:public:Derived(int m,int n):value(m),Base(n)Derived(int m,int n):value(m),Base(n)int getData()const return value+amount;int getDa

14、ta()const return value+amount;已知已知 x x 是一个是一个 DerivedDerived 对象,则下列表达式中正确的是:对象,则下列表达式中正确的是:B BA Ax.value+x.getAmount();x.value+x.getAmount();B Bx.getData()+x.getAmount();x.getData()+x.getAmount();C Cx.getData()x.getData()x.amount;x.amount;D Dx.value+x.amount;x.value+x.amount;二、填空题二、填空题(8*2=16)(8*2=1

15、6)400_400_6 4 4 4 46 4 4 4 4return*this _return*this _Dog speak VoiceDog speak Voice1.1.下列中下列中 a a 的值是的值是_400_400_#define AAA 200#define AAA 200#define BBB AAA+100#define BBB AAA+100int a=BBB*2int a=BBB*22.2.以下为以下为 WindowsWindows NTNT 下的下的 3232 位位 C+C+程序,请程序,请计算计算 sizeofsizeof 的值。的值。char str=“Hello”

16、;char str=“Hello”;char*p=str;char*p=str;int n=10;int n=10;请计算请计算sizeof(str)=sizeof(str)=_5_5_sizeof(p)=sizeof(p)=_4_4_sizeof(n)=sizeof(n)=_4_4_void Func(char str100)void Func(char str100)/请计算请计算sizeof(str)=sizeof(str)=_4_4_ void*p=malloc(100);void*p=malloc(100);/请计算请计算sizeof(p)=sizeof(p)=_4_4_3.3.补充

17、完整下面的类定义:补充完整下面的类定义:class XCHclass XCHchar*a;char*a;public:public:XCH(char*aa)/XCH(char*aa)/构造函数构造函数a=new charstrlen(aa)+1;a=new charstrlen(aa)+1;strcpy(a,aa);strcpy(a,aa);XCH&operator=(const XCH&x)/XCH&operator=(const XCH&x)/重载赋值函数重载赋值函数delete a;delete a;a=new charstrlen(x.a)+1;a=new charstrlen(x.a

18、)+1;strcpy(a,x.a);strcpy(a,x.a);_;_;XCH()delete a;XCH()delete a;_ return*this _return*this _4.4.请写出下面程序的输出结果请写出下面程序的输出结果#include#includeusing namespace std;using namespace std;class Animal class Animal public:public:virtual char*getType()const returnvirtual char*getType()const returnAnimal;Animal;vi

19、rtual char*getVoice()const returnvirtual char*getVoice()const returnVoice;Voice;class Dog:public Animalclass Dog:public Animalpublic:public:char*getType()const return Dog;char*getType()const return Dog;char*getVoice()const return Woof;char*getVoice()const return Woof;void type(Animal&a)couta.getType

20、();void type(Animal&a)couta.getType();void speak(Animal a)couta.getVoice();void speak(Animal a)couta.getVoice();int main()int main()Dog d;type(d);cout speakDog d;type(d);cout speak;speak(d);coutendl;speak(d);coutendl;return 0;return 0;_ Dog speak Voice Dog speak Voice _ _三、问答题三、问答题(5*10+9+15=74)(5*1

21、0+9+15=74)1.1.编写类编写类 StringString 的拷贝构造函数和赋值函数的拷贝构造函数和赋值函数(可以调用可以调用 C+/CC+/C 的字符串库函的字符串库函数数)(15)(15)。已知类已知类 StringString的原型为:的原型为:class Stringclass String public:public:String(const char*str=NULL);String(const char*str=NULL);/普通构造函数普通构造函数String(const String&other);String(const String&other);/拷贝构造函数拷

22、贝构造函数 String(void);String(void);/析析 构构 函函数数String&operate=(const String&other);String&operate=(const String&other);/赋值函数赋值函数private:private:char*m_data;char*m_data;/用用 于于 保保存字符串存字符串;请编写请编写 StringString的上述的上述 4 4 个函数。个函数。/String/String的析构函数的析构函数String:String(void)String:String(void)/3/3 分分 delete m_d

23、ata;delete m_data;/由于由于 m_datam_data 是内部数据类型,是内部数据类型,也可以写成也可以写成delete m_data;delete m_data;/String/String的普通构造函数的普通构造函数String:String(constString:String(const/6/6 分分 charchar*str)*str)if(str=NULL)if(str=NULL)m_datam_data=newnew char1;char1;/若能加若能加NULLNULL 判断则更好判断则更好*m_data=*m_data=0;0;elseelse int le

24、ngth=strlen(str);int length=strlen(str);m_data=new charlength+1;m_data=new charlength+1;/若若能加能加 NULLNULL 判断则更好判断则更好strcpy(m_data,str);strcpy(m_data,str);/拷贝构造函数拷贝构造函数String:String(constString:String(const StringString&other)&other)/3 3 分分 int length=strlen(other.m_data);int length=strlen(other.m_dat

25、a);m_datam_data=newnew charlength+1;charlength+1;/若能加若能加 NULLNULL 判断则更好判断则更好strcpy(m_data,other.m_data);strcpy(m_data,other.m_data);/赋值函数赋值函数StringString&String:operateString:operate=(const=(const StringString&other)&other)/13/13 分分/4/4 分分if(this=&other)if(this=&other)return*this;return*this;/(2)(2)

26、释放原有的内存资源释放原有的内存资源/3 3分分delete m_data;delete m_data;/(3 3)分配新的内存资源,分配新的内存资源,并复制内并复制内容容/3/3 分分int length=strlen(other.m_data);int length=strlen(other.m_data);m_datam_data=newnewcharlength+1;charlength+1;/若能加若能加 NULLNULL 判断则更好判断则更好strcpy(m_data,other.m_data);strcpy(m_data,other.m_data);/(4 4)返返 回回 本本

27、对对 象象 的的 引引 用用(1)(1)检检查查自自赋赋值值/3/3 分分return*this;return*this;2 2不调用不调用 C+/CC+/C 的字符串库函数,请编写函数的字符串库函数,请编写函数strcmpstrcmp 的实现的实现(10)(10)。int strcmp(const char*src,const char*dst)int strcmp(const char*src,const char*dst)char*strcpy(char*strDest,const charchar*strcpy(char*strDest,const char*strSrc)*strSr

28、c)char*address=strDest;char*address=strDest;while(*strDest+=*strSrc+)while(*strDest+=*strSrc+)NULL;NULL;return address;return address;3 3 F(n)=F(n-1)+F(n-2),F(0)=1,F(1)=1.F(n)=F(n-1)+F(n-2),F(0)=1,F(1)=1.分别用递归和循环求分别用递归和循环求 F(5)(10)F(5)(10)。public int R(int num)public int R(int num)if(num=0)if(num=0)

29、num=1;num=1;else if(num=1)else if(num=1)num=1;num=1;elseelsenum=R(num-1)+R(num-2);num=R(num-1)+R(num-2);return num;return num;public int c(int num)public int c(int num)int a=1;int a=1;int b=1;int b=1;int c=0;int c=0;for(int i=0;i num-2;i+)for(int i=0;i next=NULL)if(head=NULL)|(head-next=NULL)return

30、head;return head;p1=head;p1=head;p2=p1-next;p2=p1-next;while(p2!=NULL)while(p2!=NULL)p3=p2-next;p3=p2-next;p2-next=p1;p2-next=p1;p1=p2;p1=p2;p2=p3;p2=p3;head-next=NULL;head-next=NULL;p1=head;p1=head;return head;return head;5 5 从冒泡排序、直接插入排序、二分插入排序和选择排序四种排序算法中,选从冒泡排序、直接插入排序、二分插入排序和选择排序四种排序算法中,选择其中一种算法

31、,写出它的实现?择其中一种算法,写出它的实现?(10)(10)#include#include#include#include#include#include#include#includevoid BubbleSort(int*L,int N)void BubbleSort(int*L,int N)/冒泡冒泡 int i,j;int i,j;int t;int t;for(i=1;i=N;i+)for(i=1;ii;j-)for(j=N;ji;j-)if(LjLj-1)if(LjLj-1)t=Lj;t=Lj;Lj=Lj-1;Lj=Lj-1;Lj-1=t;Lj-1=t;int SelectMi

32、nKey(int*L,int N,int n)int SelectMinKey(int*L,int N,int n)int i,min=n;int i,min=n;for(i=n+1;i=N;i+)for(i=n+1;i=N;i+)if(LiLmin)if(LiLmin)min=i;min=i;return min;return min;void SelectSort(int*L,int N)void SelectSort(int*L,int N)/选择选择 int i,j;int i,j;int t;int t;for(i=1;iN;i+)for(i=1;iN;i+)j=SelectMinK

33、ey(L,N,i);j=SelectMinKey(L,N,i);Li=rand();Li=rand();tit+=clock();tit+=clock();SelectSort(L,N);SelectSort(L,N);tit+=clock();tit+=clock();for(i=1;i=N;i+)for(i=1;i=N;i+)Li=rand();Li=rand();tit+=clock();tit+=clock();InsertSort(L,N);InsertSort(L,N);tit+=clock();tit+=clock();for(i=1;i=N;i+)for(i=1;i=N;i+)

34、Li=rand();Li=rand();tit+=clock();tit+=clock();ShellSort(L,N);ShellSort(L,N);tit+=clock();tit+=clock();printf(n%dt,N);printf(n%dt,N);for(k=0;k4;k+)for(k=0;k4;k+)printf(|%dt,(ti2*k+1-ti2*k);printf(|%dt,(ti2*k+1-ti2*k);N*=5;N*=5;printf(nn);printf(nn);6 6 一个类中,一个类中,constconst 类型成员函数的主要作用是什么?在该函数中可以调用该类型

35、成员函数的主要作用是什么?在该函数中可以调用该类的什么类型的成员变量和成员函数?该类的一个非类的什么类型的成员变量和成员函数?该类的一个非 constconst 对象可以调用对象可以调用constconst 成员函数吗?成员函数吗?(10)(10)(1 1)可以定义)可以定义 constconst 常量,具有不可变性。常量,具有不可变性。(2 2)便于进行类型检查,使编译器对处理内容有更多了解,消除了一些隐患。例如:)便于进行类型检查,使编译器对处理内容有更多了解,消除了一些隐患。例如:void f(const int void f(const inti)i)编译器就会知道编译器就会知道 i

36、i 是一个常量,不允许修改;是一个常量,不允许修改;(3 3)可以避免意义模糊的数字出现,同样可以很方便地进行参数的调整和修改。)可以避免意义模糊的数字出现,同样可以很方便地进行参数的调整和修改。同宏定义一样,可以做同宏定义一样,可以做到不变则已,一变都变!如(到不变则已,一变都变!如(1 1)中,如果想修改)中,如果想修改 MaxMax 的内容,只需要:的内容,只需要:const int Max=you want;const int Max=you want;即可!即可!(4 4)可以保护被修饰的东西,防止意外的修改,增强程序的健壮性。)可以保护被修饰的东西,防止意外的修改,增强程序的健壮性

37、。还是上面的例子,如果在函数体内还是上面的例子,如果在函数体内修改了修改了 i i,编译器就会报错;,编译器就会报错;例如:例如:void f(const int i)void f(const int i)(5 5)为函数重载提供了一个参考。为函数重载提供了一个参考。class A .class A .void f(int i)/void f(int i)/一个函数一个函数void f(int i)const /void f(int i)const /上一个函数的重载上一个函数的重载.;(6 6)可以节省空间,避免不必要的内存分配。可以节省空间,避免不必要的内存分配。constconst 定义

38、常量从汇编的角度来看,只是给出了对应的内存地址,而不是象定义常量从汇编的角度来看,只是给出了对应的内存地址,而不是象#define#define 一样给出的是立即数,一样给出的是立即数,所以,所以,constconst 定义的常量在程序运行过程中只有一份拷贝,而定义的常量在程序运行过程中只有一份拷贝,而#define#define 定义的常量在内存中有若干个拷贝。定义的常量在内存中有若干个拷贝。(7 7)提高了效率。提高了效率。编译器通常不为普通编译器通常不为普通 constconst 常量分配存储空间,而是将它们保存在符号表中,这使常量分配存储空间,而是将它们保存在符号表中,这使得它成为一个

39、编译期间的常量,没有了存储与读内存的操作,使得它的效率也很高。得它成为一个编译期间的常量,没有了存储与读内存的操作,使得它的效率也很高。不能修改类的数据成员,不能在函数中调用其他不是不能修改类的数据成员,不能在函数中调用其他不是 constconst 的函数的函数.1 1)constconst 对象调用的是对象调用的是 constconst 成员函数成员函数。2 2)非)非 constconst 成员函数可以调用成员函数可以调用 constconst 成员函数,这样做一般是用来避免代码重成员函数,这样做一般是用来避免代码重复,但引入了一个复,但引入了一个 castingcasting 动作。动

40、作。7 7下面两个语句的执行效果相同吗?为什么?下面两个语句的执行效果相同吗?为什么?(9)(9)语句语句 1:while(*p+);1:while(*p+);语句语句 2:while(*p)p+;2:while(*p)p+;区别在于退出循环后区别在于退出循环后,p,p 的值不一样的值不一样while(while(*p+*p+););/当当*p=0*p=0 时,退出循环,此时时,退出循环,此时p+p+仍然执行了仍然执行了while(*p)p+;while(*p)p+;/当当*p=0*p=0 时,退出循环,此时时,退出循环,此时p+p+不再被执行不再被执行例如例如 charchar*p=ABCD;*p=ABCD;执行完第一个执行完第一个 whilewhile循环后,循环后,p p 指向的是指向的是00后面的一个字节,后面的一个字节,*p*p 的的结果是未知的结果是未知的而如果是执行第二个循环,则而如果是执行第二个循环,则 p p 指向的是指向的是0,0,也也就是就是DD后面的一字节,即后面的一字节,即*p=0*p=0

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 应用文书 > 工作报告

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com